4 fun translateXYZ (translateX
: real, translateY
: real, translateZ
: real) =
5 ((1.0, 0.0, 0.0, translateX
),
6 (0.0, 1.0, 0.0, translateY
),
7 (0.0, 0.0, 1.0, translateZ
),
10 fun transformPoint matr
{x
, y
, z
} =
12 val ((in00
, in01
, in02
, in03
),
13 (in10
, in11
, in12
, in13
),
14 (in20
, in21
, in22
, in23
),
15 (in30
, in31
, in32
, in33
)) = matr
17 val w
= x
* in30
+ y
* in31
+ z
* in32
+ in33
19 if Real.== (0.0, w
) then
22 {x
= ((in00
* x
) + (in01
* y
) + (in02
* z
) + in03
) / w
,
23 y
= ((in10
* x
) + (in11
* y
) + (in12
* z
) + in13
) / w
,
24 z
= ((in20
* x
) + (in21
* y
) + (in22
* z
) + in23
) / w
}
27 fun Point3DToString
{x
, y
, z
} =
28 "{x = " ^
(Real.toString x
) ^
29 ", y = " ^
(Real.toString y
) ^
30 ", z = " ^
(Real.toString z
) ^
33 val m
= translateXYZ (2.0, 3.0, 4.0)
34 val p
= {x
= 1.0, y
= 2.0, z
= 3.0}
35 val _
= print (Point3DToString p
)
36 val p
' = transformPoint m p
37 val _
= print (Point3DToString p
')