문제

(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 축으로 옮기기위한 변환"섹션이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top