PhysObjectクラス

物理シミュレーション環境構築用HTML5フレームワーク「physics.js」を用いて、 仮想物理実験室に登場する全ての3次元オブジェクトの基底となるクラスです。球体や立方体といった3次元オブジェクトの描画だけでなく、ベルレ法に基づく時間発展を実装したメソッドなど、物理シミュレーションに不可欠な演算を定義します。ほとんどのプロパティとメソッドは「【書籍】HTML5による物理シミュレーション【剛体編2】(発売日:2015年春)」「【書籍】HTML5による物理シミュレーション【剛体編】(2014年8月24日)」で定義したものと同じですが、異なる場合もあります。

クラスプロパティ

プロパティ データ型 デフォルト 説明
id <int> 0 生成する3次元オブジェクトの識別番号を与えるための番号。3次元オブジェクトが生成されるごとにインクリメントされる。生成した3次元オブジェクトの数と一致する。

プロパティ

プロパティ名 データ型 デフォルト 説明
r < Vector3 > new THREE.Vector3 () 位置ベクトル。
v < Vector3 > new THREE.Vector3 () 速度ベクトル。
a < Vector3 > new THREE.Vector3 () 加速度ベクトル。
r_1 < Vector3 > new THREE.Vector3 () ステップ数「step-1」時の位置ベクトル。ベルレ法アルゴリズムで利用。
r_2 < Vector3 > new THREE.Vector3 () ステップ数「step-2」時の位置ベクトル。ベルレ法アルゴリズムにて衝突時に利用。
v_1 < Vector3 > new THREE.Vector3 () ステップ数「step-1」時の速度ベクトル。ベルレ法アルゴリズムにて衝突計算に利用。
v_2 < Vector3 > new THREE.Vector3 () ステップ数「step-2」時の速度ベクトル。ベルレ法アルゴリズムにて衝突計算に利用。
dynamic <bool> false 時間発展の有無を指定するブール値。
visible <bool> true 描画の有無を指定するブール値。非表示の場合でもオブジェクトの運動並びに衝突判定を行う。
mass <float> 1.0 質量。
recordData <bool> false 運動の記録を行うかを指定するブール値。
step <int> 0 オブジェクト内部時間ステップ数。衝突判定時に一度に数ステップ進める必要があるため、仮想物理実験室の時間ステップを表すPHYSICS.PhysLabクラスのstepプロパティとずれる場合がある。
skipRecord <int> 100 運動記録の間引回数。
draggable <bool> false 3次元オブジェクトのマウスドラックによる移動の有無を指定するフラグ。本フラグが立つ場合、マウスドラックによる演算に必要なバウンディングボックスが生成される。
allowDrag <bool> false 3次元オブジェクトのマウスドラックによる移動の許可を与えるフラグ。本フラグは、3次元オブジェクト生成時にdraggableプロパティがtrueと与えられている必要がある。
rotationXYZ <bool> false 頂点座標を指定する際に、全ての頂点座標を(x,y,z)から(z,x,y)へローテーションを行うかを指定するブール値。
collision <bool> false 衝突判定の対象とするかを指定するブール値。
collisionGroups [<int>] [] 衝突計算グループを指定する配列。同じグループに所属する3次元オブジェクト同士のみが衝突計算の対象となる。本プロパティを指定されていない場合には全ての衝突計算対象の3 次元オブジェクトとの衝突計算を行う。
e <float> 1.0 反発係数。
axis < Vector3 > new THREE.Vector3 (0,0,1) 姿勢軸ベクトルの初期値。
angle <float> 0 回転角の初期値。
quaternion < Quaternion> new THREE.Quaternion() 姿勢を表すクォータニオン。axisプロパティとangleプロパティより初期値が計算される。
material <object> {
type : "Lambert",
shading : "Flat",
side : "Front",
color : 0xFF0000,
ambient : 0x990000,
opacity : 1.0,
transparent : false,
emissive : 0x000000,
specular : 0x111111,
shininess : 30,
castShadow : false,
receiveShadow : false,
depthWrite : true,
depthTest : true,
textureWidth : 256,
textureHeight : 256,
blending : null,
bumpScale : 0.05,
vertexColors: false
}
3次元グラフィックス材質関連パラメータを格納したプロパティ。
type : 材質の種類 ( "Basic" | "Lambert" | "Phong" | "Normal")
shading : シェーディングの種類 ( "Flat" | "Smooth" )
side : 描画する面 ( "Front" | "Back" | "Double")
color : 反射色(発光材質の場合:発光色)
ambient : 環境色
opacity : 不透明度
transparent : 透過処理
emissive : 反射材質における発光色
specular : 鏡面色
shininess : 鏡面指数
castShadow : 影の生成
receiveShadow : 影の映り込み
depthWrite : デプスバッファ書き込みの可否
depthTest : デプステスト実施の有無
textureWidth : 動的テクスチャ生成時の横幅
textureHeight : 動的テクスチャ生成時の縦幅
blending : ブレンディングの種類 ( "No" | "Normal" | "Additive" | "Subtractive" | "Multiply" | "Custo" )
bumpScale : バンプの大きさ
vertexColors: 頂点色利用の有無
locus <object> {
enabled : false,
visible : false,
color : null,
maxNum : 1000,
}
軌跡の可視化関連パラメータを格納したプロパティ。
enabled : 可視化の有無
visible : 表示・非表示の指定
color : 発光色
maxNum : 軌跡ベクトルの最大配列数
velocityVector <object> {
enabled : false,
visible : false,
color : null,
scale: 0.5,
}
速度ベクトルの可視化関連パラメータを格納したプロパティ。
enabled : 可視化の有無
visible : 表示・非表示の指定
color : 発光色
scale : 矢印のスケール
boundingBox <object> {
visible : false,
color : null,
opacity : 0.2,
transparent : true,
draggFlag : false
}
バウンディングボックスの可視化関連パラメータを格納したプロパティ。
visible : 表示・非表示の指定
color : 発光色
opacity : 不透明度
transparent : 透過処理
draggFlag : マウスドラック状態かを判定するフラグ(内部)
boundingSphere <object> {
enabled : false,
visible : false,
color : null,
opacity : 0.2,
transparent : true,
widthSegments : 40,
heightSegments :40
}
バウンディング球の可視化関連パラメータを格納したプロパティ。
visible : 表示の有無
color : 発光色
opacity : 不透明度
transparent : 透過処理
widthSegments : y軸周りの分割数
heightSegments : y軸上の正の頂点から負の頂点までの分割数
strobe <object> {
enabled : false,
visible : false,
color : null,
transparent : true,
opacity : 0.5,
maxNum : 20,
skip : 10,
velocityVectorEnabled : false,
velocityVectorVisible : false
}
ストロボ表示の可視化関連パラメータを格納したプロパティ。
enabled : ストロボ撮影の有無
visible : 表示・非表示の指定
color : 描画色
transparent : 透明化
opacity : 透明度
maxNum : ストロボオブジェクトの数
skip : ストロボの間隔
velocityVectorEnabled : 速度ベクトルの利用
velocityVectorVisible : 速度ベクトルの表示
path <object> {
enabled : false,
visible : false,
color : null,
type: "LineBasic",
dashSize : 0.2,
gapSize : 0.2,
parametricFunction : {
enabled : true,
pointNum : 100,
theta : { min:0, max: 1 },
position : null,
tangent : null,
curvature : null,
getTheta : null
},
restoringForce : {
enabled : false,
k : 1.0,
gamma : 0.01
}
}
3次元オブジェクトの運動経路を指定するのに必要となるパラメータが格納されたプロパティ。
enabled : 経路指定の有無
visible : 表示・非表示の指定
color : 描画色
type : 線の種類( "LineBasic" || "LineDashed")
dashSize : 破線の実線部分の長さ
gapSize : 破線の空白部分の長さ
parametricFunction : { //媒介変数に関するプロパティ
enabled : 媒介変数関数設定の有無
pointNum : 経路の描画点の数
theta : 媒介変数の範囲( { min, max})
position : 頂点座標を指定する媒介変数関数
tangent : 接線ベクトルを指定する媒介変数関数
curvature : 曲率ベクトルを指定する媒介変数関数
getTheta : 媒介変数の取得
}
restoringForce : { //復元力に関するプロパティ
enabled : 拘束状態への復元の有無
k : 復元力のばね定数
gamma : 復元力の減衰係数
}
beforeCreateFunctions
afterCreateFunctions
beforeUpdateFunctions
afterUpdateFunctions
beforeTimeEvolutionFunctions
afterTimeEvolutionFunctions
dynamicFunctions
[<function>] [] 対応する各通信メソッド内で実行する関数を格納する配列。

