struct Chem::Spatial::Vec3

Defined in:

chem/spatial/quat.cr
chem/spatial/vec3.cr

Constructors

Instance Method Summary

Constructor Detail

def self.[](x : Number, y : Number, z : Number) : self #

Returns a new vector representing the position (x, y, z).


[View source]
def self.additive_identity : self #

Returns the additive identity of this type. This is the zero vector.


[View source]
def self.from_io(io : IO, format : IO::ByteFormat) : self #

Reads a vector from io in the given format. See also: IO#read_bytes.


[View source]
def self.new(x : Float64, y : Float64, z : Float64) #

Creates a new vector representing the position (x, y, z).


[View source]
def self.rand(random = Random::DEFAULT) : self #

Returns a random vector with the elements within 0 and 1.


[View source]
def self.zero : self #

Returns the zero vector.


[View source]

Instance Method Detail

def *(rhs : Number) : self #

Returns the element-wise multiplication of the vector by rhs.


[View source]
def *(rhs : Vec3) : self #

Returns the element-wise multiplication of the vector by rhs.


[View source]
def *(rhs : Quat) : self #

Returns the conjugate of the vector by the inverse of rhs. See Quat#* for details.


[View source]
def +(rhs : Number) : self #

Returns the element-wise addition of the vector by rhs.


[View source]
def +(rhs : Vec3) : self #

Returns the element-wise addition of the vector by rhs.


[View source]
def +(rhs : Size3) : self #

Returns the element-wise addition of the vector by rhs.


[View source]
def -(rhs : Number) : self #

Returns the element-wise subtraction of the vector by rhs.


[View source]
def -(rhs : Vec3) : self #

Returns the element-wise subtraction of the vector by rhs.


[View source]
def -(rhs : Size3) : self #

Returns the element-wise subtraction of the vector by rhs.


[View source]
def - : self #

Returns the negation of the vector.


[View source]
def /(rhs : Number) : self #

Returns the element-wise division of the vector by rhs.


[View source]
def /(rhs : Vec3) : self #

Returns the element-wise division of the vector by rhs.


[View source]
def [](index : Int32) : Float64 #

Returns the ith component of the vector in the XYZ order. Raises IndexError if index is invalid.


[View source]
def abs : Float64 #

Returns the absolute value (norm or length) of the vector.


[View source]
def abs2 : Float64 #

Returns the square of the absolute value of the vector.


[View source]
def close_to?(rhs : self, delta : Number = Float64::EPSILON) : Bool #

Returns true if the elements of the vectors are within delta from each other, else false.

Vec3[1, 2, 3].close_to?(Vec3[1, 2, 3])                     # => true
Vec3[1, 2, 3].close_to?(Vec3[1.001, 1.999, 3.00004], 1e-3) # => true
Vec3[1, 2, 3].close_to?(Vec3[3, 2, 1])                     # => false
Vec3[1, 2, 3].close_to?(Vec3[1.001, 1.999, 3.00004], 1e-8) # => false

[View source]
def cross(rhs : Vec3) : self #

Returns the cross product of the vector and rhs.


[View source]
def dot(rhs : Vec3) : Float64 #

Returns the dot product of the vector and rhs.


[View source]
def image(i : Int, j : Int, k : Int) : self #

Returns vector's PBC image in fractional coordinates

vec = Vec3[0.456, 0.1, 0.8]
vec.image 1, 0, 0   # => Vec3[1.456, 0.1, 0.8]
vec.image -1, 0, 0  # => Vec3[-0.544, 0.1, 0.8]
vec.image -1, 1, -5 # => Vec3[-0.544, 1.1, -4.2]

[View source]
def inv : self #

Returns the inverse of the vector. It is equivalent to the unary negation operator.


[View source]
def map(& : Float64 -> Number) : self #

Returns a vector with the results of the component-wise mapping by the given block. This is useful to perform non-standard transformations.

Vec3[1, 2, 3].map(&.**(2)) # => Vec3[1.0, 4.0, 9.0]

[View source]
def map_with_index(& : Float64, Int32 -> Number) : self #

Returns a vector with the results of the component-wise mapping by the given block yielding both the value and index. This is useful to perform non-standard transformations.

