저는 벡터 v1을 v2와 함께 회전 할 필요가있는 프로젝트에 있는데, 벡터와 회전에 문제가 있습니다. 거기에 대해 많은 설명이 있지만 내 문제를 해결할 수있는 하나를 찾을 수 없습니다. 마치 내가 5 살짜리 아이처럼하는 법을 설명해 주시겠습니까? 내가 할 노력은 무엇다른 벡터를 축으로 회전 벡터
는그렇게함으로써 내 "V1"와 사원 수 파생 된 매트릭스를 곱했다 :
angle = (Convert.ToDouble(Console.ReadLine()) * Math.PI/180);
cosA = Math.Cos(angle);
sinA = Math.Sin(angle);
oneMinusCosA = 1 - cosA;
matrix[0, 0] = gravityVector[0] * gravityVector[0] * oneMinusCosA + cosA;
matrix[0, 1] = gravityVector[0] * gravityVector[1] * oneMinusCosA + gravityVector[2] * sinA;
matrix[0, 2] = gravityVector[0] * gravityVector[2] * oneMinusCosA - gravityVector[1] * sinA;
matrix[1, 0] = gravityVector[1] * gravityVector[1] * oneMinusCosA - gravityVector[2] * sinA;
matrix[1, 1] = gravityVector[1] * gravityVector[1] * oneMinusCosA + cosA;
matrix[1, 2] = gravityVector[1] * gravityVector[2] * oneMinusCosA - gravityVector[0] * sinA;
matrix[1, 0] = gravityVector[2] * gravityVector[0] * oneMinusCosA - gravityVector[1] * sinA;
matrix[1, 1] = gravityVector[2] * gravityVector[1] * oneMinusCosA - gravityVector[0] * sinA;
matrix[1, 2] = gravityVector[2] * gravityVector[2] * oneMinusCosA + cosA;
result = new double[3];
for (int i = 0; i < 3; i++)
{
result[i] = objectRotation[i] * matrix[i, 0] + objectRotation[i] * matrix[i, 1] + objectRotation[i] * matrix[i, 2];
Console.WriteLine(result[i]);
}
하지만 잘못된 결과를 얻고있다. 왜 누군가가 나를 이해하게 도와 주거나 다른 해결책을 찾도록 도와 줄 수 있습니까?
예 :
v1(1,0,0) v2(0,1,0) angle=90 -> vf(0,0,-1)
v1(sqrt2/2 , sqrt2/2 , 0) v2(-sqrt2/2 , sqrt2/2 , 0) angle = 90 -> vf(0,0,-1)
* OBS : 나는 그 (또는 PI/2 라디안 중요하지 않습니다)뿐만 아니라 90 개도에 대한 모든 벡터와 모든 각도, 신청 또는이 벡터에 대한 필요가 나는 예제로 사용했다.
* OBS (2) : C# (선호) 또는 C++로 코드를 게시 할 수 있으면 기쁩니다.
적절한 수학 라이브러리를 사용하는 경우 축과 각도에서 행렬을 만드는 함수가 있어야합니다. 이 행렬에 벡터를 곱하면됩니다. 그렇지 않으면 [Wikipedia] (http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle)에 공식이 있습니다. –
필요한 수학은 5 살짜리 아이에게 설명 될 수 없다는 것이 두렵습니다. 수학은 특히 아름답지만, 사소한 것은 아닙니다. 어쨌든 문제를 해결할 준비가 되었다면 위키피디아 문서를 확인하십시오 : http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation – cmaster
이 질문은 그것이 제기 된 방식대로 대답 될 수 없기 때문에 논제가 아닌 것처럼 보입니다. – cmaster