일부 3D 포인트의 크기를 조정, 회전 및 변환하려는 응용 프로그램이 있습니다.
저는 3x3 회전 행렬을보고 별도의 값 배열에 변환을 저장하는 데 익숙합니다. 그러나 .Net Matrix3D 구조 ( https://msdn.microsoft.com/en-us/library/System.Windows.Media.Media3D.Matrix3D%28v=vs.110%29.aspx )는 4x4이고 행이 있습니다. "offsets"-분명히 번역에 사용되는 OffsetX, OffsetY, OffsetZ. 그러나 정확히 어떻게 적용 할 것인가?
X, Y, Z 값 (예 : 72, 24, 4)이있는 Vector3D가 있다고 가정합니다. 그리고 내 Matrix3D가
.707 0 -.707 0
0 1 0 0
.707 0 .707 0
100 100 0 1
즉, OffsetX 및 OffsetY 값은 100입니다.
내 포인트에 대한 변환으로 이것을 적용 할 Matrix3D에 대한 방법이나 연산자가 있습니까? Transform () 은 보이지 않습니다. 내 코드에. . .
Vector3D v = new Vector3D(72, 24, 0);
Vector3D vectorResult = new Vector3D();
vectorResult = MyMatrix.Transform(v);
vectorResult는 8.484, 24, -8.484를 가지며 오프셋이 0이면 동일한 값을 갖습니다.
분명히 각 축에 대해 개별적으로 변환을 수동으로 적용 할 수 있지만 구조의 일부이기 때문에 점을 지정하고 변환을 포함하여 전체 행렬을 적용하는 방법이나 연산자가있을 수 있다고 생각했습니다. 거기 있어요?
4x4 행렬은 동종 좌표를 사용하는 3D 공간의 변환을 나타냅니다. 이 표현에서는 w
구성 요소가 벡터에 추가됩니다. 이 구성 요소는 벡터가 나타내는 내용에 따라 다릅니다. 벡터를 행렬로 변환하는 것은 간단한 곱셈입니다.
transformed = vector * matrix
(여기서 두 벡터는 모두 행 벡터입니다).
w
성분은 매트릭스 '마지막 행으로 간주됩니다 - 번역이 저장되어있는 부분. 따라서 점을 변환하려면이 구성 요소가 1이어야합니다. 방향을 변환하려면이 구성 요소가 0이어야합니다 (변환해도 방향 벡터는 변경되지 않기 때문입니다).
이 차이는 WPF에서 두 가지 다른 구조로 표현됩니다. 은 Vector3D
(방향과 나타내는 w
성분 0)과은 Point3D
(갖는 점을 나타내고 w
성분 1). 당신이 만드는 경우에 따라서 v
를 Point3D
예상대로 모든 것이 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다