아래와 같이 물체를 가리키는 가상 카메라가 있고이 두 물체가 전역 좌표계와 관련하여 방향과 위치로 정의된다고 가정합니다. 도면에서, 흑색은 GCS를 나타내고 청색은 LCS를 나타낸다. 예컨대,이 경우에 화면이나 LED를 같은3D에서 물체의 시야각을 계산하는 방법
일부 개체는, 시야각을 갖는다. 예를 들어, 관찰자와의 각도가 ± 70 ° 이내 인 경우에만 볼 수 있습니다.
이 문제를 해결하기 위해 지금까지 다음의 의사 코드에 의해 입증 된 단계를 수행했습니다. 적용 가능한 경우 우리는 ZYX 순서로 적용되는 외재 회전을 사용하여 오른 손잡이 좌표계에서 작업합니다.
LEDToWorldTransform = LED.Transform;
CameraToWorldTransform = Camera.Transform;
WorldToCameraTransform = CameraToWorldTransform.Inverse;
CameraToLEDTransform = WorldToCameraTransform * LEDToWorldTransform;
제가 알다시피 CameraToLEDTransform에는 이제 카메라 좌표계에 대한 LED의 이동 및 회전이 포함되어야합니다. 시각화 목적 : 나는 우리가 카메라의 좌표계에 대한 회전의 Z 구성 요소에 영향을주지 않는 것으로 결론을 내릴 수 있다고 생각 CameraToLEDTransform
의 오일러 구성 요소를보고, 막히는 곳
을 지금 이것은이다 LED보기. 나는 정확하지 않은 다음을 시도했다. 그러나 내가 뭔가 의심, 세 번째 단계에서 나는 그들이이 일종의 올바른 보이는 답을 제공
R_Z, R_Y, R_X = CameraToLEDTransform.Rotation.Eulers
CameraToLEDTransform.Rotation.Eulers = 0, R_Y, R_X
CameraToLEDTransform.Rotation *= Rotation.AngleAxis[180deg,X]
Angle, Axis = CameraToLEDTransform.Rotation.AngleAxis
같은 방향을 가리하도록 Z 축 중 하나의 방향을 반전하기 위해 노력하고있어, 참고 내 논리를 다음과 같이 어쩌면 잘못된 또한 함께 세 번째 단계를 대체 할 수 있어야한다 :
CameraToLEDTransform.Rotation *= Rotation.AngleAxis[180deg,Y]
그러나, 이러한 경우가 나는 다른 (확실히 잘못된) 답변을 얻을. 이 접근법은 완전히 틀릴 수도 있습니다. X 주위의 180도 회전이이 상황에서 Y를 중심으로 180도 회전하는 것과 왜 다른지는 분명하지 않습니다. 아마도 대체 방법은 Dot 제품을 사용하여 각도를 계산하는 것이지만 두 회전 사이가 아닌 두 벡터 사이에서만 작동한다고 생각합니다. 두 객체의 방향을 기준으로 두 개의 새 벡터를 투영하는 것은 매우 약 접근 방법 인 것 같습니다.
당신이 올바른지를. 나는 잘못된 길로 나를 데려간 나쁜 가정으로 시작했다. – allsey87