3D用数学ライブラリ

Math3dモジュール内定義

Vector
　Vector関連のクラス
　method
　　Vector.new(Array)
　　Vector.new(Float, Float)
　　Vector.new(Float, Float, Float)
　　Vector.new(Float, Float, Float, Float)
      Vector2/Vector3/Vector4を生成します

　　Vector#add(Vector)
　　Vector#+(Vector)
　　　Vectorの加算を行います

　　Vector#sub(Vector)
　　Vector#-(Vector)
　　　Vectorの減算を行います

　　Vector#scale!(Float)
　　Vector#scale(Float)
　　　Vectorの大きさを変更します

　　Vector#mult!(val)
　　Vector#mult(val)
　　Vector#*(val)
　　　Float　Vector#scaleを実行します
　　　Matrix4　Vector#xform_fullを実行します
　　　Rotation　Vector#xform_rotを実行します
　　　Vector　Vector#crossを実行します

　　Vector#to_a
　　　配列に変換します

　　Vector#to_vec2
　　Vector#to_vec3
　　Vector#to_vec4
　　　各Vectorに変換します

　　Vector#get(Integer)
　　Vector#[](Integer)
　　　Vectorの要素を取得します	　

　　Vector#set(Integer)
　　Vector#[](Integer)
　　　Vectorの要素をセットします

　　Vector#dot(Vector)
　　　Vectorの内積を計算します	　　

　　Vector#magnitude
　　　Vectorのmagnitudeを計算します	　　

　　Vector#length
　　　Vectorの長さを計算します	　　

　　Vector#normalize
　　　Vectorを単位長にします

　　Vector#negate
　　　Vectorを反転させます

　　Vector#dup
　　　Vectorの複製を作成します

　　Vector#copy(Vector)
　　　他Vectorから要素をコピーします

　　Vector#equal?(Vector)
　　Vector#==(Vector)
　　　他Vectorとの要素を比較します

　　Vector#almost_equal?(Vector,Float)
　　　他Vectorとの要素を比較しますが第二引数で誤差を指定できます

Vector2
　2次元のVector
　　Vector2.new(Array)
　　Vector2.new(Float,Float)
　　　Vector2を生成します

Vector3
　3次元のVector
　　Vector3.new(Array)
　　Vector3.new(Float,Float,Float)
　　　Vector3を生成します
　　
　　Vector3#xform_rot(Rotation)
　　Vector3#xform_rot!(Rotation)
　　　Vector3の回転変換を行います	　

　　Vector3#xform_rot(Matrix4)
　　Vector3#xform_rot!(Matrix4)
　　　Vector3にMatrix4の左上3x3を使った変換をします
　　　方向の変換を行います

　　Vector3#xform_pt(Matrix4)
　　Vector3#xform_pt!(Matrix4)
　　Vector3#xform(Matrix4)
　　　Vector3にMatrix4の第四列以外を使った変換をします
　　　位置の変換を行います

　　Vector3#xform_full(Matrix4)
　　Vector3#xform_full!(Matrix4)
　　　Vector3にMatrix4を使った変換をします
　　　投影変換を行います

　　Vector3#cross(Vector)
　　Vector3#cross!(Vector)
　　　Vectorの外積を計算します

Vector4
　4次元のVector
　　Vector4.new(Array)
　　Vector4.new(Float,Float,Float,Float)
　　　Vector4を生成します

　　Vector4#xform_full(Matrix4)
　　Vector4#xform_full!(Matrix4)
　　Vector4#xform(Matrix4)
　　　Vector4にMatrix4を使った変換をします
　　　投影変換を行います

Rotation
　回転変換オブジェクト
　いわゆるQuaternionです
　　Rotation.new
　　Rotation.new(Vector3,Float)
　　Rotation.new(Vector3,Vector3)
　　　Rotationを生成します

　　Rotation#vec_rot_vec(Vector3,Vector3)
　　　第一引数から第二引数への回転変換を生成します　

　　Rotation#mult(Rotation)
　　Rotation#mult!(Rotation)
　　Rotation#*(Rotation)
　　　Rotationに他Rotationに加えた変換をします	　

　　Rotation#set_axis(Vector3)
　　Rotation#get_axis(Vector3)
　　　回転軸を設定/取得します

　　Rotation#set_axis(Vector3)
　　Rotation#get_axis(Vector3)
　　　回転角を設定/取得します
　　　Radianで設定します

　　Rotation#slerp!(Rotation,Float)
　　Rotation#slerp(Rotation,Float)
　　　球線形変換を行います

　　Rotation#to_mat
　　Rotation#to_vec4
　　Rotation#to_a
　　　Matrix4/Vector4/配列に変換します

