2010-01-17 5 views
4

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

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

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

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

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

Я просто не в состоянии понять, с чего начать ... Ищет концепция придумать пустым или просто не то, что я ищу, чтобы сделать (например: они 2D трансформирует не 3D)

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

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

+0

Будьте готовы получить 2 результатов по Вашим расчетам; один для треугольника «спереди» плоскости проекции, а один для «сзади». –

+0

Действительно, я привык иметь дело с этим и для нормалей 2D линии. Но спасибо за напоминание. – 2010-01-17 04:51:12

+0

Вы пытались найти ресурсы компьютерного зрения? Это похоже на проблему, которую они часто решали. Там также есть тег компьютерного видения на SO, который может быть уместным. – celion

ответ

0

Я чувствую себя как I just answered this вчера.

+2

Нет, этот ответ для трех известных точек. Здесь точки полностью неизвестны. Все, что вам нужно - это ракурс, нанесенный на плоскость. –

+0

Читать комментарии - Я расскажу вам, как найти точки в 3d, зная, что они находятся в 2d (т. Е. Знает расстояние между ними) –

+0

Спасибо! Этот пост не появился в результатах поиска (возможно, я использовал разные термины). Это определенно похоже на мою проблему, и есть несколько путей для изучения там. Что касается ваших комментариев в этом сообщении, можете ли вы расширить то, что вы там говорите, чтобы я мог лучше понять всю концепцию? (В частности, как это работает, чтобы решить 9 уравнений/неизвестных, только на основе представленного уравнения) – 2010-01-17 05:17:47

0

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

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

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

+0

Уход! Вот как я думаю, и к этому я могу относиться. Это поднимает новый, другой путь (не каламбур) в моей голове, что я попробую на бумаге и посмотреть, как это работает. Благодаря! Немного обновится. – 2010-01-18 22:06:49