Z 축을 벡터와 정렬하는 가장 쉬운 방법은 무엇입니까?
문제
(0, 0, 0) 및 (x, y, z)와 같은 벡터와 같은 지점이 주어졌습니다. 이 벡터의 방향을 가리키기 위해 (0, 0, 0) 중심의 음의 z 축을 정렬하는 가장 쉬운 방법은 무엇입니까? OpenGL을 사용하는 예는 환영하지만 NECCESSARY는 아닙니다.
해결책
주어진 방향을 가리키기 위해 좌표 프레임을 회전시키는 방법에는 여러 가지가 있습니다. 그들은 모두 z 축을 원하는 방향으로 향하게하지만 x- 및 y 축 방향의 변화가 있습니다.
다음은 가장 짧은 회전을 얻습니다.
vec3 target_dir = normalise( vector );
float rot_angle = acos( dot_product(target_dir,z_axis) );
if( fabs(rot_angle) > a_very_small_number )
{
vec3 rot_axis = normalise( cross_product(target_dir,z_axis) );
glRotatef( rot_angle, rot_axis.x, rot_axis.y, rot_axis.z );
}
다른 팁
당신은 아마보고 싶을 것입니다 다이아나 그루버의 기사
내 자신의 질문에 대답하기 위해, 내가 생각해 낸 가장 좋은 대답은 다음과 같습니다.
벡터를 "구성 요소"로 나눕니다. X 구성 요소는 X 축을 따라 변위입니다. Trigonometry로 돌아 가면 Cos (alpha) = x / vector_magnitude가 있습니다. RHS를 계산하면 y 축을 중심으로 회전 해야하는 양인 알파를 도출 할 수 있습니다.
그런 다음 좌표계는 glrotatef ()에 대한 일련의 호출에 의해 벡터에 정렬 될 수 있습니다.
좌표를 회전시키는 것에 대한 많은 자원이 있습니다 (또는 동일한 대상에 해당하는 객체 회전). 나는 많은 것을 배웠다 이 지역, 여러 차원에서 프로그래밍하는 방법과 특히 벡터를 조작하는 방법
그 페이지 여기 "벡터를 Z 축으로 옮기기위한 변환"섹션이 있습니다.
제휴하지 않습니다 StackOverflow