内部プロパティ

プロパティ名 データ型 デフォルト 説明
id <int> 生成された仮想物理実験室オブジェクトの識別番号。
data <object> {} 運動の記録を格納するオブジェクト。
x : x座標
y : y座標
z : z座標
vx : 速度のx成分
vy : 速度のy成分
vz : 速度のz成分
kinetic : 運動エネルギー
potential : ポテンシャルエネルギー
energy : 力学的エネルギー
collisionHistory : 衝突履歴
geometry <object> {} 3次元グラフィックスの形状オブジェクト関連のオブジェクトが格納されるプロパティ。
CG <.Mesh > null 仮想物理実験室内に描画する3次元グラフィックス。
physLab <.PhysObject > null 演算を行う仮想物理実験室。本オブジェクトの運動はここで指定した実験室のパラメータに依存する。
children [<PhysObject>] [] 子要素として格納する3次元オブジェクト。
parent <.PhysObject > null 所属する3次元オブジェクト。
_vertices [<Vector3 >] [] 頂点座標の初期値。
vertices [<Vector3 >] [] 頂点座標の現在の値。
colors [<Color>] [] 頂点色。
faces [[<int>]](※1) [] 面を構成する頂点番号。
tangents [<Vector3 >] [] 面の接線ベクトル。
normals [<Vector3 >] [] 面の法線ベクトル。
collisionObjects [<PhysObject>](※2) [] 本オブジェクトに衝突したオブジェクトを格納する配列。
collisionForce <Vector3 > null getCollisionForceメソッドで計算した衝突力が格納されるプロパティ。
contactForce <Vector3 > null getContactForceメソッドで計算した接触力が格納されるプロパティ。
copyPropertyList [<string>] [] コピー対象プロパティリスト。

