mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 17:49:33 +02:00
78 lines
1.4 KiB
ObjectPascal
78 lines
1.4 KiB
ObjectPascal
Program test_operator;
|
|
|
|
{$mode fpc}
|
|
|
|
type
|
|
Vector = record
|
|
X,Y,Z : extended;
|
|
end;
|
|
Matrix = array [1..4,1..4] of extended;
|
|
|
|
Const
|
|
IDENTITYMATRIX : Matrix =
|
|
( (1,0,0,0),
|
|
(0,1,0,0),
|
|
(0,0,1,0),
|
|
(0,0,0,1));
|
|
{...}
|
|
|
|
function NewVector (ax,ay,az : extended) : Vector;
|
|
begin
|
|
NewVector.X:=ax;
|
|
NewVector.Y:=ay;
|
|
NewVector.Z:=az;
|
|
end;
|
|
|
|
operator * (V : Vector;Value : extended) Result : Vector;
|
|
begin
|
|
Result.X:=V.X*Value;
|
|
Result.Y:=V.Y*Value;
|
|
Result.Z:=V.Z*Value;
|
|
end;
|
|
{...}
|
|
operator * (Value : extended;V : Vector) Result : Vector;
|
|
begin
|
|
Result.X:=V.X*Value;
|
|
Result.Y:=V.Y*Value;
|
|
Result.Z:=V.Z*Value;
|
|
end;
|
|
{...}
|
|
|
|
|
|
operator * (M : Matrix;Value : extended) Result : Matrix;
|
|
var i,j : longint;
|
|
begin
|
|
for i:=1 to 4 do
|
|
for j:=1 to 4 do
|
|
Result[i,j]:=M[i,j]*Value;
|
|
end;
|
|
{...}
|
|
operator * (Value : extended;M : Matrix) Result : Matrix;
|
|
var i,j : longint;
|
|
begin
|
|
for i:=1 to 4 do
|
|
for j:=1 to 4 do
|
|
Result[i,j]:=M[i,j]*Value;
|
|
end;
|
|
{...}
|
|
|
|
var
|
|
V1, V2 : Vector;
|
|
M1, M2 : Matrix;
|
|
|
|
begin
|
|
V1 := NewVector (1,1,1);
|
|
V2 := V1 * 2;
|
|
{ Everything ok }
|
|
|
|
|
|
M2 := IDENTITYMATRIX;
|
|
M1 := M2 * 2;
|
|
M1 := IDENTITYMATRIX * 2;
|
|
M2 := IDENTITYMATRIX * 4;
|
|
{ Error: Incompatible types: got "E3MATRIX" expected "LONGINT" in both rows. This doesn't happen if I use 2.0 and 4.0 values. }
|
|
|
|
|
|
{...}
|
|
end.
|