　　Rotation#invert!
　　Rotation#invert
　　　逆変換を取得します

　　Rotation#dup
　　　Rotaionを複製します

　　Rotation#copy(Rotation)
　　　Rotaionをコピーします

　　Rotation#equal?(Rotation)
　　Rotation#==(Rotation)
　　　他Rotationとの要素を比較します

　　Rotation#almost_equal?(Rotation,Float)
　　　他Rotationとの要素を比較しますが第二引数で誤差を指定できます

Matrix4
　4x4の変換行列
　　Matrix4.new
　　Matrix4.new(Array)
　　　指定要素での変換行列を生成します
　
　　Matrix4.ident
　　Matrix4.scale(Float,Float,Float)
　　Matrix4.rotate(Vector,Float)
　　Matrix4.translate(Float,Float,Float))
　　　指定された変換をもつMatrix4を生成します

　　Matrix4#ident
　　　単位行列にします

　　Matrix4#add!(Matrix4)
　　Matrix4#add(Matrix4)
　　Matrix4#+(Matrix4)
　　　行列の各要素を加算します

　　Matrix4#sub!(Matrix4)
　　Matrix4#sub(Matrix4)
　　Matrix4#-(Matrix4)
　　　行列の各要素を減算します

　　Matrix4#pre_mult(Matrix4)
　　Matrix4#pre_mult!(Matrix4)
　　　other*selfの変換を行います	

　　Matrix4#post_mult(Matrix4)
　　Matrix4#post_mult!(Matrix4)
　　Matrix4#*(Matrix4)
　　　self*otherの変換を行います	

　　Matrix4#get_row(Integer)
　　Matrix4#set_row(Integer,Array)
　　　指定行を設定/取得します　

　　Matrix4#get_column(Integer)
　　Matrix4#set_column(Integer,Array)
　　　指定列を設定/取得します　

　　Matrix4#get_element(Integer,Integer)
　　Matrix4#set_element(Integer,Integer,Float)
　　Matrix4#[](Integer,Integer)
　　Matrix4#[]=(Integer,Integer,Float)
　　　指定要素を設定/取得する	　

　　Matrix4#invert_orthoN
　　Matrix4#invert_orthoN!
　　　行列の左上3x3が正規直行行列とみなして逆行列を取得します

　　Matrix4#invert_ortho
　　Matrix4#invert_ortho!
　　　行列の左上3x3が直行行列とみなして逆行列を取得します

　　Matrix4#invert_ortho
　　Matrix4#invert_ortho!
　　　行列をアフィン変換とみなして逆行列を取得します

　　Matrix4#invert_full
　　Matrix4#invert_full!
　　Matrix4#inv
　　　行列の逆行列を取得します

　　Matrix4#fill(Float)
　　　行列の要素すべてを指定値で埋めます
　　　
　　Matrix4#det
　　Matrix4#determinant
　　　行列式を取得します

　　Matrix4#det3
　　　左上3x3の行列式を取得します

　　Matrix4#singular
　　　行列が

　　Matrix4#transpose
　　Matrix4#transpose!
　　　行列の転置を行います

　　Matrix4#to_rot
　　Matrix4#to_a
　　　行列をRotation/配列に変換します

　　Matrix4#dup
　　　行列を複製します

　　Matrix4#copy(Matrix4)
　　　他行列の要素をコピーします

　　Matrix4#equal?(Matrix4)
　　Matrix4#==(Matrix4)
　　　各要素値を比較します	　
　　
　　Matrix4#almost_equal?(Matrix4,Float)
　　Matrix4#==(Matrix4)
　　　各要素値を比較しますが第二引数で誤差を指定できます
　　
LineSeg
　線分を表現するクラス　　

　　LineSeg.new
　　LineSeg.new(Vector3,Vector3,Float)
　　　線分を生成します
　　　引数は始点、方向、長さです

　　LineSeg.polar(Vector3,Float,Float,Float)
　　　線分を生成します
　　　引数は線分始点位置、x方向回転、ｚ方向回転、長さです

　　LineSeg.points(Vector3,Vector3)
　　　線分を生成します
　　　引数は始点位置、終点位置です

　　LineSeg#origin
　　LineSeg#origin=
　　　始点位置を設定/取得します

　　LineSeg#length
　　LineSeg#length=
　　　長さを設定/取得します

　　LineSeg#dir
　　LineSeg#dir=
　　　方向を設定/取得します

　　LineSeg#dup
　　　LineSegを複製します

