Информация об изменениях

Сообщение Re: Рассказ о Крутом Манагере от 05.02.2015 15:40

Изменено 05.02.2015 15:53 GhostCoders

Здравствуйте, Юрий Лазарев, Вы писали:

В качестве примера — привожу последний наш разговор на фирме. Перед этим мне доверили разобрать их (такой ценный) код в попытке ответить одному из клиентов на недоуменный вопрос, почему их программа не выдает расстояний между точками, находящимися в разных локальных системах координат. Системы координат у них произвольные, т.е. с произвольной матрицей растяжения и поворота. Мне открыто в глаза было заявлено ЗМанагером, что расстояния измеряются только внутри локальных систем, а в разных системах расстояния будут зависеть от их расположения (!) и потому выводить расстояния нельзя.

Мне как физику (а не ИТ хомяку) было заранее понятно, что тут что то не так. В реальном мире (а не в ИТ "Матрице") расстояния инвариантны независимо от координат. Обдумав ситуацию, на след.день я пришел к ним обрадовать их известием, что они неправильно измеряют расстояния, что в произвольной системе координат метрические измерения нельзя производить без учета метрического тензора, и что по видимому, они просто не знают основ математики.

На меня поглядели как на белую ворону, и в тот же час дали расчет. Разговора про тензоры не состоялось. Можно только пожалеть босса за его такую преданную команду ослов.


Долгое время не решался написать, но напишу, так как не вытерпел.

В нашей системе 3D отчетов есть функция "зонд". Пользователь щелкает мышью на какую-то точку 3D модели, и система выдает координаты этой точки.
Есть также функция измерения расстояний.

Хочу отметить, что у "зонда" есть два режима: режим показа глобальных координат и режим показа локальных координат.
И пользователь может переключиться между двумя этими режимами используя галочку (check box).
Также во время генерации отчета другой пользователь (автор отчета) может задать режим (глобальный\локальный) используемый по умолчанию.
Автор отчета может выбрать, будет ли галочка "глобальный режим" доступна пользователю во время просмотра отчета.

Так вот, в глобальном режиме и координаты и растояния вычисляются без проблем.

В случае, если пользователь выбрал режим отображения локальных координат, то с отображением самих координат проблем тоже нет.
Есть некоторые неясности насчёт режима показа локальных координат и функции измерения расстояний.

Для измерения расстояний пользователь должен указать как минимум две точки.
В случае, если обе точки находятся в одинаковой локальной системе координат — то вопросов как считать расстояние не возникает.

Если же точки находятся на разных 3D моделях и эти модели находяться в разных локальных системах координат (то есть имеют разные полные матрицы трансформаций в scene graph), то тут возможно несколько вариантов:
1. координаты второй точки перевести в координатную систему первой точки и выдать эквлидово расстояние между двумя точками
2. координаты первой точки перевести в координатную систему второй точки и выдать эквлидово расстояние между двумя точками
3. координаты точек перевести в глобальную систему координат и вычислить эквлидово расстояние. Но тут получается, что данный режим дублирует функцию измерения расстояний в режиме показа глобальных координат.
4. вывести сообщение о невозможности вычисления расстояния между точками, расположенными в разных системах координат

У нас был реализован вариант №4. И через какое-то время мы получили письмо от пользователя, что, мол, "система не показывает расстояния" и "выдает ошибку".

Я дал задание Юре разобраться в ситуации. Объяснил, как работает текущая система, и что тут нужно подумать, что лучше сделать варинат №1 или вариант №2.
Попросил Юру сделать необходимые изменения в коде, например, реализовать, к примеру, вариант №1, чтобы Юра мог для начала разобраться в текущем коде.
Тут работы было отсилы на полчаса, чтобы применить матрицу преобразования из одной локальной системы координат в другую и вычислить эвклидово расстояние.

Но Юрий засел над работой на аж несколько дней (почти на неделю, правда отвлекаясь на другие задачи).
Я периодически подходил к нему и интересовался, как идут дела. Он мне отвечал, что он изучает текущий код и его "дебажит", чтобы понять как он работает.

