우주선 시뮬레이터에서 작업 중이며 두 개의 공간 객체 사이에 호가 마주 칠 때 문제가 있습니다. 물론 갖는 XYZ 좌표로두 개의 3d 회전 행렬 간의 대각선 호 계산
//Top row
rotation[0][0] = cos(pitch)*cos(yaw);
rotation[0][1] = -sin(yaw)*cos(pitch);
rotation[0][2] = sin(pitch);
//Middle row
rotation[1][0] = cos(yaw)*sin(pitch)*sin(roll) + sin(yaw)*cos(roll);
rotation[1][1] = -sin(yaw)*sin(pitch)*sin(roll) + cos(yaw)*cos(roll);
rotation[1][2] = -cos(pitch)*sin(roll);
//Bottom row
rotation[2][0] = -cos(yaw)*sin(pitch)*cos(roll) + sin(yaw)*sin(roll);
rotation[2][1] = sin(yaw)*sin(pitch)*cos(roll) + cos(yaw)*sin(roll);
rotation[2][2] = cos(pitch)*cos(roll);
: 각 오브젝트는 다음과 같이 정의되는 회전 매트릭스를 갖는다.
이 정보를 사용하여 전방, 우현, 항구, 후미, 등쪽 (위) 및 아래쪽 (아래) 나는이 물체를 사용하려고했습니다. 다음 수식 :
arc = acos(sum(a*b)/(sqrt(sum(a * a)) * sqrt(sum(b * b))))
여기서 | a | | object2 |의 벡터 방향입니다. - | object1 | 및 | b | row1 (전진 호), row2 (우현 호) 또는 row3 (위 호). 예상대로 작동하지 않기 때문에 나는 뭔가 잘못하고 있습니다. 그래서 나는 실수를하는 곳을 찾는데 도움을 청하고 있습니다.
P. 요, 피치 및 롤은도 (0-360)로 저장되고 PI/180.0을 곱하여 rads로 변환됩니다.
코드를 훑어 보는 것에서의 스타일 힌트 : 각 줄마다 사인과 코사인을 계산하지 마십시오. 그들을 한번 계산하고 지역 변수에 저장하십시오. –
* nods * 나는 실제로 코드에서, 내가 뭘하는지 분명히하기 위해 위와 같이 썼다. :) –
이 질문은 [Mathematics.SE]와 (과) 관련이 있기 때문에 화제가 아닙니다. Math.SE에 메소드를 요청하십시오. 그런 다음이 코드를 'C'코드 포스트로 변환하는 데 문제가 있으면 여기를 클릭하십시오. – ja72