　　LineSeg#clip(Float,Float)
　　LineSeg#clip!(Float,Float)
　　　始点を0.0、終点を1.0として新たに指定された始点/終点でLineSegを生成する　
　　　
　　LineSeg#xform(Matrix4)
　　LineSeg#xform!(Marix4)
　　　線分の変換を行います
　　　
Plane
　面を表現するクラス

　　Plane.new
　　Plane.new(Float,Float,Float,Float)
　　　Planeを生成します

　　Plane.points(Vector3,Vector3,Vector3)
　　　Planeを生成します
　　　指定された3点を含むPlaneを生成します　

　　Plane.norm_point(Vector3,Vector3)
　　　Planeを生成します
　　　引数は法線と面上の点です

　　Plane#offset
　　Plane#offset=
　　　面のオフセット位置を設定/取得します

　　Plane#normal
　　Plane#normal=
　　　面の法線ベクトルを設定/取得します

　　Plane#dup
　　　Planeを複製します

　　Plane#distance(Vector3)
　　　指定点との距離を取得します　

　　Plane#isect(LineSeg)
　　　線分と面が交わっているかを取得します
　　　交わっている場合、線分の交差位置を0.0-1.0で返します
　　　交わらない場合、falseを返します

　　Plane#xform!(Matrix4)
　　Plane#xform(Matrix4)
　　　面の変換を行います

Bound
　バウンディングボックスを表現するクラス

　　Bound.new
　　Bound.new(Array)
　　　Boundを生成します
　　　指定されたすべての点を含むBoundを生成します

　　Bound#min
　　Bound#min=
　　　Boundの最小座標位置を設定/取得します

　　Bound#max
　　Bound#max=
　　　Boundの最大座標位置を設定/取得します

　　Bound#center
　　　Boundの中心座標を取得します

　　Bound#size
　　　Boundの大きさを取得します

　　Bound#dup
　　　Boundを複製します

　　Bound#empty
　　　大きさを持たないBoundに設定します

　　Bound#empty?
　　　大きさを持っているかをチェックします

　　Bound#around(Array)
　　　指定されたVector3/Boundを囲むBoundに設定します

　　Bound#extend_by(Array)
　　　指定されたVector3/Boundを囲むよう、Boundを拡張します

　　Bound#contains?(Vector3)
　　Bound#contains?(Bound)
　　　指定されたVector3/Boundが含まれている/交差しているかをチェックします
　　　含まれていない場合、false
　　　すべて含まれている場合、IN_ALL
　　　交差している場合、IN_MAYBE
　　　を返します

　　Bound#isect(LineSeg)
　　　線分とBoundが交わっているかを取得します
　　　交わっている場合、線分の交差位置を0.0-1.0で返します
　　　交わらない場合、falseを返します

　　Bound#xform!(Matrix4)
　　Bound#xform(Matrix4)
　　　Boundの変換を行います

FrustumModule
　視錐体を処理するモジュールです

　　FrustumModule#contains?(Bound)
　　FrustumModule#contains?(Vector3)
　　　指定されたVector3/Boundが含まれている/交差しているかをチェックします
　　　含まれていない場合、false
　　　すべて含まれている場合、IN_ALL
　　　交差している場合、IN_MAYBE
　　　を返します

　　FrustumModule#near
　　　near面の距離を取得します

　　FrustumModule#far
　　　far面の距離を取得します

　　FrustumModule#near_cornar
　　　near面の4点を取得します

　　FrustumModule#far_cornar
　　　far面の4点を取得します

Frustum
　透視投影の視錐体を表現するクラスです
　FrustumModuleをincludeしています

　　Frustum.make_persp
　　Frustum.make_persp(Float,Float,Float,Float)
　　　Frustumを指定画角で生成します
　　　引数はVFOV,HFOV,near,farです

　　Frustum.make_frust(Float,Float,Float,Float,Float,Float)
　　　Frustumを生成します
　　　引数はleft,right,bottom,top,near,farです

　　Frustum#proj_mat
　　　投影変換Matrixを取得します

　　Frustum#near=
　　　near面の距離を設定します

　　Frustum#far=
　　　far面の距離を設定します

　　Frustum#set_corners
　　　near面の各位置を設定します

Ortho
　平行投影の視錐体を表現するクラスです
　FrustumModuleをincludeしています

　　Ortho.new(Float,Float,Float,Float)
　　Ortho.new(Float,Float,Float,Float,Float,Float)
　　　Frustumを生成します
　　　引数はleft,right,bottom,top,near,farです
　　　
　　Ortho#proj_mat
　　　投影変換Matrixを取得します

　　Ortho#near=
　　　near面の距離を設定します

　　Ortho#far=
　　　far面の距離を設定します

　　Ortho#set_corners
　　　near面の各位置を設定します