Vec3[1, 2, 3].map { |ele, i| ele * i } # => Vec3[0.0, 2.0, 6.0]

[View source]
def normalize : self #

Returns the unit vector pointing in the same direction of the vector.

v = Vec3[2.5, 0, 0].normalize # => Vec[1.0, 0.0, 0.0]
v.abs                         # => 1.0
v = Vec3[1, 1, 1].normalize   # => Vec[0.577, 0.577, 0.577]
v.abs                         # => 1.0

[View source]
def pad(padding : Number) : self #

Returns a vector by increasing the length by padding.

Vec3[1, 0, 0].pad(2) # => Vec3[3, 0, 0]
a = Vec3[1, 2, 3]
a.abs                             # => 3.7416573867739413
b = a.pad(2)                      # => Vec3[1.535, 3.069, 4.604]
b.abs                             # => 5.741657386773941
a.normalize.close_to? b.normalize # => true

[View source]
def project(vec : self) : self #

Returns the projection of the vector on vec.


[View source]
def reject(vec : self) : self #

Returns the rejection of the vector on vec.


[View source]
def resize(length : Number) : self #

Returns a vector pointing in the same direction with the given length.

a = Vec3[1, 2, 3]
a.abs                              # => 3.7416573867739413
b = a.resize 0.5                   # => Vec3[0.134, 0.267, 0.401]
b.abs                              # => 0.5
b.normalize.close_to?(a.normalize) # => true

[View source]
def rotate(x : Number, y : Number, z : Number) : self #

Returns the vector rotated by the given Euler angles in degrees. Delegates to Quat.rotation for computing the rotation.


[View source]
def rotate(about rotaxis : Vec3, by angle : Number) : self #

Returns the vector rotated about rotaxis by angle degrees. Delegates to Quat.rotation for computing the rotation.


[View source]
def rotate(quat : Quat) : self #

Returns the vector rotated by the given quaternion.


[View source]
def to_a : Array(Float64) #

Returns an array with the components of the vector.

Vec3[1, 2, 3].to_a # => [1.0, 2.0, 3.0]

[View source]
def to_io(io : IO, format : IO::ByteFormat = :system_endian) : Nil #

Writes the binary representation of the vector to io in the given format. See also IO#write_bytes.


[View source]
def to_q : Quat #

Returns the quaternion representation of the vector, i.e., Quat[0, x, y, z].


[View source]
def to_s(io : IO) : Nil #
Description copied from struct Struct

Same as #inspect(io).


[View source]
def transform(transformation : Transform) : self #

Returns the vector resulting of applying the given transformation.


[View source]
def transform(& : Float64, Float64, Float64 -> FloatTriple) : self #

Returns a new vector with the return value of the given block, which is invoked with the X, Y, and Z components.

Vec3[3, 2, 1].transform do |x, y, z|
  x *= 2
  z /= 0.5
  {x, y, z}
end # => Vec3[6, 2, 2]

[View source]
def translate(by offset : Vec3) : self #

Returns the vector translated by the given offset.


[View source]
def unsafe_fetch(index : Int) : Float64 #

[View source]
def wrap(around center : self) : self #

Returns the vector by wrapping into the primary unit cell centered at center. The vector is assumed to be expressed in fractional coordinates.


[View source]
def wrap : self #

Returns the vector by wrapping into the primary unit cell. The vector is assumed to be expressed in fractional coordinates.


[View source]
def x : Float64 #

X component of the vector.


[View source]
def x? : Bool #

Returns true if the vector lies along X axis, else false.


[View source]
def xy? : Bool #

Returns true if the vector lies in the XY-plane, else false.


[View source]
def xz? : Bool #

Returns true if the vector lies in the XZ-plane, else false.


[View source]
def y : Float64 #

Y component of the vector.


[View source]
def y? : Bool #

Returns true if the vector lies along Y axis, else false.


[View source]
def yz? : Bool #

Returns true if the vector lies in the YZ-plane, else false.


[View source]
def z : Float64 #

Z component of the vector.


[View source]
def z? : Bool #

Returns true if the vector lies along Z axis, else false.


[View source]
def zero? : Bool #

Returns true if the vector is zero, else false.


[View source]