Skip to content

Vector Operations

Dickson Law edited this page Jul 28, 2025 · 4 revisions

Vector Operations

Builders

Operation r2 r3 r4 rn
Create a vector r2(x0, x1) r3(x0, x1, x2) r4(x0, x1, x2, x3) rn(...)
Create a zero vector r2_zero() r3_zero() r4_zero() rn_zero(n)
Clone/copy a vector r2_clone(v, [vout]) r3_clone(v, [vout]) r4_clone(v, [vout]) rn_clone(v, [vout])

Basic Operations

Operation r2 r3 r4 rn
Vector addition r2_add(v1, v2, [vout]) r3_add(v1, v2, [vout]) r4_add(v1, v2, [vout]) rn_add(v1, v2, [vout])
Vector subtraction r2_subtract(v1, v2, [vout]) r3_subtract(v1, v2, [vout]) r4_subtract(v1, v2, [vout]) rn_subtract(v1, v2, [vout])
Scalar multiplication r2_scale(v, r, [vout]) r3_scale(v, r, [vout]) r4_scale(v, r, [vout]) rn_scale(v, r, [vout])
Dot product r2_dot(v1, v2) r3_dot(v1, v2) r4_dot(v1, v2) rn_dot(v1, v2)
Cross product N/A r3_cross(v1, v2, [vout]) N/A N/A

Extended Operations

Operation r2 r3 r4 rn
Unit vector r2_unit(v, [vout]) r3_unit(v, [vout]) r4_unit(v, [vout]) rn_unit(v, [vout])
Linear Interpolation r2_lerp(v1, v2, amount, [vout]) r3_lerp(v1, v2, amount, [vout]) r4_lerp(v1, v2, amount, [vout]) rn_lerp(v1, v2, amount, [vout])
Vector Projection r2_proj(v1, v2, [vout]) r3_proj(v1, v2, [vout]) r4_proj(v1, v2, [vout]) rn_proj(v1, v2, [vout])
Vector Rejection r2_rej(v1, v2, [vout]) r3_rej(v1, v2, [vout]) r4_rej(v1, v2, [vout]) rn_rej(v1, v2, [vout])

Norms and Distances

Operation r2 r3 r4 rn
Euclidean norm r2_norm(v) r3_norm(v) r4_norm(v) rn_norm(v)
Manhattan norm r2_1norm(v) r3_1norm(v) r4_1norm(v) rn_1norm(v)
Maximum norm r2_maxnorm(v) r3_maxnorm(v) r4_maxnorm(v) rn_maxnorm(v)
Euclidean distance r2_dist(v1, v2) r3_dist(v1, v2) r4_dist(v1, v2) rn_dist(v1, v2)
Manhattan distance r2_1dist(v1, v2) r3_1dist(v1, v2) r4_1dist(v1, v2) rn_1dist(v1, v2)

Encoding and Decoding

  • String format: Each entry is written with 14 decimal digits, separated by commas.
  • Base64 format: Each entry is written as a 64-bit float to the buffer, then encoded as base64.
Operation r2 r3 r4 rn
Encode to string r2_encode_string(v) r3_encode_string(v) r4_encode_string(v) rn_encode_string(v)
Decode from string r2_decode_string(str, [vout]) r3_decode_string(str, [vout]) r4_decode_string(str, [vout]) rn_decode_string(str, [vout])
Encode to base64 r2_encode_base64(v) r3_encode_base64(v) r4_encode_base64(v) rn_encode_base64(v)
Decode from base64 r2_decode_base64(enc, [vout]) r3_decode_base64(enc, [vout]) r4_decode_base64(enc, [vout]) rn_decode_base64(enc, n, [vout])

2D Coordinate System Conversions

These functions take the form r2_IN_OUT(v, [vout]).

Name Name Code (IN/OUT) Component 0 Component 1
Rectangular rec x (pixels) y (pixels)
GameMaker Polar gmp len (pixels) dir (degrees, counter-clockwise from right with downward y axis)
Polar pol r (pixels) theta (radians, counter-clockwise from right with upward y axis)
From Rectangular From GameMaker Polar From Polar
To Rectangular N/A r2_gmp_rec(vi_ld, [vo_xy]) r2_pol_rec(vi_rt, [vo_xy])
To GameMaker Polar r2_rec_gmp(vi_xy, [vo_ld]) N/A r2_pol_gmp(vi_rt, [vo_ld])
To Polar r2_rec_pol(vi_xy, [vo_rt]) r2_gmp_pol(vi_ld, [vo_rt]) N/A

3D Coordinate System Conversions

These functions take the form r3_IN_OUT(v, [vout]).

Name Name Code (IN/OUT) Component 0 Component 1 Component 2
Rectangular rec x (pixels) y (pixels) z (pixels)
Cylindrical cyl rho (pixels) phi (radians) z (pixels)
Spherical sph rho (pixels) phi (radians, azimuth) theta (radians, declination)
From Rectangular From Cylindrical From Spherical
To Rectangular N/A r3_cyl_rec(vi_rpz, [vo_xyz]) r3_sph_rec(vi_rpt, [vo_xyz])
To Cylindrical r3_rec_cyl(vi_xyz, [vo_rpz]) N/A r3_sph_cyl(vi_rpt, [vo_rpz])
To Spherical r3_rec_sph(vi_xyz, [vo_rpt]) r3_cyl_sph(vi_rpz, [vo_rpt]) N/A

Component Constants

These constants allow you to semantically access vector entries.

Name Value
COMP_X 0
COMP_Y 1
COMP_Z 2
COMP_T 2
COMP_W 3
COMP_RED 0
COMP_GREEN 1
COMP_BLUE 2
COMP_ALPHA 3

Clone this wiki locally