メソッド

メソッド名 引数 戻値 説明
setParameter ( parameter ) <object> なし コンストラクタで指定した各種パラメータをオブジェクトのプロパティの値へ反映する。
resetParameter ( parameter ) <object> なし 各種パラメータの再設定を行う。それと同時に各種時系列データの初期化、ベルレ法で必要な初期値の計算も行う。
getProperty ( ) なし <object> 3次元オブジェクトの完全コピーを生成するために必要なプロパティを取得するためのメソッド。
clone ( ) なし <PhysObject> 3次元オブジェクトの完全コピーを生成するメソッド。
getClassName ( ) なし <string> 3次元オブジェクト自身のクラス名を取得するメソッド。
create3DCG ( ) なし なし 仮想物理実験室内で描画する3次元グラフィックスを生成するメソッド。
getMaterial ( material, parameter ) <string>
<object>
<Material> 引数で指定した材質の種類(material)と材質パラメータ(parameter)を用いて、three.jsの材質オブジェクトを生成し返。もし引数に何も与えない場合には、本メソッドを呼び出したオブジェクトに格納されている関連プロパティをそのまま適用する。
create( ) なし なし 3 次元オブジェクトを生成するメソッド。
update( ) なし なし 3 次元オブジェクトの位置、姿勢を元に、描画する3 次元グラフィックス(CGプロパティ) の更新を行うメソッド。
updateLocus ( color ) <hex> なし 3次元オブジェクトの軌跡オブジェクトを更新するメソッド。引数でHEX形式の色が指定された場合、指定された色を優先。
updateBoundingBox ( )
updateVelocityVector ( color, scale ) <hex>
<float>
なし 3次元オブジェクトの速度ベクトルオブジェクトを更新するメソッド。引数でHEX形式の色あるいはスケールが指定された場合、指定された値を優先。
timeEvolution ( ) なし なし 3次元オブジェクトの時間発展を計算するメソッド。仮想物理実験室オブジェクトの同名のメソッド内で呼び出される。
computeTimeEvolution( dt ) <float> なし ベルレ法に基づいて引数で与えた時間発展を行うためのメソッド。
getForce( ) なし <Vector3> 3次元オブジェクトに加わる力を与えるメソッド。本実験室では重力+拘束力が返される。また、オーバーライドすることで任意の力を与えることができる。
getBindingForce ( ) なし <Vector3> 3次元オブジェクトの運動が指定した経路に拘束される場合、その拘束力を計算するメソッド。
computeInitialCondition( ) なし なし ベルレ法にて計算開始するために必要な初期状態を計算するメソッド。
getEnergy ( ) なし { kinetic:<float>, potential: <float> } 3次元オブジェクトの力学的エネルギーを取得するメソッド。kinetic プロパティとpotential プロパティが格納されたオブジェクトリテラルで返される。
initDynamicData ( ) なし なし 3 次元オブジェクトの位置ベクトル・速度ベクトル・各種エネルギーの時系列データを格納する配列の初期化を行うメソッド。
recordDynamicData ( ) なし なし 3 次元オブジェクトの運動に関する、位置ベクトル、速度ベクトル、各種エネルギーの時系列データを配列形式で保存するメソッド。
getDynamicData ( ) なし {
x:[<Vector3>],
y:[<Vector3>],
z:[<Vector3>],
vx:[<Vector3>],
vy:[<Vector3>],
vz:[<Vector3>],
kinetic:[<Vector3>],
potential:[<Vector3>],
}
3次元オブジェクトの運動に関する時系列データを取得するメソッド。
beforeCreate ()
afterCreate ()
beforeUpdate ()
afterUpdate ()
beforeTimeEvolution ()
afterTimeEvolution ()
なし 仮想物理実験室内の外部との情報のやりとりを行うメソッド(通信メソッドと呼ぶ)。主要メソッド内の始めと終わりで実行され、実験室内の3次元オブジェクトの状態の把握や外界からの操作を行うために利用することができる。
initQuaternion() なし なし 姿勢を表すクォータニオンを計算するメソッド。
resetAttitude( axis,
theta )
<Vector3>
<float>
なし 3次元オブジェクトの姿勢を引数で与えた姿勢軸ベクトル(axis)と回転角度(theta)に再設定するメソッド。内部プロパティである姿勢を表すクォータニオンquaternionプロパティの再設定を行う。
rotation( axis,
theta )
<Vector3>
<float>
なし 3次元オブジェクトを引数で与えた回転軸ベクトル(axis)に対して回転角度(theta)回転させるためのメソッド。内部プロパティである姿勢を表すクォータニオンquaternionプロパティを更新する。
initVectors ( ) なし なし 平面領域が存在する3次元オブジェクトにて、法線ベクトルや接線ベクトルなどのプロパティを初期化するためのメソッド。
computeVectors ( ) なし なし 3 次元オブジェクトの移動や回転によって、頂点座標、法線ベクトル、接線ベクトルを更新するメソッド。
getCollisionForce ( ) なし <Vector3> 衝突によって生じる力を計算するメソッド。戻り値として衝突力ベクトルを返す。
getContactForce ( ) なし <Vector3> 接触によって生じる力を計算するメソッド。戻り値として接触力ベクトルを返す。
timeEvolutionOfCollision ( ) なし なし 衝突時の時間発展を行うメソッド。
computeCenterPosition() なし なし faces プロパティで指定された面の中心座標を計算し、centerPosition プロパティに格納するメソッド。
computeFacesBoundingSphereRadius ( ) なし なし 3次元オブジェクトに存在するポリゴン面(三角形)ごとのバウンディング球の半径を計算するメソッド。計算結果はfacesBoundingSphereRadiusプロパティに格納される。
computeCenterOfGeometry ( ) なし なし 3次元オブジェクトの中心座標を計算し、centerOfGeometryプロパティに格納するメソッド。ポリゴンオブジェクトの様に多数の面で構成される場合は各ポリゴン面の大きさを考慮、点オブジェクトや線オブジェクトのように場合には、頂点座標の単純加算平均を計算。
setVertices ( vertices ) [<object>] なし 引数で指定した頂点座標配列verticesを、本クラスのverticesプロパティに格納するためのメソッド。
setFaces ( faces ) [[]] なし 引数で指定した頂点指定配列facesを、本クラスのfacesプロパティに格納するためのメソッド。
setColors ( colors ) <array> なし 引数に与えた頂点色配列を3次元オブジェクトの頂点色を格納するcolorsプロパティに与えるメソッド。指定する色の形式はHEX形式に加えRGB形式とHSL形式も可能。
loadJSON( filePath ) <string> なし 引数で指定したJSON形式のファイルを読み込んで、3次元オブジェクトを生成する。
setVerticesAndFacesFromGeometry ( geometry ) <Geometry> なし 引数で指定したthree.jsの形状オブジェクト(Geometryクラス)からポリゴンオブジェクトの頂点座標と面指定配列を指定するためのメソッド。