Нормаль равностороннего треугольника, произвольно преобразованного в трехмерном пространстве - PullRequest
4 голосов
/ 17 января 2010

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 18 января 2010

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

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

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

0 голосов
/ 17 января 2010

Я чувствую, что Я только что ответил вчера.

...