3
interface //#################################################################### ■
5
uses LUX, LUX.D1, LUX.D2, LUX.D3, LUX.Matrix.L2;
7
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
9
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
11
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSingleM3
16
function GetM( const Y_,X_:Integer ) :Single;
17
procedure SetM( const Y_,X_:Integer; const M_:Single );
18
function GetAxisX :TSingle3D;
19
procedure SetAxisX( const AxisX_:TSingle3D );
20
function GetAxisY :TSingle3D;
21
procedure SetAxisY( const AxisY_:TSingle3D );
22
function GetAxisZ :TSingle3D;
23
procedure SetAxisZ( const AxisZ_:TSingle3D );
24
function GetSum :Single;
26
constructor Create( const _11_,_12_,_13_,
28
_31_,_32_,_33_:Single );
30
property M[ const Y_,X_:Integer ] :Single read GetM write SetM ; default;
31
property AxisX :TSingle3D read GetAxisX write SetAxisX;
32
property AxisY :TSingle3D read GetAxisY write SetAxisY;
33
property AxisZ :TSingle3D read GetAxisZ write SetAxisZ;
34
property Sum :Single read GetSum;
36
class operator Negative( const V_:TSingleM3 ) :TSingleM3;
37
class operator Positive( const V_:TSingleM3 ) :TSingleM3;
38
class operator Add( const A_,B_:TSingleM3 ) :TSingleM3;
39
class operator Subtract( const A_,B_:TSingleM3 ) :TSingleM3;
40
class operator Multiply( const A_,B_:TSingleM3 ) :TSingleM3;
41
class operator Multiply( const A_:TSingleM3; const B_:Single ) :TSingleM3;
42
class operator Multiply( const A_:Single; const B_:TSingleM3 ) :TSingleM3;
43
class operator Multiply( const A_:TSingle3D; const B_:TSingleM3 ) :TSingle3D;
44
class operator Multiply( const A_:TSingleM3; const B_:TSingle3D ) :TSingle3D;
45
class operator Divide( const A_:TSingleM3; const B_:Single ) :TSingleM3;
47
function Transpose :TSingleM3;
49
function Adjugate :TSingleM3;
50
function Inverse :TSingleM3;
53
0:( _ :array [ 1..3, 1..3 ] of Single; );
56
_31, _32, _33 :Single; );
59
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TDoubleM3
64
function GetM( const Y_,X_:Integer ) :Double;
65
procedure SetM( const Y_,X_:Integer; const M_:Double );
66
function GetAxisX :TDouble3D;
67
procedure SetAxisX( const AxisX_:TDouble3D );
68
function GetAxisY :TDouble3D;
69
procedure SetAxisY( const AxisY_:TDouble3D );
70
function GetAxisZ :TDouble3D;
71
procedure SetAxisZ( const AxisZ_:TDouble3D );
73
constructor Create( const _11_,_12_,_13_,
75
_31_,_32_,_33_:Double );
77
property M[ const Y_,X_:Integer ] :Double read GetM write SetM ; default;
78
property AxisX :TDouble3D read GetAxisX write SetAxisX;
79
property AxisY :TDouble3D read GetAxisY write SetAxisY;
80
property AxisZ :TDouble3D read GetAxisZ write SetAxisZ;
82
class operator Negative( const V_:TDoubleM3 ) :TDoubleM3;
83
class operator Positive( const V_:TDoubleM3 ) :TDoubleM3;
84
class operator Add( const A_,B_:TDoubleM3 ) :TDoubleM3;
85
class operator Subtract( const A_,B_:TDoubleM3 ) :TDoubleM3;
86
class operator Multiply( const A_,B_:TDoubleM3 ) :TDoubleM3;
87
class operator Multiply( const A_:TDoubleM3; const B_:Double ) :TDoubleM3;
88
class operator Multiply( const A_:Double; const B_:TDoubleM3 ) :TDoubleM3;
89
class operator Multiply( const A_:TDouble3D; const B_:TDoubleM3 ) :TDouble3D;
90
class operator Multiply( const A_:TDoubleM3; const B_:TDouble3D ) :TDouble3D;
91
class operator Divide( const A_:TDoubleM3; const B_:Double ) :TDoubleM3;
93
function Transpose :TDoubleM3;
95
function Adjugate :TDoubleM3;
96
function Inverse :TDoubleM3;
99
0:( _ :array [ 1..3, 1..3 ] of Double; );
102
_31, _32, _33 :Double; );
105
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdSingleM3
110
function GetM( const Y_,X_:Integer ) :TdSingle;
111
procedure SetM( const Y_,X_:Integer; const M_:TdSingle );
112
function GetAxisX :TdSingle3D;
113
procedure SetAxisX( const AxisX_:TdSingle3D );
114
function GetAxisY :TdSingle3D;
115
procedure SetAxisY( const AxisY_:TdSingle3D );
116
function GetAxisZ :TdSingle3D;
117
procedure SetAxisZ( const AxisZ_:TdSingle3D );
118
function GetSum :TdSingle;
120
constructor Create( const _11_,_12_,_13_,
122
_31_,_32_,_33_:TdSingle );
124
property M[ const Y_,X_:Integer ] :TdSingle read GetM write SetM ; default;
125
property AxisX :TdSingle3D read GetAxisX write SetAxisX;
126
property AxisY :TdSingle3D read GetAxisY write SetAxisY;
127
property AxisZ :TdSingle3D read GetAxisZ write SetAxisZ;
128
property Sum :TdSingle read GetSum;
130
class operator Negative( const V_:TdSingleM3 ) :TdSingleM3;
131
class operator Positive( const V_:TdSingleM3 ) :TdSingleM3;
132
class operator Add( const A_,B_:TdSingleM3 ) :TdSingleM3;
133
class operator Subtract( const A_,B_:TdSingleM3 ) :TdSingleM3;
134
class operator Multiply( const A_,B_:TdSingleM3 ) :TdSingleM3;
135
class operator Multiply( const A_:TdSingleM3; const B_:TdSingle ) :TdSingleM3;
136
class operator Multiply( const A_:TdSingle; const B_:TdSingleM3 ) :TdSingleM3;
137
class operator Multiply( const A_:TdSingle3D; const B_:TdSingleM3 ) :TdSingle3D;
138
class operator Multiply( const A_:TdSingleM3; const B_:TdSingle3D ) :TdSingle3D;
139
class operator Divide( const A_:TdSingleM3; const B_:TdSingle ) :TdSingleM3;
141
function Transpose :TdSingleM3;
142
function Det :TdSingle;
143
function Adjugate :TdSingleM3;
144
function Inverse :TdSingleM3;
147
0:( _ :array [ 1..3, 1..3 ] of TdSingle; );
150
_31, _32, _33 :TdSingle; );
153
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdDoubleM3
158
function GetM( const Y_,X_:Integer ) :TdDouble;
159
procedure SetM( const Y_,X_:Integer; const M_:TdDouble );
160
function GetAxisX :TdDouble3D;
161
procedure SetAxisX( const AxisX_:TdDouble3D );
162
function GetAxisY :TdDouble3D;
163
procedure SetAxisY( const AxisY_:TdDouble3D );
164
function GetAxisZ :TdDouble3D;
165
procedure SetAxisZ( const AxisZ_:TdDouble3D );
167
constructor Create( const _11_,_12_,_13_,
169
_31_,_32_,_33_:TdDouble );
171
property M[ const Y_,X_:Integer ] :TdDouble read GetM write SetM ; default;
172
property AxisX :TdDouble3D read GetAxisX write SetAxisX;
173
property AxisY :TdDouble3D read GetAxisY write SetAxisY;
174
property AxisZ :TdDouble3D read GetAxisZ write SetAxisZ;
176
class operator Negative( const V_:TdDoubleM3 ) :TdDoubleM3;
177
class operator Positive( const V_:TdDoubleM3 ) :TdDoubleM3;
178
class operator Add( const A_,B_:TdDoubleM3 ) :TdDoubleM3;
179
class operator Subtract( const A_,B_:TdDoubleM3 ) :TdDoubleM3;
180
class operator Multiply( const A_,B_:TdDoubleM3 ) :TdDoubleM3;
181
class operator Multiply( const A_:TdDoubleM3; const B_:TdDouble ) :TdDoubleM3;
182
class operator Multiply( const A_:TdDouble; const B_:TdDoubleM3 ) :TdDoubleM3;
183
class operator Multiply( const A_:TdDouble3D; const B_:TdDoubleM3 ) :TdDouble3D;
184
class operator Multiply( const A_:TdDoubleM3; const B_:TdDouble3D ) :TdDouble3D;
185
class operator Divide( const A_:TdDoubleM3; const B_:TdDouble ) :TdDoubleM3;
187
function Transpose :TdDoubleM3;
188
function Det :TdDouble;
189
function Adjugate :TdDoubleM3;
190
function Inverse :TdDoubleM3;
193
0:( _ :array [ 1..3, 1..3 ] of TdDouble; );
196
_31, _32, _33 :TdDouble; );
199
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
201
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
203
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
205
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
207
implementation //############################################################### ■
209
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
211
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSingleM3
213
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
215
/////////////////////////////////////////////////////////////////////// アクセス
217
function TSingleM3.GetM( const Y_,X_:Integer ) :Single;
219
Result := _[ Y_, X_ ];
222
procedure TSingleM3.SetM( const Y_,X_:Integer; const M_:Single );
227
//------------------------------------------------------------------------------
229
function TSingleM3.GetAxisX :TSingle3D;
239
procedure TSingleM3.SetAxisX( const AxisX_:TSingle3D );
249
function TSingleM3.GetAxisY :TSingle3D;
259
procedure TSingleM3.SetAxisY( const AxisY_:TSingle3D );
269
function TSingleM3.GetAxisZ :TSingle3D;
279
procedure TSingleM3.SetAxisZ( const AxisZ_:TSingle3D );
289
function TSingleM3.GetSum :Single;
291
Result := _11 + _12 + _13
296
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
298
constructor TSingleM3.Create( const _11_,_12_,_13_,
300
_31_,_32_,_33_:Single );
302
_11 := _11_; _12 := _12_; _13 := _13_;
303
_21 := _21_; _22 := _22_; _23 := _23_;
304
_31 := _31_; _32 := _32_; _33 := _33_;
307
///////////////////////////////////////////////////////////////////////// 演算子
309
class operator TSingleM3.Positive( const V_:TSingleM3 ) :TSingleM3;
313
_11 := +V_._11; _12 := +V_._12; _13 := +V_._13;
314
_21 := +V_._21; _22 := +V_._22; _23 := +V_._23;
315
_31 := +V_._31; _32 := +V_._32; _33 := +V_._33;
319
class operator TSingleM3.Negative( const V_:TSingleM3 ) :TSingleM3;
323
_11 := -V_._11; _12 := -V_._12; _13 := -V_._13;
324
_21 := -V_._21; _22 := -V_._22; _23 := -V_._23;
325
_31 := -V_._31; _32 := -V_._32; _33 := -V_._33;
329
class operator TSingleM3.Add( const A_,B_:TSingleM3 ) :TSingleM3;
333
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12; _13 := A_._13 + B_._13;
334
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22; _23 := A_._23 + B_._23;
335
_31 := A_._31 + B_._31; _32 := A_._32 + B_._32; _33 := A_._33 + B_._33;
339
class operator TSingleM3.Subtract( const A_,B_:TSingleM3 ) :TSingleM3;
343
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12; _13 := A_._13 - B_._13;
344
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22; _23 := A_._23 - B_._23;
345
_31 := A_._31 - B_._31; _32 := A_._32 - B_._32; _33 := A_._33 - B_._33;
349
class operator TSingleM3.Multiply( const A_,B_:TSingleM3 ) :TSingleM3;
359
_11 := A_._11 * B_._11 + A_._12 * B_._21 + A_._13 * B_._31;
360
_12 := A_._11 * B_._12 + A_._12 * B_._22 + A_._13 * B_._32;
361
_13 := A_._11 * B_._13 + A_._12 * B_._23 + A_._13 * B_._33;
363
_21 := A_._21 * B_._11 + A_._22 * B_._21 + A_._23 * B_._31;
364
_22 := A_._21 * B_._12 + A_._22 * B_._22 + A_._23 * B_._32;
365
_23 := A_._21 * B_._13 + A_._22 * B_._23 + A_._23 * B_._33;
367
_31 := A_._31 * B_._11 + A_._32 * B_._21 + A_._33 * B_._31;
368
_32 := A_._31 * B_._12 + A_._32 * B_._22 + A_._33 * B_._32;
369
_33 := A_._31 * B_._13 + A_._32 * B_._23 + A_._33 * B_._33;
373
class operator TSingleM3.Multiply( const A_:TSingleM3; const B_:Single ) :TSingleM3;
377
_11 := A_._11 * B_; _12 := A_._12 * B_; _13 := A_._13 * B_;
378
_21 := A_._21 * B_; _22 := A_._22 * B_; _23 := A_._23 * B_;
379
_31 := A_._31 * B_; _32 := A_._32 * B_; _33 := A_._33 * B_;
383
class operator TSingleM3.Multiply( const A_:Single; const B_:TSingleM3 ) :TSingleM3;
387
_11 := A_ * B_._11; _12 := A_ * B_._12; _13 := A_ * B_._13;
388
_21 := A_ * B_._21; _22 := A_ * B_._22; _23 := A_ * B_._23;
389
_31 := A_ * B_._31; _32 := A_ * B_._32; _33 := A_ * B_._33;
393
class operator TSingleM3.Multiply( const A_:TSingle3D; const B_:TSingleM3 ) :TSingle3D;
403
X := A_.X * B_._11 + A_.Y * B_._21 + A_.Z * B_._31;
404
Y := A_.X * B_._12 + A_.Y * B_._22 + A_.Z * B_._32;
405
Z := A_.X * B_._13 + A_.Y * B_._23 + A_.Z * B_._33;
409
class operator TSingleM3.Multiply( const A_:TSingleM3; const B_:TSingle3D ) :TSingle3D;
419
X := A_._11 * B_.X + A_._12 * B_.Y + A_._13 * B_.Z;
420
Y := A_._21 * B_.X + A_._22 * B_.Y + A_._23 * B_.Z;
421
Z := A_._31 * B_.X + A_._32 * B_.Y + A_._33 * B_.Z;
425
class operator TSingleM3.Divide( const A_:TSingleM3; const B_:Single ) :TSingleM3;
429
_11 := A_._11 / B_; _12 := A_._12 / B_; _13 := A_._13 / B_;
430
_21 := A_._21 / B_; _22 := A_._22 / B_; _23 := A_._23 / B_;
431
_31 := A_._31 / B_; _32 := A_._32 / B_; _33 := A_._33 / B_;
435
/////////////////////////////////////////////////////////////////////// メソッド
437
function TSingleM3.Transpose :TSingleM3;
439
Result._11 := _11; Result._12 := _21; Result._13 := _31;
440
Result._21 := _12; Result._22 := _22; Result._23 := _32;
441
Result._31 := _13; Result._32 := _23; Result._33 := _33;
444
function TSingleM3.Det :Single;
446
Result:= _11 * ( _22 * _33 - _23 * _32 )
447
+ _12 * ( _23 * _31 - _21 * _33 )
448
+ _13 * ( _21 * _32 - _22 * _31 );
451
function TSingleM3.Adjugate :TSingleM3;
453
Result._11 := +TSingleM2.Create( {11} {12} {13}
457
Result._21 := -TSingleM2.Create( {11} {12} {13}
461
Result._31 := +TSingleM2.Create( {11} {12} {13}
465
Result._12 := -TSingleM2.Create( {11} _12, _13,
469
Result._22 := +TSingleM2.Create( _11, {12} _13,
473
Result._32 := -TSingleM2.Create( _11, _12, {13}
477
Result._13 := +TSingleM2.Create( {11} _12, _13,
479
{31} {32} {33} ).Det;
481
Result._23 := -TSingleM2.Create( _11, {12} _13,
483
{31} {32} {33} ).Det;
485
Result._33 := +TSingleM2.Create( _11, _12, {13}
487
{31} {32} {33} ).Det;
490
function TSingleM3.Inverse :TSingleM3;
496
Result := A / ( _11 * A._11
501
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TDoubleM3
503
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
505
/////////////////////////////////////////////////////////////////////// アクセス
507
function TDoubleM3.GetM( const Y_,X_:Integer ) :Double;
509
Result := _[ Y_, X_ ];
512
procedure TDoubleM3.SetM( const Y_,X_:Integer; const M_:Double );
517
//------------------------------------------------------------------------------
519
function TDoubleM3.GetAxisX :TDouble3D;
529
procedure TDoubleM3.SetAxisX( const AxisX_:TDouble3D );
539
function TDoubleM3.GetAxisY :TDouble3D;
549
procedure TDoubleM3.SetAxisY( const AxisY_:TDouble3D );
559
function TDoubleM3.GetAxisZ :TDouble3D;
569
procedure TDoubleM3.SetAxisZ( const AxisZ_:TDouble3D );
579
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
581
constructor TDoubleM3.Create( const _11_,_12_,_13_,
583
_31_,_32_,_33_:Double );
585
_11 := _11_; _12 := _12_; _13 := _13_;
586
_21 := _21_; _22 := _22_; _23 := _23_;
587
_31 := _31_; _32 := _32_; _33 := _33_;
590
///////////////////////////////////////////////////////////////////////// 演算子
592
class operator TDoubleM3.Positive( const V_:TDoubleM3 ) :TDoubleM3;
596
_11 := +V_._11; _12 := +V_._12; _13 := +V_._13;
597
_21 := +V_._21; _22 := +V_._22; _23 := +V_._23;
598
_31 := +V_._31; _32 := +V_._32; _33 := +V_._33;
602
class operator TDoubleM3.Negative( const V_:TDoubleM3 ) :TDoubleM3;
606
_11 := -V_._11; _12 := -V_._12; _13 := -V_._13;
607
_21 := -V_._21; _22 := -V_._22; _23 := -V_._23;
608
_31 := -V_._31; _32 := -V_._32; _33 := -V_._33;
612
class operator TDoubleM3.Add( const A_,B_:TDoubleM3 ) :TDoubleM3;
616
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12; _13 := A_._13 + B_._13;
617
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22; _23 := A_._23 + B_._23;
618
_31 := A_._31 + B_._31; _32 := A_._32 + B_._32; _33 := A_._33 + B_._33;
622
class operator TDoubleM3.Subtract( const A_,B_:TDoubleM3 ) :TDoubleM3;
626
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12; _13 := A_._13 - B_._13;
627
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22; _23 := A_._23 - B_._23;
628
_31 := A_._31 - B_._31; _32 := A_._32 - B_._32; _33 := A_._33 - B_._33;
632
class operator TDoubleM3.Multiply( const A_,B_:TDoubleM3 ) :TDoubleM3;
642
_11 := A_._11 * B_._11 + A_._12 * B_._21 + A_._13 * B_._31;
643
_12 := A_._11 * B_._12 + A_._12 * B_._22 + A_._13 * B_._32;
644
_13 := A_._11 * B_._13 + A_._12 * B_._23 + A_._13 * B_._33;
646
_21 := A_._21 * B_._11 + A_._22 * B_._21 + A_._23 * B_._31;
647
_22 := A_._21 * B_._12 + A_._22 * B_._22 + A_._23 * B_._32;
648
_23 := A_._21 * B_._13 + A_._22 * B_._23 + A_._23 * B_._33;
650
_31 := A_._31 * B_._11 + A_._32 * B_._21 + A_._33 * B_._31;
651
_32 := A_._31 * B_._12 + A_._32 * B_._22 + A_._33 * B_._32;
652
_33 := A_._31 * B_._13 + A_._32 * B_._23 + A_._33 * B_._33;
656
class operator TDoubleM3.Multiply( const A_:TDoubleM3; const B_:Double ) :TDoubleM3;
660
_11 := A_._11 * B_; _12 := A_._12 * B_; _13 := A_._13 * B_;
661
_21 := A_._21 * B_; _22 := A_._22 * B_; _23 := A_._23 * B_;
662
_31 := A_._31 * B_; _32 := A_._32 * B_; _33 := A_._33 * B_;
666
class operator TDoubleM3.Multiply( const A_:Double; const B_:TDoubleM3 ) :TDoubleM3;
670
_11 := A_ * B_._11; _12 := A_ * B_._12; _13 := A_ * B_._13;
671
_21 := A_ * B_._21; _22 := A_ * B_._22; _23 := A_ * B_._23;
672
_31 := A_ * B_._31; _32 := A_ * B_._32; _33 := A_ * B_._33;
676
class operator TDoubleM3.Multiply( const A_:TDouble3D; const B_:TDoubleM3 ) :TDouble3D;
686
X := A_.X * B_._11 + A_.Y * B_._21 + A_.Z * B_._31;
687
Y := A_.X * B_._12 + A_.Y * B_._22 + A_.Z * B_._32;
688
Z := A_.X * B_._13 + A_.Y * B_._23 + A_.Z * B_._33;
692
class operator TDoubleM3.Multiply( const A_:TDoubleM3; const B_:TDouble3D ) :TDouble3D;
702
X := A_._11 * B_.X + A_._12 * B_.Y + A_._13 * B_.Z;
703
Y := A_._21 * B_.X + A_._22 * B_.Y + A_._23 * B_.Z;
704
Z := A_._31 * B_.X + A_._32 * B_.Y + A_._33 * B_.Z;
708
class operator TDoubleM3.Divide( const A_:TDoubleM3; const B_:Double ) :TDoubleM3;
712
_11 := A_._11 / B_; _12 := A_._12 / B_; _13 := A_._13 / B_;
713
_21 := A_._21 / B_; _22 := A_._22 / B_; _23 := A_._23 / B_;
714
_31 := A_._31 / B_; _32 := A_._32 / B_; _33 := A_._33 / B_;
718
/////////////////////////////////////////////////////////////////////// メソッド
720
function TDoubleM3.Transpose :TDoubleM3;
722
Result._11 := _11; Result._12 := _21; Result._13 := _31;
723
Result._21 := _12; Result._22 := _22; Result._23 := _32;
724
Result._31 := _13; Result._32 := _23; Result._33 := _33;
727
function TDoubleM3.Det :Double;
729
Result:= _11 * ( _22 * _33 - _23 * _32 )
730
+ _12 * ( _23 * _31 - _21 * _33 )
731
+ _13 * ( _21 * _32 - _22 * _31 );
734
function TDoubleM3.Adjugate :TDoubleM3;
736
Result._11 := +TDoubleM2.Create( {11} {12} {13}
740
Result._21 := -TDoubleM2.Create( {11} {12} {13}
744
Result._31 := +TDoubleM2.Create( {11} {12} {13}
748
Result._12 := -TDoubleM2.Create( {11} _12, _13,
752
Result._22 := +TDoubleM2.Create( _11, {12} _13,
756
Result._32 := -TDoubleM2.Create( _11, _12, {13}
760
Result._13 := +TDoubleM2.Create( {11} _12, _13,
762
{31} {32} {33} ).Det;
764
Result._23 := -TDoubleM2.Create( _11, {12} _13,
766
{31} {32} {33} ).Det;
768
Result._33 := +TDoubleM2.Create( _11, _12, {13}
770
{31} {32} {33} ).Det;
773
function TDoubleM3.Inverse :TDoubleM3;
779
Result := A / ( _11 * A._11
785
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdSingleM3
787
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
789
/////////////////////////////////////////////////////////////////////// アクセス
791
function TdSingleM3.GetM( const Y_,X_:Integer ) :TdSingle;
793
Result := _[ Y_, X_ ];
796
procedure TdSingleM3.SetM( const Y_,X_:Integer; const M_:TdSingle );
801
//------------------------------------------------------------------------------
803
function TdSingleM3.GetAxisX :TdSingle3D;
813
procedure TdSingleM3.SetAxisX( const AxisX_:TdSingle3D );
823
function TdSingleM3.GetAxisY :TdSingle3D;
833
procedure TdSingleM3.SetAxisY( const AxisY_:TdSingle3D );
843
function TdSingleM3.GetAxisZ :TdSingle3D;
853
procedure TdSingleM3.SetAxisZ( const AxisZ_:TdSingle3D );
863
function TdSingleM3.GetSum :TdSingle;
865
Result := _11 + _12 + _13
870
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
872
constructor TdSingleM3.Create( const _11_,_12_,_13_,
874
_31_,_32_,_33_:TdSingle );
876
_11 := _11_; _12 := _12_; _13 := _13_;
877
_21 := _21_; _22 := _22_; _23 := _23_;
878
_31 := _31_; _32 := _32_; _33 := _33_;
881
///////////////////////////////////////////////////////////////////////// 演算子
883
class operator TdSingleM3.Positive( const V_:TdSingleM3 ) :TdSingleM3;
887
_11 := +V_._11; _12 := +V_._12; _13 := +V_._13;
888
_21 := +V_._21; _22 := +V_._22; _23 := +V_._23;
889
_31 := +V_._31; _32 := +V_._32; _33 := +V_._33;
893
class operator TdSingleM3.Negative( const V_:TdSingleM3 ) :TdSingleM3;
897
_11 := -V_._11; _12 := -V_._12; _13 := -V_._13;
898
_21 := -V_._21; _22 := -V_._22; _23 := -V_._23;
899
_31 := -V_._31; _32 := -V_._32; _33 := -V_._33;
903
class operator TdSingleM3.Add( const A_,B_:TdSingleM3 ) :TdSingleM3;
907
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12; _13 := A_._13 + B_._13;
908
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22; _23 := A_._23 + B_._23;
909
_31 := A_._31 + B_._31; _32 := A_._32 + B_._32; _33 := A_._33 + B_._33;
913
class operator TdSingleM3.Subtract( const A_,B_:TdSingleM3 ) :TdSingleM3;
917
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12; _13 := A_._13 - B_._13;
918
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22; _23 := A_._23 - B_._23;
919
_31 := A_._31 - B_._31; _32 := A_._32 - B_._32; _33 := A_._33 - B_._33;
923
class operator TdSingleM3.Multiply( const A_,B_:TdSingleM3 ) :TdSingleM3;
933
_11 := A_._11 * B_._11 + A_._12 * B_._21 + A_._13 * B_._31;
934
_12 := A_._11 * B_._12 + A_._12 * B_._22 + A_._13 * B_._32;
935
_13 := A_._11 * B_._13 + A_._12 * B_._23 + A_._13 * B_._33;
937
_21 := A_._21 * B_._11 + A_._22 * B_._21 + A_._23 * B_._31;
938
_22 := A_._21 * B_._12 + A_._22 * B_._22 + A_._23 * B_._32;
939
_23 := A_._21 * B_._13 + A_._22 * B_._23 + A_._23 * B_._33;
941
_31 := A_._31 * B_._11 + A_._32 * B_._21 + A_._33 * B_._31;
942
_32 := A_._31 * B_._12 + A_._32 * B_._22 + A_._33 * B_._32;
943
_33 := A_._31 * B_._13 + A_._32 * B_._23 + A_._33 * B_._33;
947
class operator TdSingleM3.Multiply( const A_:TdSingleM3; const B_:TdSingle ) :TdSingleM3;
951
_11 := A_._11 * B_; _12 := A_._12 * B_; _13 := A_._13 * B_;
952
_21 := A_._21 * B_; _22 := A_._22 * B_; _23 := A_._23 * B_;
953
_31 := A_._31 * B_; _32 := A_._32 * B_; _33 := A_._33 * B_;
957
class operator TdSingleM3.Multiply( const A_:TdSingle; const B_:TdSingleM3 ) :TdSingleM3;
961
_11 := A_ * B_._11; _12 := A_ * B_._12; _13 := A_ * B_._13;
962
_21 := A_ * B_._21; _22 := A_ * B_._22; _23 := A_ * B_._23;
963
_31 := A_ * B_._31; _32 := A_ * B_._32; _33 := A_ * B_._33;
967
class operator TdSingleM3.Multiply( const A_:TdSingle3D; const B_:TdSingleM3 ) :TdSingle3D;
977
X := A_.X * B_._11 + A_.Y * B_._21 + A_.Z * B_._31;
978
Y := A_.X * B_._12 + A_.Y * B_._22 + A_.Z * B_._32;
979
Z := A_.X * B_._13 + A_.Y * B_._23 + A_.Z * B_._33;
983
class operator TdSingleM3.Multiply( const A_:TdSingleM3; const B_:TdSingle3D ) :TdSingle3D;
993
X := A_._11 * B_.X + A_._12 * B_.Y + A_._13 * B_.Z;
994
Y := A_._21 * B_.X + A_._22 * B_.Y + A_._23 * B_.Z;
995
Z := A_._31 * B_.X + A_._32 * B_.Y + A_._33 * B_.Z;
999
class operator TdSingleM3.Divide( const A_:TdSingleM3; const B_:TdSingle ) :TdSingleM3;
1003
_11 := A_._11 / B_; _12 := A_._12 / B_; _13 := A_._13 / B_;
1004
_21 := A_._21 / B_; _22 := A_._22 / B_; _23 := A_._23 / B_;
1005
_31 := A_._31 / B_; _32 := A_._32 / B_; _33 := A_._33 / B_;
1009
/////////////////////////////////////////////////////////////////////// メソッド
1011
function TdSingleM3.Transpose :TdSingleM3;
1013
Result._11 := _11; Result._12 := _21; Result._13 := _31;
1014
Result._21 := _12; Result._22 := _22; Result._23 := _32;
1015
Result._31 := _13; Result._32 := _23; Result._33 := _33;
1018
function TdSingleM3.Det :TdSingle;
1020
Result:= _11 * ( _22 * _33 - _23 * _32 )
1021
+ _12 * ( _23 * _31 - _21 * _33 )
1022
+ _13 * ( _21 * _32 - _22 * _31 );
1025
function TdSingleM3.Adjugate :TdSingleM3;
1027
Result._11 := +TdSingleM2.Create( {11} {12} {13}
1029
{31} _32, _33 ).Det;
1031
Result._21 := -TdSingleM2.Create( {11} {12} {13}
1033
_31, {32} _33 ).Det;
1035
Result._31 := +TdSingleM2.Create( {11} {12} {13}
1037
_31, _32 {33} ).Det;
1039
Result._12 := -TdSingleM2.Create( {11} _12, _13,
1041
{31} _32, _33 ).Det;
1043
Result._22 := +TdSingleM2.Create( _11, {12} _13,
1045
_31, {32} _33 ).Det;
1047
Result._32 := -TdSingleM2.Create( _11, _12, {13}
1049
_31, _32 {33} ).Det;
1051
Result._13 := +TdSingleM2.Create( {11} _12, _13,
1053
{31} {32} {33} ).Det;
1055
Result._23 := -TdSingleM2.Create( _11, {12} _13,
1057
{31} {32} {33} ).Det;
1059
Result._33 := +TdSingleM2.Create( _11, _12, {13}
1061
{31} {32} {33} ).Det;
1064
function TdSingleM3.Inverse :TdSingleM3;
1070
Result := A / ( _11 * A._11
1075
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdDoubleM3
1077
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
1079
/////////////////////////////////////////////////////////////////////// アクセス
1081
function TdDoubleM3.GetM( const Y_,X_:Integer ) :TdDouble;
1083
Result := _[ Y_, X_ ];
1086
procedure TdDoubleM3.SetM( const Y_,X_:Integer; const M_:TdDouble );
1091
//------------------------------------------------------------------------------
1093
function TdDoubleM3.GetAxisX :TdDouble3D;
1103
procedure TdDoubleM3.SetAxisX( const AxisX_:TdDouble3D );
1113
function TdDoubleM3.GetAxisY :TdDouble3D;
1123
procedure TdDoubleM3.SetAxisY( const AxisY_:TdDouble3D );
1133
function TdDoubleM3.GetAxisZ :TdDouble3D;
1143
procedure TdDoubleM3.SetAxisZ( const AxisZ_:TdDouble3D );
1153
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
1155
constructor TdDoubleM3.Create( const _11_,_12_,_13_,
1157
_31_,_32_,_33_:TdDouble );
1159
_11 := _11_; _12 := _12_; _13 := _13_;
1160
_21 := _21_; _22 := _22_; _23 := _23_;
1161
_31 := _31_; _32 := _32_; _33 := _33_;
1164
///////////////////////////////////////////////////////////////////////// 演算子
1166
class operator TdDoubleM3.Positive( const V_:TdDoubleM3 ) :TdDoubleM3;
1170
_11 := +V_._11; _12 := +V_._12; _13 := +V_._13;
1171
_21 := +V_._21; _22 := +V_._22; _23 := +V_._23;
1172
_31 := +V_._31; _32 := +V_._32; _33 := +V_._33;
1176
class operator TdDoubleM3.Negative( const V_:TdDoubleM3 ) :TdDoubleM3;
1180
_11 := -V_._11; _12 := -V_._12; _13 := -V_._13;
1181
_21 := -V_._21; _22 := -V_._22; _23 := -V_._23;
1182
_31 := -V_._31; _32 := -V_._32; _33 := -V_._33;
1186
class operator TdDoubleM3.Add( const A_,B_:TdDoubleM3 ) :TdDoubleM3;
1190
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12; _13 := A_._13 + B_._13;
1191
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22; _23 := A_._23 + B_._23;
1192
_31 := A_._31 + B_._31; _32 := A_._32 + B_._32; _33 := A_._33 + B_._33;
1196
class operator TdDoubleM3.Subtract( const A_,B_:TdDoubleM3 ) :TdDoubleM3;
1200
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12; _13 := A_._13 - B_._13;
1201
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22; _23 := A_._23 - B_._23;
1202
_31 := A_._31 - B_._31; _32 := A_._32 - B_._32; _33 := A_._33 - B_._33;
1206
class operator TdDoubleM3.Multiply( const A_,B_:TdDoubleM3 ) :TdDoubleM3;
1216
_11 := A_._11 * B_._11 + A_._12 * B_._21 + A_._13 * B_._31;
1217
_12 := A_._11 * B_._12 + A_._12 * B_._22 + A_._13 * B_._32;
1218
_13 := A_._11 * B_._13 + A_._12 * B_._23 + A_._13 * B_._33;
1220
_21 := A_._21 * B_._11 + A_._22 * B_._21 + A_._23 * B_._31;
1221
_22 := A_._21 * B_._12 + A_._22 * B_._22 + A_._23 * B_._32;
1222
_23 := A_._21 * B_._13 + A_._22 * B_._23 + A_._23 * B_._33;
1224
_31 := A_._31 * B_._11 + A_._32 * B_._21 + A_._33 * B_._31;
1225
_32 := A_._31 * B_._12 + A_._32 * B_._22 + A_._33 * B_._32;
1226
_33 := A_._31 * B_._13 + A_._32 * B_._23 + A_._33 * B_._33;
1230
class operator TdDoubleM3.Multiply( const A_:TdDoubleM3; const B_:TdDouble ) :TdDoubleM3;
1234
_11 := A_._11 * B_; _12 := A_._12 * B_; _13 := A_._13 * B_;
1235
_21 := A_._21 * B_; _22 := A_._22 * B_; _23 := A_._23 * B_;
1236
_31 := A_._31 * B_; _32 := A_._32 * B_; _33 := A_._33 * B_;
1240
class operator TdDoubleM3.Multiply( const A_:TdDouble; const B_:TdDoubleM3 ) :TdDoubleM3;
1244
_11 := A_ * B_._11; _12 := A_ * B_._12; _13 := A_ * B_._13;
1245
_21 := A_ * B_._21; _22 := A_ * B_._22; _23 := A_ * B_._23;
1246
_31 := A_ * B_._31; _32 := A_ * B_._32; _33 := A_ * B_._33;
1250
class operator TdDoubleM3.Multiply( const A_:TdDouble3D; const B_:TdDoubleM3 ) :TdDouble3D;
1260
X := A_.X * B_._11 + A_.Y * B_._21 + A_.Z * B_._31;
1261
Y := A_.X * B_._12 + A_.Y * B_._22 + A_.Z * B_._32;
1262
Z := A_.X * B_._13 + A_.Y * B_._23 + A_.Z * B_._33;
1266
class operator TdDoubleM3.Multiply( const A_:TdDoubleM3; const B_:TdDouble3D ) :TdDouble3D;
1276
X := A_._11 * B_.X + A_._12 * B_.Y + A_._13 * B_.Z;
1277
Y := A_._21 * B_.X + A_._22 * B_.Y + A_._23 * B_.Z;
1278
Z := A_._31 * B_.X + A_._32 * B_.Y + A_._33 * B_.Z;
1282
class operator TdDoubleM3.Divide( const A_:TdDoubleM3; const B_:TdDouble ) :TdDoubleM3;
1286
_11 := A_._11 / B_; _12 := A_._12 / B_; _13 := A_._13 / B_;
1287
_21 := A_._21 / B_; _22 := A_._22 / B_; _23 := A_._23 / B_;
1288
_31 := A_._31 / B_; _32 := A_._32 / B_; _33 := A_._33 / B_;
1292
/////////////////////////////////////////////////////////////////////// メソッド
1294
function TdDoubleM3.Transpose :TdDoubleM3;
1296
Result._11 := _11; Result._12 := _21; Result._13 := _31;
1297
Result._21 := _12; Result._22 := _22; Result._23 := _32;
1298
Result._31 := _13; Result._32 := _23; Result._33 := _33;
1301
function TdDoubleM3.Det :TdDouble;
1303
Result:= _11 * ( _22 * _33 - _23 * _32 )
1304
+ _12 * ( _23 * _31 - _21 * _33 )
1305
+ _13 * ( _21 * _32 - _22 * _31 );
1308
function TdDoubleM3.Adjugate :TdDoubleM3;
1310
Result._11 := +TdDoubleM2.Create( {11} {12} {13}
1312
{31} _32, _33 ).Det;
1314
Result._21 := -TdDoubleM2.Create( {11} {12} {13}
1316
_31, {32} _33 ).Det;
1318
Result._31 := +TdDoubleM2.Create( {11} {12} {13}
1320
_31, _32 {33} ).Det;
1322
Result._12 := -TdDoubleM2.Create( {11} _12, _13,
1324
{31} _32, _33 ).Det;
1326
Result._22 := +TdDoubleM2.Create( _11, {12} _13,
1328
_31, {32} _33 ).Det;
1330
Result._32 := -TdDoubleM2.Create( _11, _12, {13}
1332
_31, _32 {33} ).Det;
1334
Result._13 := +TdDoubleM2.Create( {11} _12, _13,
1336
{31} {32} {33} ).Det;
1338
Result._23 := -TdDoubleM2.Create( _11, {12} _13,
1340
{31} {32} {33} ).Det;
1342
Result._33 := +TdDoubleM2.Create( _11, _12, {13}
1344
{31} {32} {33} ).Det;
1347
function TdDoubleM3.Inverse :TdDoubleM3;
1353
Result := A / ( _11 * A._11
1358
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
1360
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
1362
//############################################################################## □
1364
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
1366
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
1368
end. //######################################################################### ■