После недели работы Юрий мне заявил, что вообще расстояние в локальных координатных системах выводить не правильно в принципе,
и нужно переводить все в глобальную систему координат и для этого нужно использовать метрические тензора.

На это я ему заметил, что у нас уже есть для этого специальный режим показа глобальных координат и измерения "глобальных" растояний, и ничего изменять в существующем коде не нужно.
И, что я лучше за 15 минут напишу пользователю письмо с рекомендацией использовать режим вывода глобальных координат и т.д.
А то и так уже слишком много времени ушло, и что на эту работу нужно отводить максимум 1 час (если конечно знаешь, где изменять).
Но я ему говорил, что если какие-то вопросы будут — то обращайся.

Да и что там такого сложного в вычислении эвклидова растояния и перевода координат точки из локальной системы в глобальную и при помощи умножения вектора на матрицу?
Тем более в коде у нас есть готовые классы матриц, векторов, достаточно воспрользоваться перегруженным оператором *.

Я написал пользователям письмо. Пользователей режим глобальных координат устроил, а Юрий продожал "дебажить" этот код, несмотря на то, что я его попросил уже не заниматься этой задачей.
На следующий день я решил что пора решительно поговорить с Юрой. Когда, я ему сообщил о том, что он уволен, Юра начал говорить о том, что мы не понимаем основ математики,
что мы безграмотны, что надо использовать тензоры и т.д. Естественно, я на него смотрел как "на белую ворону" И дальнейших дискуссий решил не заводить.

И несколько слов о расстоянии в локальных системах координат, хотя тут уже Bender ответил.
Допустим, у нас есть глобальная система координат. И она измеряется в метрах.
Например, расстояние между точкой (0,0,0) и (1,0,0) есть 1 метр.

Допустим, у нас есть некая локальная система координат, имеющая матрицу трансформации (матрица маштабирования)
0.01 0 0 0
0 0.01 0 0
0 0 0.01 0
0 0 0 1
Фактически такая матрица применяется для преобразования локальных координат в глобальные.
Скажем точке, (100, 0, 0) в локальной системе координат соответствует точка (1,0,0) в глобальной системе.

Чему равно растояние между точкой (100, 0, 0) и точкой (0, 0, 0) в локальной системе координат? Правильно, 100.
Но 100 чего? Правильно, 100 сантиметров. 100 сантиметров в локальной системе координат соответствуют значению 1 в глобальной, но уже метров.

Поворот локальной системы координат вообще никак не влияет на расстояния, как и перенос.
И сложность функции измерения расстояний в локальных систем координат заключается в отображении единиц измерения. И на это можно было потратить время разработчику, а не "дебажить".

Еще другой пример.
У меня на столе лежит клавиатура. Я могу ее длину измерить следующим образом.
Измерить координату ее левого края относительно левой кромки стола, и измерить координату ее правого края относительно все той же кромки.
И вычислить длину клавиатуры через разницу координат (допустим клавиатура лежит параллельно передней кромки стола).
Какую я систему координат использовал для определение координат клавиатуры?
Локальную или глобальную?

Естественный ответ — локальную, так как начало системы координат совпадает со столом.
Тогда, согласно умозаключениям Юры, я неправильно измерил длину клавиатуры, потому что "не знаю основ математики".

А если мы захотим "правильно" определить длину клавиатуры, согласно методу Юры, мы должны использовать "глобальную" систему координат.
Только вот проблема в том, что же будет являться этой "глобальной" координатной системой?

Навигационная система координат UTM? Система координат, связанная с центром Земли? Или система координат связанная с центром Солнца?

Ах, мы забыли, что в физике все неинерционные системы координат равноправны...
Или может Юрий является сторонником гипотезы об эфире, который является физическим воплощением единой "глобальной" системы координат?
Ну так

Абсолютное пространство было упразднено специальной теорией относительности

