3
interface //#################################################################### ■
5
uses LUX, LUX.D1, LUX.D2;
7
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
9
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
11
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSingleM2
16
constructor Create( const _11_,_12_,
19
class operator Negative( const V_:TSingleM2 ) :TSingleM2;
20
class operator Positive( const V_:TSingleM2 ) :TSingleM2;
21
class operator Add( const A_,B_:TSingleM2 ) :TSingleM2;
22
class operator Subtract( const A_,B_:TSingleM2 ) :TSingleM2;
23
class operator Multiply( const A_,B_:TSingleM2 ) :TSingleM2;
24
class operator Multiply( const A_:TSingleM2; const B_:Single ) :TSingleM2;
25
class operator Multiply( const A_:Single; const B_:TSingleM2 ) :TSingleM2;
26
class operator Multiply( const A_:TSingle2D; const B_:TSingleM2 ) :TSingle2D;
27
class operator Multiply( const A_:TSingleM2; const B_:TSingle2D ) :TSingle2D;
28
class operator Divide( const A_:TSingleM2; const B_:Single ) :TSingleM2;
31
class function Rotate( const Angle_:Single ) :TSingleM2; static;
34
0:( _ :array [ 1..2, 1..2 ] of Single; );
39
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TDoubleM2
44
constructor Create( const _11_,_12_,
47
class operator Negative( const V_:TDoubleM2 ) :TDoubleM2;
48
class operator Positive( const V_:TDoubleM2 ) :TDoubleM2;
49
class operator Add( const A_,B_:TDoubleM2 ) :TDoubleM2;
50
class operator Subtract( const A_,B_:TDoubleM2 ) :TDoubleM2;
51
class operator Multiply( const A_,B_:TDoubleM2 ) :TDoubleM2;
52
class operator Multiply( const A_:TDoubleM2; const B_:Double ) :TDoubleM2;
53
class operator Multiply( const A_:Double; const B_:TDoubleM2 ) :TDoubleM2;
54
class operator Multiply( const A_:TDouble2D; const B_:TDoubleM2 ) :TDouble2D;
55
class operator Multiply( const A_:TDoubleM2; const B_:TDouble2D ) :TDouble2D;
56
class operator Divide( const A_:TDoubleM2; const B_:Double ) :TDoubleM2;
59
class function Rotate( const Angle_:Double ) :TDoubleM2; static;
62
0: ( _ :array [ 1..2, 1..2 ] of Double; );
67
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdSingleM2
72
constructor Create( const _11_,_12_,
75
class operator Negative( const V_:TdSingleM2 ) :TdSingleM2;
76
class operator Positive( const V_:TdSingleM2 ) :TdSingleM2;
77
class operator Add( const A_,B_:TdSingleM2 ) :TdSingleM2;
78
class operator Subtract( const A_,B_:TdSingleM2 ) :TdSingleM2;
79
class operator Multiply( const A_,B_:TdSingleM2 ) :TdSingleM2;
80
class operator Multiply( const A_:TdSingleM2; const B_:TdSingle ) :TdSingleM2;
81
class operator Multiply( const A_:TdSingle; const B_:TdSingleM2 ) :TdSingleM2;
82
class operator Multiply( const A_:TdSingle2D; const B_:TdSingleM2 ) :TdSingle2D;
83
class operator Multiply( const A_:TdSingleM2; const B_:TdSingle2D ) :TdSingle2D;
84
class operator Divide( const A_:TdSingleM2; const B_:TdSingle ) :TdSingleM2;
86
function Det :TdSingle;
87
class function Rotate( const Angle_:TdSingle ) :TdSingleM2; static;
90
0:( _ :array [ 1..2, 1..2 ] of TdSingle; );
92
_21, _22 :TdSingle; );
95
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdDoubleM2
100
constructor Create( const _11_,_12_,
101
_21_,_22_:TdDouble );
103
class operator Negative( const V_:TdDoubleM2 ) :TdDoubleM2;
104
class operator Positive( const V_:TdDoubleM2 ) :TdDoubleM2;
105
class operator Add( const A_,B_:TdDoubleM2 ) :TdDoubleM2;
106
class operator Subtract( const A_,B_:TdDoubleM2 ) :TdDoubleM2;
107
class operator Multiply( const A_,B_:TdDoubleM2 ) :TdDoubleM2;
108
class operator Multiply( const A_:TdDoubleM2; const B_:TdDouble ) :TdDoubleM2;
109
class operator Multiply( const A_:TdDouble; const B_:TdDoubleM2 ) :TdDoubleM2;
110
class operator Multiply( const A_:TdDouble2D; const B_:TdDoubleM2 ) :TdDouble2D;
111
class operator Multiply( const A_:TdDoubleM2; const B_:TdDouble2D ) :TdDouble2D;
112
class operator Divide( const A_:TdDoubleM2; const B_:TdDouble ) :TdDoubleM2;
114
function Det :TdDouble;
115
class function Rotate( const Angle_:TdDouble ) :TdDoubleM2; static;
118
0: ( _ :array [ 1..2, 1..2 ] of TdDouble; );
120
_21, _22 :TdDouble; );
123
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
125
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
127
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
129
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
131
implementation //############################################################### ■
135
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
137
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSingleM2
139
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
141
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
143
constructor TSingleM2.Create( const _11_,_12_, _21_,_22_:Single );
145
_11 := _11_; _12 := _12_;
146
_21 := _21_; _22 := _22_;
149
///////////////////////////////////////////////////////////////////////// 演算子
151
class operator TSingleM2.Positive( const V_:TSingleM2 ) :TSingleM2;
155
_11 := +V_._11; _12 := +V_._12;
156
_21 := +V_._21; _22 := +V_._22;
160
class operator TSingleM2.Negative( const V_:TSingleM2 ) :TSingleM2;
164
_11 := -V_._11; _12 := -V_._12;
165
_21 := -V_._21; _22 := -V_._22;
169
class operator TSingleM2.Add( const A_,B_:TSingleM2 ) :TSingleM2;
173
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12;
174
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22;
178
class operator TSingleM2.Subtract( const A_,B_:TSingleM2 ) :TSingleM2;
182
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12;
183
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22;
187
class operator TSingleM2.Multiply( const A_,B_:TSingleM2 ) :TSingleM2;
194
_11 := A_._11 * B_._11 + A_._12 * B_._21;
195
_12 := A_._11 * B_._12 + A_._12 * B_._22;
197
_21 := A_._21 * B_._11 + A_._22 * B_._21;
198
_22 := A_._21 * B_._12 + A_._22 * B_._22;
202
class operator TSingleM2.Multiply( const A_:TSingleM2; const B_:Single ) :TSingleM2;
206
_11 := A_._11 * B_; _12 := A_._12 * B_;
207
_21 := A_._21 * B_; _22 := A_._22 * B_;
211
class operator TSingleM2.Multiply( const A_:Single; const B_:TSingleM2 ) :TSingleM2;
215
_11 := A_ * B_._11; _12 := A_ * B_._12;
216
_21 := A_ * B_._21; _22 := A_ * B_._22;
220
class operator TSingleM2.Multiply( const A_:TSingle2D; const B_:TSingleM2 ) :TSingle2D;
229
X := A_.X * B_._11 + A_.Y * B_._21;
230
Y := A_.X * B_._12 + A_.Y * B_._22;
234
class operator TSingleM2.Multiply( const A_:TSingleM2; const B_:TSingle2D ) :TSingle2D;
243
X := A_._11 * B_.X + A_._12 * B_.Y;
244
Y := A_._21 * B_.X + A_._22 * B_.Y;
248
class operator TSingleM2.Divide( const A_:TSingleM2; const B_:Single ) :TSingleM2;
252
_11 := A_._11 / B_; _12 := A_._12 / B_;
253
_21 := A_._21 / B_; _22 := A_._22 / B_;
257
/////////////////////////////////////////////////////////////////////// メソッド
259
function TSingleM2.Det :Single;
261
Result := _11 * _22 - _21 * _12;
264
class function TSingleM2.Rotate( const Angle_:Single ) :TSingleM2;
268
SinCos( Angle_, S, C );
277
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TDoubleM2
279
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
281
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
283
constructor TDoubleM2.Create( const _11_,_12_, _21_,_22_:Double );
285
_11 := _11_; _12 := _12_;
286
_21 := _21_; _22 := _22_;
289
///////////////////////////////////////////////////////////////////////// 演算子
291
class operator TDoubleM2.Positive( const V_:TDoubleM2 ) :TDoubleM2;
295
_11 := +V_._11; _12 := +V_._12;
296
_21 := +V_._21; _22 := +V_._22;
300
class operator TDoubleM2.Negative( const V_:TDoubleM2 ) :TDoubleM2;
304
_11 := -V_._11; _12 := -V_._12;
305
_21 := -V_._21; _22 := -V_._22;
309
class operator TDoubleM2.Add( const A_,B_:TDoubleM2 ) :TDoubleM2;
313
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12;
314
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22;
318
class operator TDoubleM2.Subtract( const A_,B_:TDoubleM2 ) :TDoubleM2;
322
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12;
323
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22;
327
class operator TDoubleM2.Multiply( const A_,B_:TDoubleM2 ) :TDoubleM2;
334
_11 := A_._11 * B_._11 + A_._12 * B_._21;
335
_12 := A_._11 * B_._12 + A_._12 * B_._22;
337
_21 := A_._21 * B_._11 + A_._22 * B_._21;
338
_22 := A_._21 * B_._12 + A_._22 * B_._22;
342
class operator TDoubleM2.Multiply( const A_:TDoubleM2; const B_:Double ) :TDoubleM2;
346
_11 := A_._11 * B_; _12 := A_._12 * B_;
347
_21 := A_._21 * B_; _22 := A_._22 * B_;
351
class operator TDoubleM2.Multiply( const A_:Double; const B_:TDoubleM2 ) :TDoubleM2;
355
_11 := A_ * B_._11; _12 := A_ * B_._12;
356
_21 := A_ * B_._21; _22 := A_ * B_._22;
360
class operator TDoubleM2.Multiply( const A_:TDouble2D; const B_:TDoubleM2 ) :TDouble2D;
369
X := A_.X * B_._11 + A_.Y * B_._21;
370
Y := A_.X * B_._12 + A_.Y * B_._22;
374
class operator TDoubleM2.Multiply( const A_:TDoubleM2; const B_:TDouble2D ) :TDouble2D;
383
X := A_._11 * B_.X + A_._12 * B_.Y;
384
Y := A_._21 * B_.X + A_._22 * B_.Y;
388
class operator TDoubleM2.Divide( const A_:TDoubleM2; const B_:Double ) :TDoubleM2;
392
_11 := A_._11 / B_; _12 := A_._12 / B_;
393
_21 := A_._21 / B_; _22 := A_._22 / B_;
397
/////////////////////////////////////////////////////////////////////// メソッド
399
function TDoubleM2.Det :Double;
401
Result := _11 * _22 - _21 * _12;
404
class function TDoubleM2.Rotate( const Angle_:Double ) :TDoubleM2;
408
SinCos( Angle_, S, C );
417
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdSingleM2
419
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
421
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
423
constructor TdSingleM2.Create( const _11_,_12_, _21_,_22_:TdSingle );
425
_11 := _11_; _12 := _12_;
426
_21 := _21_; _22 := _22_;
429
///////////////////////////////////////////////////////////////////////// 演算子
431
class operator TdSingleM2.Positive( const V_:TdSingleM2 ) :TdSingleM2;
435
_11 := +V_._11; _12 := +V_._12;
436
_21 := +V_._21; _22 := +V_._22;
440
class operator TdSingleM2.Negative( const V_:TdSingleM2 ) :TdSingleM2;
444
_11 := -V_._11; _12 := -V_._12;
445
_21 := -V_._21; _22 := -V_._22;
449
class operator TdSingleM2.Add( const A_,B_:TdSingleM2 ) :TdSingleM2;
453
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12;
454
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22;
458
class operator TdSingleM2.Subtract( const A_,B_:TdSingleM2 ) :TdSingleM2;
462
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12;
463
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22;
467
class operator TdSingleM2.Multiply( const A_,B_:TdSingleM2 ) :TdSingleM2;
474
_11 := A_._11 * B_._11 + A_._12 * B_._21;
475
_12 := A_._11 * B_._12 + A_._12 * B_._22;
477
_21 := A_._21 * B_._11 + A_._22 * B_._21;
478
_22 := A_._21 * B_._12 + A_._22 * B_._22;
482
class operator TdSingleM2.Multiply( const A_:TdSingleM2; const B_:TdSingle ) :TdSingleM2;
486
_11 := A_._11 * B_; _12 := A_._12 * B_;
487
_21 := A_._21 * B_; _22 := A_._22 * B_;
491
class operator TdSingleM2.Multiply( const A_:TdSingle; const B_:TdSingleM2 ) :TdSingleM2;
495
_11 := A_ * B_._11; _12 := A_ * B_._12;
496
_21 := A_ * B_._21; _22 := A_ * B_._22;
500
class operator TdSingleM2.Multiply( const A_:TdSingle2D; const B_:TdSingleM2 ) :TdSingle2D;
509
X := A_.X * B_._11 + A_.Y * B_._21;
510
Y := A_.X * B_._12 + A_.Y * B_._22;
514
class operator TdSingleM2.Multiply( const A_:TdSingleM2; const B_:TdSingle2D ) :TdSingle2D;
523
X := A_._11 * B_.X + A_._12 * B_.Y;
524
Y := A_._21 * B_.X + A_._22 * B_.Y;
528
class operator TdSingleM2.Divide( const A_:TdSingleM2; const B_:TdSingle ) :TdSingleM2;
532
_11 := A_._11 / B_; _12 := A_._12 / B_;
533
_21 := A_._21 / B_; _22 := A_._22 / B_;
537
/////////////////////////////////////////////////////////////////////// メソッド
539
function TdSingleM2.Det :TdSingle;
541
Result := _11 * _22 - _21 * _12;
544
class function TdSingleM2.Rotate( const Angle_:TdSingle ) :TdSingleM2;
548
SinCos( Angle_, S, C );
557
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TdDoubleM2
559
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
561
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
563
constructor TdDoubleM2.Create( const _11_,_12_, _21_,_22_:TdDouble );
565
_11 := _11_; _12 := _12_;
566
_21 := _21_; _22 := _22_;
569
///////////////////////////////////////////////////////////////////////// 演算子
571
class operator TdDoubleM2.Positive( const V_:TdDoubleM2 ) :TdDoubleM2;
575
_11 := +V_._11; _12 := +V_._12;
576
_21 := +V_._21; _22 := +V_._22;
580
class operator TdDoubleM2.Negative( const V_:TdDoubleM2 ) :TdDoubleM2;
584
_11 := -V_._11; _12 := -V_._12;
585
_21 := -V_._21; _22 := -V_._22;
589
class operator TdDoubleM2.Add( const A_,B_:TdDoubleM2 ) :TdDoubleM2;
593
_11 := A_._11 + B_._11; _12 := A_._12 + B_._12;
594
_21 := A_._21 + B_._21; _22 := A_._22 + B_._22;
598
class operator TdDoubleM2.Subtract( const A_,B_:TdDoubleM2 ) :TdDoubleM2;
602
_11 := A_._11 - B_._11; _12 := A_._12 - B_._12;
603
_21 := A_._21 - B_._21; _22 := A_._22 - B_._22;
607
class operator TdDoubleM2.Multiply( const A_,B_:TdDoubleM2 ) :TdDoubleM2;
614
_11 := A_._11 * B_._11 + A_._12 * B_._21;
615
_12 := A_._11 * B_._12 + A_._12 * B_._22;
617
_21 := A_._21 * B_._11 + A_._22 * B_._21;
618
_22 := A_._21 * B_._12 + A_._22 * B_._22;
622
class operator TdDoubleM2.Multiply( const A_:TdDoubleM2; const B_:TdDouble ) :TdDoubleM2;
626
_11 := A_._11 * B_; _12 := A_._12 * B_;
627
_21 := A_._21 * B_; _22 := A_._22 * B_;
631
class operator TdDoubleM2.Multiply( const A_:TdDouble; const B_:TdDoubleM2 ) :TdDoubleM2;
635
_11 := A_ * B_._11; _12 := A_ * B_._12;
636
_21 := A_ * B_._21; _22 := A_ * B_._22;
640
class operator TdDoubleM2.Multiply( const A_:TdDouble2D; const B_:TdDoubleM2 ) :TdDouble2D;
649
X := A_.X * B_._11 + A_.Y * B_._21;
650
Y := A_.X * B_._12 + A_.Y * B_._22;
654
class operator TdDoubleM2.Multiply( const A_:TdDoubleM2; const B_:TdDouble2D ) :TdDouble2D;
663
X := A_._11 * B_.X + A_._12 * B_.Y;
664
Y := A_._21 * B_.X + A_._22 * B_.Y;
668
class operator TdDoubleM2.Divide( const A_:TdDoubleM2; const B_:TdDouble ) :TdDoubleM2;
672
_11 := A_._11 / B_; _12 := A_._12 / B_;
673
_21 := A_._21 / B_; _22 := A_._22 / B_;
677
/////////////////////////////////////////////////////////////////////// メソッド
679
function TdDoubleM2.Det :TdDouble;
681
Result := _11 * _22 - _21 * _12;
684
class function TdDoubleM2.Rotate( const Angle_:TdDouble ) :TdDoubleM2;
688
SinCos( Angle_, S, C );
697
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
699
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
701
//############################################################################## □
703
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
705
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 終了化
707
end. //######################################################################### ■