オブジェクトを変換する(.NET)

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

VB.NET

オブジェクトを 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))

C#

オブジェクトを 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