The v3d library¶
<v3>
class¶
The class <v3>
has three dimensions x
, y
and z
of
type <float>
.
Creation with make
¶
To create a vector use keywords:
let v = make(<v3>, x: 1.0, y: 2.0, z: 3.0);
format-out("%=\n", v);
// (1.0, 2.0, 3.0)
In case that a keyword is not used, the dimension is initialized to
0.0
.
Creation with v3
¶
- v3 Function¶
Short form to create a
v3
.- Signature:
v3 x y z => (v)
- Parameters:
- Values:
v – An instance of
v3d
- Discussion:
The code is shorter but less flexible, all parameters must be passed and the order is important.
- Example:
let v = v3(1.0, 2.0, 3.0); format-out("%=\n", v); // (1.0, 2.0, 3.0)
Dimension accessors (x
, y
and z
)¶
Dimensions x
, y
and z
can be accessed by v-x
, v-y
and v-z
respectively.
- v-x(<v3>) Method¶
Returns the
x
dimension of av3d
.- Signature:
v-x v => (x)
- Parameters:
v – An instance of
<v3>
- Values:
x – An instance of
<float>
- Example:
let u = make(<v3>, x: 1.0, y: 2.0, z: 3.0); format-out("x = %=\n", u.v-x); // prints 'x = 1.0'
Vector zero ($v3-zero
)¶
$v3-zero
is a constant for a vector with 0.0
in coordinates
x
, y
and z
.
Infix operations¶
Equals (=
)¶
- =(<v3>, <v3>) Method¶
Check if two vectors are equal.
- Signature:
= a b => (equal?)
- Parameters:
a – An instance of
<v3>
.b – An instance of
<v3>
.
- Values:
equal? – An instance of
<boolean>
.
- Example:
let v1 = v3(1.0, 1.0, 1.0); let v2 = v3(2.0, 2.0, 2.0); let result = if (v1 = v2) "equals" else "different" end; format-out("%s\n", result); // different
Addition (+
)¶
- +(<v3>, <v3>) Method¶
Adds two vectors.
- Signature:
+ a b => (sum)
- Parameters:
a – An instance of
<v3>
.b – An instance of
<v3>
.
- Values:
sum – An instance of
<v3>
.
- Example:
let v1 = v3(1.0, 1.0, 1.0); let v2 = v3(2.0, 2.0, 2.0); let v3 = v1 + v2; format-out("%=\n", v3); // (3.0, 3.0, 3.0)
Substraction (-
)¶
- -(<v3>, <v3>) Method¶
Substract two vectors.
- Signature:
- a b => (difference)
- Parameters:
a – An instance of
<v3>
.b – An instance of
<v3>
.
- Values:
difference – An instance of
<v3>
.
- Example:
let v1 = v3(2.0, 2.0, 2.0); let v2 = v3(1.0, 1.0, 1.0); let v3 = v1 - v2; format-out("%=\n", v3); // (1.0, 1.0, 1.0)
Negative (-
)¶
- -(<v3>) Method¶
Substract two vectors.
- Signature:
- a => (negated)
- Parameters:
a – An instance of
<v3>
.
- Values:
negated – An instance of
<v3>
.
- Example:
let v1 = v3(2.0, 2.0, 2.0); let v2 = -v1; format-out("%=\n", v2); // (-2.0, -2.0, -2.0)
Product (*
)¶
Scalar multiplication (*
)¶
- *(<v3>, <float>) Method¶
Product scalar of a vector by a number.
Let v = (x1, y1, z1) and let k be scalar. The scalar multiplication of kv = (kx1, ky1, kz1).
- Signature:
a n => (product)
- Parameters:
a – An instance of
<v3>
.n – An instance of
<float>
.
- Values:
product – An instance of
<v3>
.
- Example:
let v1 = v3(1.0, 1.0, 1.0); let v2 = v1 * 2.0; format-out("%=\n", v2); // (2.0, 2.0, 2.0)
- *(<float>, <v3>) Method¶
Product scalar of a number by vector.
Let v = (x1, y1, z1) and let k be scalar. The scalar multiplication of kv = (kx1, ky1, kz1).
- Signature:
n a => (product)
- Parameters:
n – An instance of
<float>
.a – An instance of
<v3>
.
- Values:
product – An instance of
<v3>
.
- Example:
let v1 = v3(1.0, 1.0, 1.0); let v2 = 2.0 * v1; format-out("%=\n", v2); // (2.0, 2.0, 2.0)
Division (/
)¶
Other operations¶
squared¶
magnitude¶
- magnitude Function¶
Scalar magnitude of a vector. Also called length. It’s calculated as the squared root of the squared vector.
- Signature:
magnitude v => (n)
- Parameters:
v – An instance of
<v3>
.
- Values:
n – An instance of
<float>
let v = v3(0.0, 3.0, 4.0); assert-equal(v.magnitude, 5.0); let u = v3(2.0, 3.0, 4.0); assert-equal(u.magnitude, sqrt(29.0));
cross-product¶
- cross-product Function¶
Takes the cross product of vector u and v and returns a vector perpendicular to both u and v.
- Signature:
cross-product u v => (c)
- Parameters:
u – An instance of
<v3>
.v – An instance of
<v3>
.
- Values:
c – An instance of
<v3>
.
let u = v3(3.0, -3.0, 1.0); let v = v3(4.0, 9.0, 2.0); let r = v3(-15.0, -2.0, 39.0); assert-equal(cross-product(u, v), r);
unit?¶
zero?¶
normalize¶
- normalize Function¶
- signature:
normalize u => (normalized)
- parameter u:
An instance of
<v3>
.- value normalized:
An instance of
<v3>
let v1 = v3(3.0, 1.0, 2.0); assert-true(similar(v1.normalize.magnitude, 1.0));
distance¶
- distance Function¶
Magnitude of u - v
- Signature:
distance u v => (distance)
- Parameters:
u – An instance of
<v3>
.v – An instance of
<v3>
.
- Values:
distance – An instance of
<v3>