Нормаль равностороннего треугольника, произвольно преобразованного в трехмерном пространстве.

У меня есть проблема, по которой я не могу найти отправную точку; Я даже не уверен, что могу описать это достаточно хорошо, чтобы получить ответ.

Мне нужно найти нормаль равностороннего треугольника в трехмерном пространстве, не зная заранее точки треугольника. Подумайте о том, чтобы сфотографировать треугольный уличный знак «уступка» под любым углом и определить по этой фотографии нормаль наружу. (Я не делаю этого, точно, но аналогично - поэтому я буду использовать метафору знака / фотографии с этого момента).

** ОБНОВЛЕНИЕ **: тот же вопрос возник за день до того, как я спросил свою версию, которую вы можете просмотреть здесь. Спасибо BlueRaja за то, что указали мне туда. Думаю, обсуждение там даст ответ на вопрос. Однако ниже представлен вычислительный подход, который также очень интересен.

Я знаю, как найти нормаль треугольника, когда я создаю треугольник в коде, но я не уверен, как сопоставить точки с треугольником на фотографии в 3D. Я знаю длину каждой стороны, поэтому знаю, как далеко должны быть друг от друга точки при любой ориентации. Я могу создать интерактивный инструмент, которым я могу наложить треугольник, повернуть его в нужное место и получить от него точки, но мне нужно делать это без взаимодействия. Это также не помогает мне разобраться в математике.

Я даже не уверен, что мне нужно определять точки так же, как просто найти правильную матрицу вращения.

Я просто не могу понять, с чего начать ... Поиск концепции оказывается пустым или просто не то, что я хочу сделать (например: это 2D-преобразования, а не 3D)

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

Мысли? Заранее спасибо!


person Community    schedule 17.01.2010    source источник
comment
Будьте готовы получить 2 результата ваших расчетов; один для треугольника перед плоскостью проекции и один сзади.   -  person Ignacio Vazquez-Abrams    schedule 17.01.2010
comment
В самом деле, я привык иметь дело с этим и для 2D-нормалей линий. Но спасибо за напоминание.   -  person    schedule 17.01.2010
comment
Вы пробовали искать ресурсы по компьютерному зрению? Похоже, они часто сталкиваются с этой проблемой. Также на SO есть метка компьютерного зрения, которая может подойти.   -  person celion    schedule 17.01.2010
comment
@celion: Хороший момент - добавлен тег CV. Спасибо. Прежде чем спросить здесь, я просмотрел множество ресурсов; трудно найти то, что я не совсем уверен, что ищу :-)   -  person    schedule 17.01.2010


Ответы (2)


Это может быть решено (помимо встроенной четверной неоднозначности) математически или вычислительно. Поскольку это SO, я опишу вычислительный подход.

В общем, подход состоит в том, чтобы смотреть на проецируемые углы, и, поскольку вы знаете истинные углы, вы можете рассчитать ориентацию. Чтобы конкретизировать, начните со следующей визуализации: представьте, что треугольник плоский в плоскости x-y и нормален вдоль оси z, и поместите здесь сферу, которая касается всех углов треугольника, со всем центром в начале координат. Теперь поверните нормаль ко всем точкам сферы и обратите внимание на проецируемые углы. Ключевым моментом здесь является то, что теперь для каждого возможного проецируемого угла вы можете нарисовать изоугловой путь на сфере (то есть путь нормали, который указывает все положения, для которых вы наблюдаете один и тот же проецируемый угол - который, вероятно, является кругом. , но я не уверен без математических расчетов). Итак, чтобы решить исходную задачу, возьмите два из наблюдаемых углов, нарисуйте изоугловые пути, и возможные решения будут пересечением этих путей.

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

person tom10    schedule 18.01.2010
comment
Аккуратный! Я так думаю и могу это понять. Это вызывает у меня в голове новый, другой путь (без каламбура), который я опробую на бумаге и посмотрю, как он работает. Спасибо! Немного обновлю. - person ; 19.01.2010

Мне кажется, что я только что ответил на это вчера.

person BlueRaja - Danny Pflughoeft    schedule 17.01.2010
comment
Нет, это ответ для трех известных моментов. Здесь точки совершенно неизвестны. Все, что вам нужно, - это проекция на плоскость в ракурсе. - person Ignacio Vazquez-Abrams; 17.01.2010
comment
Прочтите комментарии - я расскажу вам, как найти точки в 3д, зная, какие они находятся в 2д (т.е. зная расстояние между ними) - person BlueRaja - Danny Pflughoeft; 17.01.2010
comment
Спасибо! Этот пост не попал в поисковые запросы (возможно, я использовал другие термины). Это определенно звучит похоже на мою проблему, и есть несколько способов ее изучить. Что касается ваших комментариев в этом посте, не могли бы вы расширить то, что вы там говорите, чтобы я мог лучше понять всю концепцию? (В частности, как это работает с 9 уравнениями / неизвестными для решения, просто на основе уравнения, которое вы представляете) - person ; 17.01.2010
comment
@gw: Ян Бойд отредактировал свой ответ (в сообщении, на которое я указал); Я считаю, что это правильно и очень хорошо написано, теперь я отсылаю вас к его ответу. - person BlueRaja - Danny Pflughoeft; 20.01.2010
comment
Вау - основательно. Спасибо что подметил это. Я был на встречах с клиентами на прошлой неделе, поэтому у меня не было времени все осмотреть. - person ; 25.01.2010