2013-02-01 1 views
0

+ z 방향의 중심이있는 돔을 상상해보십시오. 내가 원하는 것은 그 돔의 중심을 다른 축 (예 : 20도 x 축, 20도 y 축, 20도 z 축)으로 이동시키는 것입니다. 어떻게해야합니까? 모든 힌트/팁이 도움이됩니다. 나는 잠시 동안 위키 회전 행렬로 취미 삼아 왔습니다임의의 축에서 돔 회전?

:

은 더 많은 정보를 추가합니다. 문제는 교환 가능 연산이 아니라는 것입니다. RxRyRz는 RzRyRx와 같지 않습니다. 그래서 나는 여러 가지 최종 결과를 얻는 방법을 기반으로합니다. 예를 들어, 최종 투영은 원래 X 축에서 20도, 원본 Y 축에서 20도, 원래 Z 축에서 20 도가되도록합니다. 행렬을 기반으로 알파, 베타, 감마 값 20 (또는 해당 라디안)을 지정하면 의도 한 회전이 발생하지 않습니다. 내가 놓친 게 있니? 의도 한 각도를 넣고 끝낼 수있는 매트릭스가 있습니까?

+0

무엇을 사용하고 있습니까? OpenGL? DirectX? 3D 소프트웨어의 일종? – luiges90

+0

Matlab을 사용하고 있습니다. 그래서 그것을 구현하는 이론을 알고 싶습니다. – Louis

+0

적용 할 수 있을지 모르지만'help rotate'를 확인 했습니까? –

답변

0

rotation matrix을 사용하면 (x, y, z) 점의 집합을 쉽게 회전 할 수 있습니다. general rotation 섹션의 방정식을 사용하여 사례의 회전 행렬을 계산할 수 있습니다. 이러한 방정식에 플러그 할 각도 값을 계산하는 것은 까다로울 수 있습니다. 한 번에 하나의 축을 중심으로 회전하는 것으로 생각하고 회전의 순서 (곱셈 순서)가 중요하다는 것을 기억하십시오.

일반적인 회전 방정식의 대안은 calculate a rotation matrix from axis and angle입니다. 이 방법으로 올바른 매개 변수를 정의하는 것이 더 쉬울 수도 있습니다.

업데이트 : 위키 피 디아를 살펴본 후 두 벡터 간의 회전 축과 각도를 계산하는 간단한 방법을 발견했습니다. ab의 시작 및 종료 벡터를 입력하십시오.

a = [0.0 0.0 1.0]; 
b = [0.5 0.5 0.0]; 
vectorMag = @(x) sqrt(sum(x.^2)); 
rotAngle = acos(dot(a,b)/(vectorMag(a) * vectorMag(b))) 
rotAxis = cross(a,b) 

rotAxis = 
    -0.5   0.5   0 
rotAngle = 
    1.5708 
+0

나는 잠시 동안이 행렬을 물에 빠져 있었다. 문제는 교환 적 조작이 아니라는 것입니다. RxRyRz는 RzRyRx와 같지 않습니다. 그래서 나는 여러 가지 최종 결과를 얻는 방법을 기반으로합니다. 예를 들어, 최종 투영은 원래 X 축에서 20도, 원본 Y 축에서 20도, 원래 Z 축에서 20 도가되도록합니다. 행렬을 기반으로 알파, 베타, 감마 값 20 (또는 해당 라디안)을 지정하면 의도 한 회전이 발생하지 않습니다. 내가 놓친 게 있니? 방금 ​​의도 한 각도를 넣을 수있는 행렬이 있습니까? – Louis