2011-12-31 10 views
0

3D 공간과 두 각도의 점이 있습니다.이 정보에서 결과 행을 계산하려고합니다. 3D를 사용하지 않고 2D 선으로이 작업을 수행하는 방법을 찾았습니다. 이것을 어떻게 계산할 수 있습니까?3d에서 시작점과 각도에서 선 계산

도움이되는 경우 : OpenGL을 사용하여 C++ & OpenGL을 사용하고 있으며 카메라의 각도와 사용자의 마우스 클릭 위치를 가지므로이 선의 교차점을 추적하고 싶습니다.

+0

사용자가 클릭 한 위치로 광선을 투영하려는 것은 카메라에서 비롯된 것입니까? –

+0

맞습니다. 나는이 말을 처음 접했고, 올바른 보컬을 사용하고 있는지 확신 할 수 없습니다. –

+0

어떤 언어를 사용하고 있습니까? – vdbuilder

답변

2

trig 용어로는 3D 공간에서 선을 정의하는 데 두 개의 각도와 점이 필요합니다.

X = R 죄 (Q) COS (F)

Y = R 죄 (Q) 죄 (F (X는, Y는, Z)이 직교 단지 극좌표 상태인지를 변환하는 방정식은 좌표)

Z = R의 COS (Q)

r은 원점에 점 P에서의 거리

; 선 OP와 양의 극축 (z 축으로 생각할 수 있음) 사이의 각도 q (zenith); 초기 광선과 OP의 적도면으로의 투영 사이의 각도 f (방위각) (일반적으로 x 축에서 측정).

편집 : 당신이 무엇을 물어의 첫 번째 부분이었다 그

좋아요. 나머지는 질문에 대한 업데이트 이후의 진정한 질문이며, 단지 3 차원 공간에서 2 개의 각도와 한 점으로부터 선을 만드는 것보다 훨씬 복잡합니다. 여기에는 카메라 - 월드 변환 행렬 사용이 포함되며 다른 SO 문제에서 다루어졌습니다. 편의상 여기에 하나 : How does one convert world coordinates to camera coordinates? 답변은 세계 대 카메라와 카메라 대 세계로의 변환을 다룹니다.

+0

편집 해 주셔서 감사합니다. 그러나 이미 GluUnproject를 사용하여 요점을 가지고 있습니다. –

+0

@Shawn B 기본적으로, 거기에서 당신이 가진 점은 Origin이 위의 수학과 함께 라인을 만들고, 세계 좌표계에서 라인 좌표를 얻기 위해 변환 매트릭스를 적용한다는 것입니다. – vdbuilder

2

라인은 "시간"의 포인트로 간주 될 수 있습니다. 방정식은 벡터화되어야하며, 이해할 방향이 있어야합니다. 따라서 시간은 자연스럽게 생각할 수있는 방법입니다. 따라서 3 차원 선의 방정식 실제로 X, Y의 세 개의 차원 방정식 같은 시간 관련 Z 일 수 :

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 1 초.

그래서 그 라인을 그리는 것은 10 초 동안 또는 1/1000 초마다와 같이 원하는만큼 괜찮은 포인트를 채우는 것입니다. 실제로는 라인을 그릴 수 있습니다. 거리에서 보았을 때 10 초 이상의 거리를 선으로 표시하며, 선택한 "속도"에 따라 결정됩니다.

+0

나는 카메라의 각도를도 단위로 가지고 있는데, 계산을 위해 그들은 어떤 단위를 사용해야합니까? –

+0

각도 정보는 카메라가 원점 (선의 시작 지점), 점 (0,0,0)이라는 가정하에 포함됩니다. 카메라의 각도 또는 3D 공간의 점을 감안할 때 카메라를 원점으로 가정 할 때 3D 선을 추론 할 수 있습니다. 둘 다 필요하지는 않습니다. – Motes

+0

카메라가 원점에 있지 않고 대신 X와 Y에서 45도 회전 했습니까? –

관련 문제