Class: Mageo::Vector3DInternal

Inherits:
Vector3D show all
Defined in:
lib/mageo/vector3dinternal.rb

Overview

内部座標系( internal coordinate ) でのベクトルを表現するクラス。 直交座標系とは違い、内積・外積などの角度を含む演算が無効。 (直交座標と間違えて)内部座標で内積を求めるなど誤った演算を例外で止めるのが目的。 座標軸の情報は自身では持たない。 Actually, this class is very similar to Array class, except for +, -, and * methods. Vector, Mageo::Vector3D との混在計算は例外を発生。

軸の情報は持たない。 軸に関係ない抽象的な内部座標について議論することもありうるし、 軸情報が必要なのは to_v3d メソッドくらいなので。

Defined Under Namespace

Classes: RangeError, TypeError

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Vector3D

angle_degree, #angle_degree, angle_radian, #angle_radian, #clone, cross_product, #equal_in_delta?, exterior_product, #exterior_product, #internal_coordinates, #rotate_axis, #rotate_axis!, scalar_triple_product, #scalar_triple_product, #size, #to_p3d, vector_product

Methods inherited from Vector

#floor, #to_p2d, #unit_vector

Class Method Details

.[](*args) ⇒ Object

要素数3以外では例外 Mageo::Vector3DInternalSizeError を発生。

Raises:



24
25
26
27
# File 'lib/mageo/vector3dinternal.rb', line 24

def self.[]( *args )
  raise RangeError unless args.size == 3
  super *args
end

Instance Method Details

#*(val) ⇒ Object

ベクトルとしての乗算



104
105
106
107
108
109
110
# File 'lib/mageo/vector3dinternal.rb', line 104

def *( val )
  result = Mageo::Vector3DInternal[0.0, 0.0, 0.0]
  3.times do |i|
    result[ i ] = ( self[ i ] * val )
  end
  result
end

#+(vec) ⇒ Object

ベクトルとしての加算



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/mageo/vector3dinternal.rb', line 78

def +(vec)
  unless vec.class == Mageo::Vector3DInternal
    raise TypeError,
      "Argument: #{vec.inspect}, #{vec.class}."
  end
  result = Mageo::Vector3DInternal[0.0, 0.0, 0.0]
  3.times do |i|
    result[ i ] = (self[ i ] + vec[ i ])
  end
  result
end

#-(vec) ⇒ Object

ベクトルとしての減算



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/mageo/vector3dinternal.rb', line 91

def -( vec )
  unless vec.class == Mageo::Vector3DInternal
    raise TypeError,
      "Argument: #{vec.inspect}, #{vec.class}."
  end
  result = Mageo::Vector3DInternal[0.0, 0.0, 0.0]
  3.times do |i|
    result[ i ] = (self[ i ] - vec[ i ])
  end
  result
end

#[](index) ⇒ Object

0〜2 以外の要素にアクセスしようとすると例外 Mageo::Vector3DInternal::RangeError を発生。

Raises:



66
67
68
69
# File 'lib/mageo/vector3dinternal.rb', line 66

def []( index )
  raise RangeError if ( index < 0 || 2 < index )
  super index
end

#[]=(index, val) ⇒ Object

0〜2 以外の要素にアクセスしようとすると例外 Mageo::Vector3DInternal::RangeError を発生。

Raises:



72
73
74
75
# File 'lib/mageo/vector3dinternal.rb', line 72

def []=( index, val )
  raise RangeError if ( index < 0 || 2 < index )
  super index, val
end

#to_v3d(axes) ⇒ Object

Convert to Mageo::Vector3D. Non-destructive.



40
41
42
43
44
45
46
47
48
# File 'lib/mageo/vector3dinternal.rb', line 40

def to_v3d( axes )
  result = [ 0.0, 0.0, 0.0 ]
  3.times do |i|
    3.times do |j|
      result[i] += ( self[j] * axes[j][i] )
    end
  end
  Mageo::Vector3D[ *result ]
end

#to_v3diObject

Return self.



35
36
37
# File 'lib/mageo/vector3dinternal.rb', line 35

def to_v3di
  return self
end