Vector3Impl.mesa
Copyright © 1984, Xerox Corporation. All rights reserved.
Doug Wyatt, August 15, 1984 5:42:22 pm PDT
DIRECTORY
Real USING [SqRt],
Vector3 USING [VEC];
Vector3Impl: CEDAR PROGRAM
IMPORTS Real
EXPORTS Vector3
~ BEGIN
VEC: TYPE ~ Vector3.VEC;
Add:
PUBLIC
PROC[v1, v2:
VEC]
RETURNS[
VEC] ~ {
RETURN[[v1.x+v2.x, v1.y+v2.y, v1.z+v2.z]] };
Sub:
PUBLIC
PROC[v1, v2:
VEC]
RETURNS[
VEC] ~ {
RETURN[[v1.x-v2.x, v1.y-v2.y, v1.z-v2.z]] };
Neg:
PUBLIC
PROC[v:
VEC]
RETURNS[
VEC] ~ {
RETURN[[-v.x, -v.y, -v.z]] };
Mul:
PUBLIC
PROC[v:
VEC, s:
REAL]
RETURNS[
VEC] ~ {
RETURN[[v.x*s, v.y*s, v.z*s]] };
Div:
PUBLIC
PROC[v:
VEC, s:
REAL]
RETURNS[
VEC] ~ {
RETURN[[v.x/s, v.y/s, v.z/s]] };
Square:
PUBLIC
PROC[v:
VEC]
RETURNS[
REAL] ~ {
RETURN[v.x*v.x+v.y*v.y+v.z*v.z] };
Length:
PUBLIC
PROC[v:
VEC]
RETURNS[
REAL] ~ {
RETURN[Real.SqRt[v.x*v.x+v.y*v.y+v.z*v.z]] };
Unit:
PUBLIC
PROC[v:
VEC]
RETURNS[
VEC] ~ {
m: REAL ~ Real.SqRt[v.x*v.x+v.y*v.y+v.z*v.z]; RETURN[[v.x/m, v.y/m, v.z/m]] };
Dot:
PUBLIC
PROC[v1, v2:
VEC]
RETURNS[
REAL] ~ {
RETURN[v1.x*v2.x+v1.y*v2.y+v1.z*v2.z] };
Cross:
PUBLIC
PROC[v1, v2:
VEC]
RETURNS[
VEC] ~ {
RETURN[[v1.y*v2.z-v1.z*v2.y, v1.z*v2.x-v1.x*v2.z, v1.x*v2.y-v1.y*v2.x]] };
END.