Chem::Spatial::Vec3
Inherits Struct / Value / Object
Constructors
Returns a new vector representing the position (x, y, z).
Reads a vector from io in the given format. See also:
IO#read_bytes.
Creates a new vector representing the position (x, y, z).
Returns a random vector with the elements within 0 and 1.
Instance methods
Returns the conjugate of the vector by the inverse of rhs. See
Quat#* for details.
Returns the ith component of the vector in the XYZ order. Raises
IndexError if index is invalid.
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
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]
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]
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]
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
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
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
Returns the vector rotated by the given Euler angles in degrees.
Delegates to Quat.rotation for computing the rotation.
Returns the vector rotated about rotaxis by angle
degrees. Delegates to Quat.rotation for computing the rotation.
Returns an array with the components of the vector.
Vec3[1, 2, 3].to_a # => [1.0, 2.0, 3.0]
Writes the binary representation of the vector to io in the
given format. See also IO#write_bytes.
Returns the vector resulting of applying the given transformation.
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]
Returns the vector by wrapping into the primary unit cell centered at center. The vector is assumed to be expressed in fractional coordinates.
Returns the vector by wrapping into the primary unit cell. The vector is assumed to be expressed in fractional coordinates.