16
function GetM(const Y_, X_: Integer): Single;
17
procedure SetM(const Y_, X_: Integer; const M_: Single);
18
function GetAxisX: TSingle2D;
19
procedure SetAxisX(const AxisX_: TSingle2D);
20
function GetAxisY: TSingle2D;
21
procedure SetAxisY(const AxisY_: TSingle2D);
23
constructor Create(const _11_, _12_, _21_, _22_: Single);
24
class operator Negative(const V_: TSingleM2): TSingleM2;
25
class operator Positive(const V_: TSingleM2): TSingleM2;
26
class operator Add(const A_, B_: TSingleM2): TSingleM2;
27
class operator Subtract(const A_, B_: TSingleM2): TSingleM2;
28
class operator Multiply(const A_, B_: TSingleM2): TSingleM2;
29
class operator Multiply(const A_: TSingleM2; const B_: Single): TSingleM2;
30
class operator Multiply(const A_: Single; const B_: TSingleM2): TSingleM2;
31
class operator Multiply(const A_: TSingle2D; const B_: TSingleM2)
33
class operator Multiply(const A_: TSingleM2; const B_: TSingle2D)
35
class operator Divide(const A_: TSingleM2; const B_: Single): TSingleM2;
36
property M[const Y_, X_: Integer]: Single read GetM write SetM; default;
37
property AxisX: TSingle2D read GetAxisX write SetAxisX;
38
property AxisY: TSingle2D read GetAxisY write SetAxisY;
40
function Adjugate: TSingleM2;
41
function Inverse: TSingleM2;
42
class function Rotate(const Angle_: Single): TSingleM2; static;
46
(_: array [1 .. 2, 1 .. 2] of Single;);
48
(_11, _12, _21, _22: Single;
54
function GetM(const Y_, X_: Integer): Double;
55
procedure SetM(const Y_, X_: Integer; const M_: Double);
56
function GetAxisX: TDouble2D;
57
procedure SetAxisX(const AxisX_: TDouble2D);
58
function GetAxisY: TDouble2D;
59
procedure SetAxisY(const AxisY_: TDouble2D);
61
constructor Create(const _11_, _12_, _21_, _22_: Double);
62
class operator Negative(const V_: TDoubleM2): TDoubleM2;
63
class operator Positive(const V_: TDoubleM2): TDoubleM2;
64
class operator Add(const A_, B_: TDoubleM2): TDoubleM2;
65
class operator Subtract(const A_, B_: TDoubleM2): TDoubleM2;
66
class operator Multiply(const A_, B_: TDoubleM2): TDoubleM2;
67
class operator Multiply(const A_: TDoubleM2; const B_: Double): TDoubleM2;
68
class operator Multiply(const A_: Double; const B_: TDoubleM2): TDoubleM2;
69
class operator Multiply(const A_: TDouble2D; const B_: TDoubleM2)
71
class operator Multiply(const A_: TDoubleM2; const B_: TDouble2D)
73
class operator Divide(const A_: TDoubleM2; const B_: Double): TDoubleM2;
74
property M[const Y_, X_: Integer]: Double read GetM write SetM; default;
75
property AxisX: TDouble2D read GetAxisX write SetAxisX;
76
property AxisY: TDouble2D read GetAxisY write SetAxisY;
78
function Adjugate: TDoubleM2;
79
function Inverse: TDoubleM2;
80
class function Rotate(const Angle_: Double): TDoubleM2; static;
84
(_: array [1 .. 2, 1 .. 2] of Double;);
86
(_11, _12, _21, _22: Double;
92
function GetM(const Y_, X_: Integer): TdSingle;
93
procedure SetM(const Y_, X_: Integer; const M_: TdSingle);
94
function GetAxisX: TdSingle2D;
95
procedure SetAxisX(const AxisX_: TdSingle2D);
96
function GetAxisY: TdSingle2D;
97
procedure SetAxisY(const AxisY_: TdSingle2D);
99
constructor Create(const _11_, _12_, _21_, _22_: TdSingle);
100
class operator Negative(const V_: TdSingleM2): TdSingleM2;
101
class operator Positive(const V_: TdSingleM2): TdSingleM2;
102
class operator Add(const A_, B_: TdSingleM2): TdSingleM2;
103
class operator Subtract(const A_, B_: TdSingleM2): TdSingleM2;
104
class operator Multiply(const A_, B_: TdSingleM2): TdSingleM2;
105
class operator Multiply(const A_: TdSingleM2; const B_: TdSingle)
107
class operator Multiply(const A_: TdSingle; const B_: TdSingleM2)
109
class operator Multiply(const A_: TdSingle2D; const B_: TdSingleM2)
111
class operator Multiply(const A_: TdSingleM2; const B_: TdSingle2D)
113
class operator Divide(const A_: TdSingleM2; const B_: TdSingle): TdSingleM2;
114
property M[const Y_, X_: Integer]: TdSingle read GetM write SetM; default;
115
property AxisX: TdSingle2D read GetAxisX write SetAxisX;
116
property AxisY: TdSingle2D read GetAxisY write SetAxisY;
117
function Det: TdSingle;
118
function Adjugate: TdSingleM2;
119
function Inverse: TdSingleM2;
120
class function Rotate(const Angle_: TdSingle): TdSingleM2; static;
124
(_: array [1 .. 2, 1 .. 2] of TdSingle;);
126
(_11, _12, _21, _22: TdSingle;
132
function GetM(const Y_, X_: Integer): TdDouble;
133
procedure SetM(const Y_, X_: Integer; const M_: TdDouble);
134
function GetAxisX: TdDouble2D;
135
procedure SetAxisX(const AxisX_: TdDouble2D);
136
function GetAxisY: TdDouble2D;
137
procedure SetAxisY(const AxisY_: TdDouble2D);
139
constructor Create(const _11_, _12_, _21_, _22_: TdDouble);
140
class operator Negative(const V_: TdDoubleM2): TdDoubleM2;
141
class operator Positive(const V_: TdDoubleM2): TdDoubleM2;
142
class operator Add(const A_, B_: TdDoubleM2): TdDoubleM2;
143
class operator Subtract(const A_, B_: TdDoubleM2): TdDoubleM2;
144
class operator Multiply(const A_, B_: TdDoubleM2): TdDoubleM2;
145
class operator Multiply(const A_: TdDoubleM2; const B_: TdDouble)
147
class operator Multiply(const A_: TdDouble; const B_: TdDoubleM2)
149
class operator Multiply(const A_: TdDouble2D; const B_: TdDoubleM2)
151
class operator Multiply(const A_: TdDoubleM2; const B_: TdDouble2D)
153
class operator Divide(const A_: TdDoubleM2; const B_: TdDouble): TdDoubleM2;
154
property M[const Y_, X_: Integer]: TdDouble read GetM write SetM; default;
155
property AxisX: TdDouble2D read GetAxisX write SetAxisX;
156
property AxisY: TdDouble2D read GetAxisY write SetAxisY;
157
function Det: TdDouble;
158
function Adjugate: TdDoubleM2;
159
function Inverse: TdDoubleM2;
160
class function Rotate(const Angle_: TdDouble): TdDoubleM2; static;
164
(_: array [1 .. 2, 1 .. 2] of TdDouble;);
166
(_11, _12, _21, _22: TdDouble;
170
implementation // -------------------------------------------------------------
172
function TSingleM2.GetM(const Y_, X_: Integer): Single;
177
procedure TSingleM2.SetM(const Y_, X_: Integer; const M_: Single);
182
// ------------------------------------------------------------------------------
184
function TSingleM2.GetAxisX: TSingle2D;
188
X := _11; { X := _12; }
189
Y := _21; { Y := _22; }
193
procedure TSingleM2.SetAxisX(const AxisX_: TSingle2D);
197
_11 := X; { _12 := X; }
198
_21 := Y; { _22 := Y; }
202
function TSingleM2.GetAxisY: TSingle2D;
206
{ X := _11; } X := _12;
207
{ Y := _21; } Y := _22;
211
procedure TSingleM2.SetAxisY(const AxisY_: TSingle2D);
215
{ _11 := X; } _12 := X;
216
{ _21 := Y; } _22 := Y;
220
constructor TSingleM2.Create(const _11_, _12_, _21_, _22_: Single);
228
class operator TSingleM2.Positive(const V_: TSingleM2): TSingleM2;
239
class operator TSingleM2.Negative(const V_: TSingleM2): TSingleM2;
250
class operator TSingleM2.Add(const A_, B_: TSingleM2): TSingleM2;
254
_11 := A_._11 + B_._11;
255
_12 := A_._12 + B_._12;
256
_21 := A_._21 + B_._21;
257
_22 := A_._22 + B_._22;
261
class operator TSingleM2.Subtract(const A_, B_: TSingleM2): TSingleM2;
265
_11 := A_._11 - B_._11;
266
_12 := A_._12 - B_._12;
267
_21 := A_._21 - B_._21;
268
_22 := A_._22 - B_._22;
272
class operator TSingleM2.Multiply(const A_, B_: TSingleM2): TSingleM2;
279
_11 := A_._11 * B_._11 + A_._12 * B_._21;
280
_12 := A_._11 * B_._12 + A_._12 * B_._22;
282
_21 := A_._21 * B_._11 + A_._22 * B_._21;
283
_22 := A_._21 * B_._12 + A_._22 * B_._22;
287
class operator TSingleM2.Multiply(const A_: TSingleM2; const B_: Single)
299
class operator TSingleM2.Multiply(const A_: Single; const B_: TSingleM2)
311
class operator TSingleM2.Multiply(const A_: TSingle2D; const B_: TSingleM2)
321
X := A_.X * B_._11 + A_.Y * B_._21;
322
Y := A_.X * B_._12 + A_.Y * B_._22;
326
class operator TSingleM2.Multiply(const A_: TSingleM2; const B_: TSingle2D)
336
X := A_._11 * B_.X + A_._12 * B_.Y;
337
Y := A_._21 * B_.X + A_._22 * B_.Y;
341
class operator TSingleM2.Divide(const A_: TSingleM2; const B_: Single)
353
function TSingleM2.Det: Single;
355
Result := _11 * _22 - _21 * _12;
358
function TSingleM2.Adjugate: TSingleM2;
366
function TSingleM2.Inverse: TSingleM2;
368
Result := Adjugate / Det;
371
// ------------------------------------------------------------------------------
373
class function TSingleM2.Rotate(const Angle_: Single): TSingleM2;
377
SinCos(Angle_, S, C);
388
function TDoubleM2.GetM(const Y_, X_: Integer): Double;
393
procedure TDoubleM2.SetM(const Y_, X_: Integer; const M_: Double);
398
// ------------------------------------------------------------------------------
400
function TDoubleM2.GetAxisX: TDouble2D;
404
X := _11; { X := _12; }
405
Y := _21; { Y := _22; }
409
procedure TDoubleM2.SetAxisX(const AxisX_: TDouble2D);
413
_11 := X; { _12 := X; }
414
_21 := Y; { _22 := Y; }
418
function TDoubleM2.GetAxisY: TDouble2D;
422
{ X := _11; } X := _12;
423
{ Y := _21; } Y := _22;
427
procedure TDoubleM2.SetAxisY(const AxisY_: TDouble2D);
431
{ _11 := X; } _12 := X;
432
{ _21 := Y; } _22 := Y;
436
constructor TDoubleM2.Create(const _11_, _12_, _21_, _22_: Double);
444
class operator TDoubleM2.Positive(const V_: TDoubleM2): TDoubleM2;
455
class operator TDoubleM2.Negative(const V_: TDoubleM2): TDoubleM2;
466
class operator TDoubleM2.Add(const A_, B_: TDoubleM2): TDoubleM2;
470
_11 := A_._11 + B_._11;
471
_12 := A_._12 + B_._12;
472
_21 := A_._21 + B_._21;
473
_22 := A_._22 + B_._22;
477
class operator TDoubleM2.Subtract(const A_, B_: TDoubleM2): TDoubleM2;
481
_11 := A_._11 - B_._11;
482
_12 := A_._12 - B_._12;
483
_21 := A_._21 - B_._21;
484
_22 := A_._22 - B_._22;
488
class operator TDoubleM2.Multiply(const A_, B_: TDoubleM2): TDoubleM2;
495
_11 := A_._11 * B_._11 + A_._12 * B_._21;
496
_12 := A_._11 * B_._12 + A_._12 * B_._22;
498
_21 := A_._21 * B_._11 + A_._22 * B_._21;
499
_22 := A_._21 * B_._12 + A_._22 * B_._22;
503
class operator TDoubleM2.Multiply(const A_: TDoubleM2; const B_: Double)
515
class operator TDoubleM2.Multiply(const A_: Double; const B_: TDoubleM2)
527
class operator TDoubleM2.Multiply(const A_: TDouble2D; const B_: TDoubleM2)
537
X := A_.X * B_._11 + A_.Y * B_._21;
538
Y := A_.X * B_._12 + A_.Y * B_._22;
542
class operator TDoubleM2.Multiply(const A_: TDoubleM2; const B_: TDouble2D)
552
X := A_._11 * B_.X + A_._12 * B_.Y;
553
Y := A_._21 * B_.X + A_._22 * B_.Y;
557
class operator TDoubleM2.Divide(const A_: TDoubleM2; const B_: Double)
569
function TDoubleM2.Det: Double;
571
Result := _11 * _22 - _21 * _12;
574
function TDoubleM2.Adjugate: TDoubleM2;
582
function TDoubleM2.Inverse: TDoubleM2;
584
Result := Adjugate / Det;
587
// ------------------------------------------------------------------------------
589
class function TDoubleM2.Rotate(const Angle_: Double): TDoubleM2;
593
SinCos(Angle_, S, C);
604
function TdSingleM2.GetM(const Y_, X_: Integer): TdSingle;
609
procedure TdSingleM2.SetM(const Y_, X_: Integer; const M_: TdSingle);
614
// ------------------------------------------------------------------------------
616
function TdSingleM2.GetAxisX: TdSingle2D;
620
X := _11; { X := _12; }
621
Y := _21; { Y := _22; }
625
procedure TdSingleM2.SetAxisX(const AxisX_: TdSingle2D);
629
_11 := X; { _12 := X; }
630
_21 := Y; { _22 := Y; }
634
function TdSingleM2.GetAxisY: TdSingle2D;
638
{ X := _11; } X := _12;
639
{ Y := _21; } Y := _22;
643
procedure TdSingleM2.SetAxisY(const AxisY_: TdSingle2D);
647
{ _11 := X; } _12 := X;
648
{ _21 := Y; } _22 := Y;
652
// &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
654
constructor TdSingleM2.Create(const _11_, _12_, _21_, _22_: TdSingle);
662
class operator TdSingleM2.Positive(const V_: TdSingleM2): TdSingleM2;
673
class operator TdSingleM2.Negative(const V_: TdSingleM2): TdSingleM2;
684
class operator TdSingleM2.Add(const A_, B_: TdSingleM2): TdSingleM2;
688
_11 := A_._11 + B_._11;
689
_12 := A_._12 + B_._12;
690
_21 := A_._21 + B_._21;
691
_22 := A_._22 + B_._22;
695
class operator TdSingleM2.Subtract(const A_, B_: TdSingleM2): TdSingleM2;
699
_11 := A_._11 - B_._11;
700
_12 := A_._12 - B_._12;
701
_21 := A_._21 - B_._21;
702
_22 := A_._22 - B_._22;
706
class operator TdSingleM2.Multiply(const A_, B_: TdSingleM2): TdSingleM2;
713
_11 := A_._11 * B_._11 + A_._12 * B_._21;
714
_12 := A_._11 * B_._12 + A_._12 * B_._22;
716
_21 := A_._21 * B_._11 + A_._22 * B_._21;
717
_22 := A_._21 * B_._12 + A_._22 * B_._22;
721
class operator TdSingleM2.Multiply(const A_: TdSingleM2; const B_: TdSingle)
733
class operator TdSingleM2.Multiply(const A_: TdSingle; const B_: TdSingleM2)
745
class operator TdSingleM2.Multiply(const A_: TdSingle2D; const B_: TdSingleM2)
755
X := A_.X * B_._11 + A_.Y * B_._21;
756
Y := A_.X * B_._12 + A_.Y * B_._22;
760
class operator TdSingleM2.Multiply(const A_: TdSingleM2; const B_: TdSingle2D)
770
X := A_._11 * B_.X + A_._12 * B_.Y;
771
Y := A_._21 * B_.X + A_._22 * B_.Y;
775
class operator TdSingleM2.Divide(const A_: TdSingleM2; const B_: TdSingle)
787
function TdSingleM2.Det: TdSingle;
789
Result := _11 * _22 - _21 * _12;
792
function TdSingleM2.Adjugate: TdSingleM2;
800
function TdSingleM2.Inverse: TdSingleM2;
802
Result := Adjugate / Det;
805
// ------------------------------------------------------------------------------
807
class function TdSingleM2.Rotate(const Angle_: TdSingle): TdSingleM2;
811
SinCos(Angle_, S, C);
822
function TdDoubleM2.GetM(const Y_, X_: Integer): TdDouble;
827
procedure TdDoubleM2.SetM(const Y_, X_: Integer; const M_: TdDouble);
832
// ------------------------------------------------------------------------------
834
function TdDoubleM2.GetAxisX: TdDouble2D;
838
X := _11; { X := _12; }
839
Y := _21; { Y := _22; }
843
procedure TdDoubleM2.SetAxisX(const AxisX_: TdDouble2D);
847
_11 := X; { _12 := X; }
848
_21 := Y; { _22 := Y; }
852
function TdDoubleM2.GetAxisY: TdDouble2D;
856
{ X := _11; } X := _12;
857
{ Y := _21; } Y := _22;
861
procedure TdDoubleM2.SetAxisY(const AxisY_: TdDouble2D);
865
{ _11 := X; } _12 := X;
866
{ _21 := Y; } _22 := Y;
870
constructor TdDoubleM2.Create(const _11_, _12_, _21_, _22_: TdDouble);
878
class operator TdDoubleM2.Positive(const V_: TdDoubleM2): TdDoubleM2;
889
class operator TdDoubleM2.Negative(const V_: TdDoubleM2): TdDoubleM2;
900
class operator TdDoubleM2.Add(const A_, B_: TdDoubleM2): TdDoubleM2;
904
_11 := A_._11 + B_._11;
905
_12 := A_._12 + B_._12;
906
_21 := A_._21 + B_._21;
907
_22 := A_._22 + B_._22;
911
class operator TdDoubleM2.Subtract(const A_, B_: TdDoubleM2): TdDoubleM2;
915
_11 := A_._11 - B_._11;
916
_12 := A_._12 - B_._12;
917
_21 := A_._21 - B_._21;
918
_22 := A_._22 - B_._22;
922
class operator TdDoubleM2.Multiply(const A_, B_: TdDoubleM2): TdDoubleM2;
929
_11 := A_._11 * B_._11 + A_._12 * B_._21;
930
_12 := A_._11 * B_._12 + A_._12 * B_._22;
932
_21 := A_._21 * B_._11 + A_._22 * B_._21;
933
_22 := A_._21 * B_._12 + A_._22 * B_._22;
937
class operator TdDoubleM2.Multiply(const A_: TdDoubleM2; const B_: TdDouble)
949
class operator TdDoubleM2.Multiply(const A_: TdDouble; const B_: TdDoubleM2)
961
class operator TdDoubleM2.Multiply(const A_: TdDouble2D; const B_: TdDoubleM2)
971
X := A_.X * B_._11 + A_.Y * B_._21;
972
Y := A_.X * B_._12 + A_.Y * B_._22;
976
class operator TdDoubleM2.Multiply(const A_: TdDoubleM2; const B_: TdDouble2D)
986
X := A_._11 * B_.X + A_._12 * B_.Y;
987
Y := A_._21 * B_.X + A_._22 * B_.Y;
991
class operator TdDoubleM2.Divide(const A_: TdDoubleM2; const B_: TdDouble)
1003
function TdDoubleM2.Det: TdDouble;
1005
Result := _11 * _22 - _21 * _12;
1008
function TdDoubleM2.Adjugate: TdDoubleM2;
1016
function TdDoubleM2.Inverse: TdDoubleM2;
1018
Result := Adjugate / Det;
1021
// ------------------------------------------------------------------------------
1023
class function TdDoubleM2.Rotate(const Angle_: TdDouble): TdDoubleM2;
1027
SinCos(Angle_, S, C);
1038
initialization // --------------------------------------------------------------