Class: Mageo::Vector3DInternal
- 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
-
.[](*args) ⇒ Object
要素数3以外では例外 Mageo::Vector3DInternalSizeError を発生。.
Instance Method Summary collapse
-
#*(val) ⇒ Object
ベクトルとしての乗算.
-
#+(vec) ⇒ Object
ベクトルとしての加算.
-
#-(vec) ⇒ Object
ベクトルとしての減算.
-
#[](index) ⇒ Object
0〜2 以外の要素にアクセスしようとすると例外 Mageo::Vector3DInternal::RangeError を発生。.
-
#[]=(index, val) ⇒ Object
0〜2 以外の要素にアクセスしようとすると例外 Mageo::Vector3DInternal::RangeError を発生。.
-
#to_v3d(axes) ⇒ Object
Convert to Mageo::Vector3D.
-
#to_v3di ⇒ Object
Return self.
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
Class Method Details
.[](*args) ⇒ Object
要素数3以外では例外 Mageo::Vector3DInternalSizeError を発生。
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 を発生。
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 を発生。
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_v3di ⇒ Object
Return self.
35 36 37 |
# File 'lib/mageo/vector3dinternal.rb', line 35 def to_v3di return self end |