Sha256: d0af5a9706caf647a01c70fa9b636e119d1a2662d2a48fbb4a4df23f60d0d5f1
Contents?: true
Size: 1.44 KB
Versions: 2
Compression:
Stored size: 1.44 KB
Contents
require_relative 'vec' class Quaternion EPSILON = 9.999999747378752e-05 # a value used by processing.org attr_reader :w, :x, :y, :z def initialize(w = 1.0, x = 0, y = 0, z = 0) @w, @x, @y, @z = w, x, y, z end def ==(quat) (w - quat.w).abs < EPSILON && (x - quat.x).abs < EPSILON && (y - quat.y).abs < EPSILON && (z - quat.z).abs < EPSILON end def reset @w = 1.0 @x = 0.0 @y = 0.0 @z = 0.0 end def set(w, v) @w, @x, @y, @z = w, v.x, v.y, v.z end def copy(q) @w, @x, @y, @z = q.w, q.x, q.y, q.z end def self.mult(q1, q2) # class method x0 = q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y y0 = q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z z0 = q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x w0 = q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z Quaternion.new(w0, x0, y0, z0) end def * (q1) # instance method x0 = w * q1.x + x * q1.w + y * q1.z - z * q1.y y0 = w * q1.y + y * q1.w + z * q1.x - x * q1.z z0 = w * q1.z + z * q1.w + x * q1.y - y * q1.x w0 = w * q1.w - x * q1.x - y * q1.y - z * q1.z Quaternion.new(w0, x0, y0, z0) end def get_value sa = Math.sqrt(1.0 - w * w) sa = 1.0 unless (sa >= EPSILON) [Math.acos(w) * 2, x / sa, y / sa, z / sa] end def to_s "#{self.class}(w=#{w}, x=#{x}, y=#{y}, z=#{z})" end def inspect self.to_s end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ruby-processing-2.4.4 | library/vecmath/lib/quaternion.rb |
ruby-processing-2.4.3 | library/vecmath/lib/quaternion.rb |