2011-12-31 2 views
0

У меня есть точка в трехмерном пространстве и двух углах, я хочу рассчитать полученную строку из этой информации. Я нашел, как это сделать с 2D-линиями, но не с 3D. Как это можно рассчитать?Расчет линии от начальной точки и угла в 3d

Если это помогает: я использую C++ & OpenGL и располагаю щелчком мыши мыши и углом камеры, я хочу проследить эту линию для пересечений.

+0

Ты имеешь в виду, что пытаешься бросить луч туда, где пользователь щелкнул, что происходит от камеры? –

+0

Это правильно. Я новичок в этом, не уверен, что я использую правильный vocab. –

+0

Какой язык вы используете? – vdbuilder

ответ

2

В трехмерном выражении для определения линии в 3d-пространстве требуются два угла и точка. Преобразование, что (х, у, г) находится всего полярные координаты в декартовы координаты уравнения являются:

х = г sin (Q) сов (е)

у = г Sin (д) Sin (п)

г = г соз (д)

где г есть расстояние от точки P до начала координат; угол q (зенит) между линией OP и положительной полярной осью (можно рассматривать как ось z); и угол f (азимут) между исходным лучом и проекцией OP на экваториальную плоскость (обычно измеряемую по оси x).

Edit:

Хорошо, что была первая часть того, что вы спрашиваете. Остальная часть, реальный вопрос после обновления вопроса, намного сложнее, чем просто создание строки из 2-х углов и точки в 3d-пространстве. Это связано с использованием матрицы преобразования между камерами и миром и охвачено другими вопросами SO. Для удобства здесь один: How does one convert world coordinates to camera coordinates? Ответы охватывают преобразование из мира в камеру и камеру в мир.

+0

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

+0

@Shawn B В принципе, оттуда вы принимаете то, что у вас есть, это Origin, создайте линию с приведенной выше математикой и примените матрицу трансформации, чтобы получить линейные согласные в мировых соглашениях. – vdbuilder

2

Линия может быть определена как точка во времени. Уравнение должно быть векторизованным или иметь направление, чтобы иметь смысл, поэтому время - естественный способ думать об этом. Таким образом, уравнение линии в 3-х измерениях может быть действительно три две одномерные уравнения х, у, г связанные со временем, такие как:

x = ax*t + cx 
y = ay*t + cy 
z = az*t + cz 

Чтобы найти эту систему уравнений, предполагая, что камера находится в начале координат, (0,0,0), и ваша точка (x1, y1, z1), то

ax = x1 - 0 
ay = y1 - 0 
az = z1 - 0 

cx = cy = cz = 0 

так

x = x1*t 
y = y1*t 
z = z1*t 

Примечание: это также предполагает, что "скорость" линии или вектора такова, что она находится в вашей точке (x1, y1, z1) af ter 1 секунда.

Таким образом, чтобы нарисовать эту линию, просто заполните точки так же хорошо, как вам нужно, сколько потребуется, например, каждые 1/1000 секунды в течение 10 секунд или что-то еще, можете нарисовать «линию», действительно серию точек, которые, если смотреть с расстояния, отображаются в виде линии, на расстояние более 10 секунд, определяемое выбранной вами «скоростью».

+0

У меня есть углы камеры в градусах, на каком блоке они должны быть рассчитаны? –

+0

Информация о углу встроена в предположение, что камера будет происходить (откуда берется линия), точка (0,0,0). Учитывая только углы камеры или точки в 3D-пространстве, предполагая, что камера является источником, можно вывести 3D-линию, вам не нужны оба. – Motes

+0

Что делать, если камера не была в начале координат, а вместо этого имела поворот на 45 градусов на X и Y? –

Смежные вопросы