Skip to content

Quaternion

crocblancyt edited this page Dec 1, 2025 · 2 revisions

Quaternion

How to load

see import

local quaternion = dofile("quaternion.lua")
OR
local quaternion = import(".../quaternion.lua")

Functions

new

local q = quaternion.new(w, x, y, z)
OR
local q = quaternion.new{w=w, x=x, y=y, z=z}

fromAxisAngle

local axis, angleAroundAxis = vector.new(0,1,0), math.rad(90)
local q = quaternion.fromAxisAngle(axis, angleAroundAxis)

fromMatrix

local q = quaternion.fromMatrix({
    {1,0,0},
    {0,1,0},
    {0,0,1}
})

fromVectorToVector

local from, to = vector.new(1,0,0), vector.new(1,1,1)
local q = quaternion.fromVectorToVector(from, to)
--untested

fromEuler

local xyz = {x=0, y=math.rad(90), z=0}
local order = "zyx"
local q = quaternion.fromEuler(xyz, order)

Quaternion object

Functions

toMatrix

local m = q:toMatrix()

transformVector

local rotatedVector = q:transformVector(vector.new(1,0,0))

toSave

local save = q:toSave()

inverse

local q = q:inverse()

combining quaternions

local q = q1 * q2

toAxisAngle

local axis, angle = q:toAxisAngle()

to euler angles

local angles = q:toEulerXYZ()
local angles = q:toEulerZYX()
local angles = q:toEulerYXZ()
local angles = q:toEulerZXY()

Structure

{
    w: number
    x: number
    y: number
    z: number
    magnitude: number
    unit: quaternion
}

Clone this wiki locally