lib/vector3.rb in gmath3D-0.2.3 vs lib/vector3.rb in gmath3D-0.2.4

- old
+ new

@@ -4,23 +4,22 @@ module GMath3D # # Vector3 represents a point or a vector on 3D space. # class Vector3 < Geom -public attr_accessor :x attr_accessor :y attr_accessor :z # [Input] # _x_, _y_, _z_ should be Numeric. # [Output] # return new instance as Vector3. def initialize(x=0.0,y=0.0,z=0.0) - Util.check_arg_type(Numeric, x) - Util.check_arg_type(Numeric, y) - Util.check_arg_type(Numeric, z) + Util3D.check_arg_type(Numeric, x) + Util3D.check_arg_type(Numeric, y) + Util3D.check_arg_type(Numeric, z) super() @x = x @y = y @z = z end @@ -91,20 +90,20 @@ # [Input] # _rhs_ should be Vector3. # [Output] # return inner product as Numeric def dot(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) self.x*rhs.x + self.y*rhs.y + self.z*rhs.z end # [Input] # _rhs_ should be Vector3. # [Output] # return cross product as Vector3. def cross(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) Vector3.new( self.y*rhs.z - self.z*rhs.y, self.z*rhs.x - self.x*rhs.z, self.x*rhs.y - self.y*rhs.x) end @@ -135,20 +134,20 @@ # [Input] # _rhs_ should be Vector3. # [Output] # return distance between two points as Numeric. def distance(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) Math::sqrt((self.x - rhs.x)*(self.x - rhs.x) + (self.y - rhs.y)*(self.y - rhs.y) + (self.z - rhs.z)*(self.z - rhs.z)) end # [Input] # _rhs_ should be Vector3. # [Output] # return two vectors angle as Numeric (rad). def angle(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) vec1Length = self.length ; vec2Length = rhs.length ; return 0.0 if(vec1Length*vec2Length < self.tolerance ) v = self.dot(rhs)/(vec1Length*vec2Length) Math::acos( v ) @@ -163,22 +162,22 @@ # [Input] # _rhs_ should be Vector3 # [Output] # return true if myself and rhs is parallel as boolean def parallel?(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) return false if(self.length < self.tolerance or rhs.length < rhs.tolerance) return false if(self.cross(rhs).length > self.tolerance) return true end # [Input] # _rhs_ should be Vector3. # [Output] # return true if myself and rhs have same direction as boolean. def same_direction?(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) return false if(!parallel?(rhs)) return false if(self.dot(rhs) < self.tolerance) return true end @@ -186,11 +185,11 @@ # [Input] # _rhs_ should be Vector3. # [Output] # return projected result as Vector3. def project_to(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) return Vector3.new, 0.0 if( rhs.length < rhs.tolerance ) parameter = self.dot( rhs ) / ( rhs.x * rhs.x + rhs.y * rhs.y + rhs.z * rhs.z ).to_f return rhs*parameter, parameter end @@ -206,22 +205,22 @@ return false if((self.y - rhs.y).abs > @tolerance) return false if((self.z - rhs.z).abs > @tolerance) true end def add(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) Vector3.new(self.x + rhs.x, self.y + rhs.y, self.z + rhs.z) end def subtract(rhs) - Util.check_arg_type(Vector3, rhs) + Util3D.check_arg_type(Vector3, rhs) Vector3.new(self.x - rhs.x, self.y - rhs.y, self.z - rhs.z) end def multiply(rhs) - Util.check_arg_type(::Numeric, rhs) + Util3D.check_arg_type(::Numeric, rhs) Vector3.new(self.x * rhs, self.y * rhs, self.z * rhs) end def divide(rhs) - Util.check_arg_type(::Numeric, rhs) + Util3D.check_arg_type(::Numeric, rhs) Vector3.new(self.x.to_f / rhs, self.y / rhs.to_f, self.z / rhs.to_f) end end end