проходят даже в школе. Даже в школе проходят постулаты Энштейна.
Но "физику" Юрию это неизвестно.
Re: Рассказ о Крутом Манагере
Здравствуйте, Юрий Лазарев, Вы писали:

В качестве примера — привожу последний наш разговор на фирме. Перед этим мне доверили разобрать их (такой ценный) код в попытке ответить одному из клиентов на недоуменный вопрос, почему их программа не выдает расстояний между точками, находящимися в разных локальных системах координат. Системы координат у них произвольные, т.е. с произвольной матрицей растяжения и поворота. Мне открыто в глаза было заявлено ЗМанагером, что расстояния измеряются только внутри локальных систем, а в разных системах расстояния будут зависеть от их расположения (!) и потому выводить расстояния нельзя.

Мне как физику (а не ИТ хомяку) было заранее понятно, что тут что то не так. В реальном мире (а не в ИТ "Матрице") расстояния инвариантны независимо от координат. Обдумав ситуацию, на след.день я пришел к ним обрадовать их известием, что они неправильно измеряют расстояния, что в произвольной системе координат метрические измерения нельзя производить без учета метрического тензора, и что по видимому, они просто не знают основ математики.

На меня поглядели как на белую ворону, и в тот же час дали расчет. Разговора про тензоры не состоялось. Можно только пожалеть босса за его такую преданную команду ослов.


Долгое время не решался написать, но напишу, так как не вытерпел.

В нашей системе 3D отчетов есть функция "зонд". Пользователь щелкает мышью на какую-то точку 3D модели, и система выдает координаты этой точки.
Есть также функция измерения расстояний.

Хочу отметить, что у "зонда" есть два режима: режим показа глобальных координат и режим показа локальных координат.
И пользователь может переключиться между двумя этими режимами используя галочку (check box).
Также во время генерации отчета другой пользователь (автор отчета) может задать режим (глобальный\локальный) используемый по умолчанию.
Автор отчета может выбрать, будет ли галочка "глобальный режим" доступна пользователю во время просмотра отчета.

Так вот, в глобальном режиме и координаты и растояния вычисляются без проблем.

В случае, если пользователь выбрал режим отображения локальных координат, то с отображением самих координат проблем тоже нет.
Есть некоторые неясности насчёт режима показа локальных координат и функции измерения расстояний.

Для измерения расстояний пользователь должен указать как минимум две точки.
В случае, если обе точки находятся в одинаковой локальной системе координат — то вопросов как считать расстояние не возникает.

Если же точки находятся на разных 3D моделях и эти модели находяться в разных локальных системах координат (то есть имеют разные полные матрицы трансформаций в scene graph), то тут возможно несколько вариантов:
1. координаты второй точки перевести в координатную систему первой точки и выдать эквлидово расстояние между двумя точками
2. координаты первой точки перевести в координатную систему второй точки и выдать эквлидово расстояние между двумя точками
3. координаты точек перевести в глобальную систему координат и вычислить эквлидово расстояние. Но тут получается, что данный режим дублирует функцию измерения расстояний в режиме показа глобальных координат.
4. вывести сообщение о невозможности вычисления расстояния между точками, расположенными в разных системах координат

У нас был реализован вариант №4. И через какое-то время мы получили письмо от пользователя, что, мол, "система не показывает расстояния" и "выдает ошибку".

Я дал задание Юре разобраться в ситуации. Объяснил, как работает текущая система, и что тут нужно подумать, что лучше сделать варинат №1 или вариант №2.
Попросил Юру сделать необходимые изменения в коде, например, реализовать, к примеру, вариант №1, чтобы Юра мог для начала разобраться в текущем коде.
Тут работы было отсилы на полчаса, чтобы применить матрицу преобразования из одной локальной системы координат в другую и вычислить эвклидово расстояние.

Но Юрий засел над работой на аж несколько дней (почти на неделю, правда отвлекаясь на другие задачи).
Я периодически подходил к нему и интересовался, как идут дела. Он мне отвечал, что он изучает текущий код и его "дебажит", чтобы понять как он работает.

