Matrix3d オブジェクトおよび TransformBy メソッドで表される 4 x 4 変換マトリックスを使用して、オブジェクトを移動、尺度調整、回転、鏡像化できます。また、図形のコピーを作成し、コピーに変換を適用するには、GetTransformedCopy メソッドを使用できます。Matrix3d オブジェクトは Geometry 名前空間の一部です。
マトリックスの初めの 3 列で、尺度と回転が指定されます。マトリックスの 4 番目の列は移動ベクトルです。変換マトリックスの構成を次に示します(R=回転、T=平行移動)。
変換マトリックスの構成 |
|||
---|---|---|---|
R00 |
R01 |
R02 |
T0 |
R10 |
R11 |
R12 |
T1 |
R20 |
R21 |
R22 |
T2 |
0 |
0 |
0 |
1 |
オブジェクトを変換するには、最初に Matrix3d オブジェクトを初期化します。倍精度の配列を使用するか、ワールド座標系またはユーザ座標系を表すマトリックスを開始して、変換マトリックスを初期化することができます。初期化されたら、Matrix3d オブジェクトの関数を使用して、マトリックスの尺度、回転、移動距離の変換を修正できます。
変換マトリックスが完成したら、TransformBy メソッドを使用してそれをオブジェクトに適用します。次のコードは、マトリックス(dMatrix)をオブジェクト(acObj)へ適用する例です。
VB.NET acObj.TransformBy(dMatrix)
C# acObj.TransformBy(dMatrix);
変数 dMatrix に割り当てられた変換マトリックスを定義する 1 つのデータ配列を次に示します。このデータ配列は、点(0、0、0)を中心にして図形を 90 度回転します。
回転マトリックス: 点(0, 0, 0)を中心にして 90 度 |
|||
---|---|---|---|
0.0 |
-1.0 |
0.0 |
0.0 |
1.0 |
0.0 |
0.0 |
0.0 |
0.0 |
0.0 |
1.0 |
0.0 |
0.0 |
0.0 |
0.0 |
1.0 |
オブジェクトを 90 度回転するための情報が含まれているデータ配列を使用して、変換マトリックスを初期化します。
Dim dMatrix(0 To 15) As Double dMatrix(0) = 0.0 dMatrix(1) = -1.0 dMatrix(2) = 0.0 dMatrix(3) = 0.0 dMatrix(4) = 1.0 dMatrix(5) = 0.0 dMatrix(6) = 0.0 dMatrix(7) = 0.0 dMatrix(8) = 0.0 dMatrix(9) = 0.0 dMatrix(10) = 1.0 dMatrix(11) = 0.0 dMatrix(12) = 0.0 dMatrix(13) = 0.0 dMatrix(14) = 0.0 dMatrix(15) = 1.0 Dim acMat3d As Matrix3d = New Matrix3d(dMatrix)
データ配列のない変換マトリックスを初期化し、Rotation 関数を使用してオブジェクトを 90 度回転する変換マトリックスを返します。
Dim acMat3d As Matrix3d = New Matrix3d() Matrix3d.Rotation(Math.PI / 2, _ curUCS.Zaxis, _ New Point3d(0, 0, 0))
オブジェクトを 90 度回転するための情報が含まれているデータ配列を使用して、変換マトリックスを初期化します。
double[] dMatrix = new double[16]; dMatrix[0] = 0.0; dMatrix[1] = -1.0; dMatrix[2] = 0.0; dMatrix[3] = 0.0; dMatrix[4] = 1.0; dMatrix[5] = 0.0; dMatrix[6] = 0.0; dMatrix[7] = 0.0; dMatrix[8] = 0.0; dMatrix[9] = 0.0; dMatrix[10] = 1.0; dMatrix[11] = 0.0; dMatrix[12] = 0.0; dMatrix[13] = 0.0; dMatrix[14] = 0.0; dMatrix[15] = 1.0; Matrix3d acMat3d = new Matrix3d(dMatrix);
データ配列のない変換マトリックスを初期化し、Rotation 関数を使用してオブジェクトを 90 度回転する変換マトリックスを返します。
Matrix3d acMat3d = new Matrix3d(); acMat3d = Matrix3d.Rotation(Math.PI / 2, curUCS.Zaxis, new Point3d(0, 0, 0));
次に変換マトリックスのさまざまな例を示します。
回転マトリックス: 点(5, 5, 0)を中心にして 45 度 |
|||
---|---|---|---|
0.707107 |
-0.707107 |
0.0 |
5.0 |
0.707107 |
0.707107 |
0.0 |
-2.071068 |
0.0 |
0.0 |
1.0 |
0.0 |
0.0 |
0.0 |
0.0 |
1.0 |
平行移動マトリックス: 図形を(10, 10, 0)移動 |
|||
---|---|---|---|
1.0 |
0.0 |
0.0 |
10.0 |
0.0 |
1.0 |
0.0 |
10.0 |
0.0 |
0.0 |
1.0 |
0.0 |
0.0 |
0.0 |
0.0 |
1.0 |
尺度変更マトリックス: 点(0, 0, 0)で 10,10 尺度変更 |
|||
---|---|---|---|
10.0 |
0.0 |
0.0 |
0.0 |
0.0 |
10.0 |
0.0 |
0.0 |
0.0 |
0.0 |
10.0 |
0.0 |
0.0 |
0.0 |
0.0 |
1.0 |
尺度変更マトリックス: 点(2, 2, 0)で 10, 10 尺度変更 |
|||
---|---|---|---|
10.0 |
0.0 |
0.0 |
-18.0 |
0.0 |
10.0 |
0.0 |
-18.0 |
0.0 |
0.0 |
10.0 |
0.0 |
0.0 |
0.0 |
0.0 |
1.0 |