После недели работы Юрий мне заявил, что вообще расстояние в локальных координатных системах выводить не правильно в принципе,
и нужно переводить все в глобальную систему координат или нужно использовать метрический тензор.

На это я ему заметил, что у нас уже есть для этого специальный режим показа глобальных координат и измерения "глобальных" растояний, и ничего изменять в существующем коде не нужно.
И, что я лучше за 15 минут напишу пользователю письмо с рекомендацией использовать режим вывода глобальных координат и т.д.
А то и так уже слишком много времени ушло, и что на эту работу нужно отводить максимум 1 час (если конечно знаешь, где изменять).
Но я ему говорил, что если какие-то вопросы будут — то обращайся.

Да и что там такого сложного в вычислении эвклидова растояния и перевода координат точки из локальной системы в глобальную и при помощи умножения вектора на матрицу?
Тем более в коде у нас есть готовые классы матриц, векторов, достаточно воспрользоваться перегруженным оператором *.

Я написал пользователям письмо. Пользователей режим глобальных координат устроил, а Юрий продожал "дебажить" этот код, несмотря на то, что я его попросил уже не заниматься этой задачей.
На следующий день я решил что пора решительно поговорить с Юрой. Когда, я ему сообщил о том, что он уволен, Юра начал говорить о том, что мы не понимаем основ математики,
что мы безграмотны, что надо использовать тензоры и т.д. Естественно, я на него смотрел как "на белую ворону" И дальнейших дискуссий решил не заводить.

И несколько слов о расстоянии в локальных системах координат, хотя тут уже Bender ответил.
Допустим, у нас есть глобальная система координат. И она измеряется в метрах.
Например, расстояние между точкой (0,0,0) и (1,0,0) есть 1 метр.

Допустим, у нас есть некая локальная система координат, имеющая матрицу трансформации (матрица маштабирования)
0.01 0 0 0
0 0.01 0 0
0 0 0.01 0
0 0 0 1
Фактически такая матрица применяется для преобразования локальных координат в глобальные.
Скажем точке, (100, 0, 0) в локальной системе координат соответствует точка (1,0,0) в глобальной системе.

Чему равно растояние между точкой (100, 0, 0) и точкой (0, 0, 0) в локальной системе координат? Правильно, 100.
Но 100 чего? Правильно, 100 сантиметров. 100 сантиметров в локальной системе координат соответствуют значению 1 в глобальной, но уже метров.

Поворот локальной системы координат вообще никак не влияет на расстояния, как и перенос.
И сложность функции измерения расстояний в локальных систем координат заключается в отображении единиц измерения. И на это можно было потратить время разработчику, а не "дебажить".

Еще другой пример.
У меня на столе лежит клавиатура. Я могу ее длину измерить следующим образом.
Измерить координату ее левого края относительно левой кромки стола, и измерить координату ее правого края относительно все той же кромки.
И вычислить длину клавиатуры через разницу координат (допустим клавиатура лежит параллельно передней кромки стола).
Какую я систему координат использовал для определение координат клавиатуры?
Локальную или глобальную?

Естественный ответ — локальную, так как начало системы координат совпадает со столом.
Тогда, согласно умозаключениям Юры, я неправильно измерил длину клавиатуры, потому что "не знаю основ математики".

А если мы захотим "правильно" определить длину клавиатуры, согласно методу Юры, мы должны использовать "глобальную" систему координат.
Только вот проблема в том, что же будет являться этой "глобальной" координатной системой?

Навигационная система координат UTM? Система координат, связанная с центром Земли? Или система координат связанная с центром Солнца?

Ах, мы забыли, что в физике все неинерционные системы координат равноправны...
Или может Юрий является сторонником гипотезы об эфире, который является физическим воплощением единой "глобальной" системы координат?
Ну так

Абсолютное пространство было упразднено специальной теорией относительности

проходят даже в школе. Даже в школе проходят постулаты Энштейна.
Но "физику" Юрию это неизвестно.