CreateLimitは可動範囲制約オブジェクトのディスクリプタを引数にとります. 自由度関節の可動範囲制約の場合,Vec2d rangeが可動域を表します.range[0]が可動域の下限,range[1]が上限です.range[0] < range[1]が満たされているときに限り可動範囲制約が有効となります. デフォルトではrange[0] > range[1]となる値が設定されていて,可動範囲制約は無効となっています.
関節の変位が可動範囲限界に到達したとき,範囲を超過しないように可動範囲制約の拘束力が作用します. このとき,関節変位を範囲内に押し戻す力はバネ・ダンパモデルで計算されます. このバネ係数とダンパ係数はそれぞれディスクリプタのspring,damperで指定します.
= =0trueptPH1DJointLimitDescクラス height0.75pt
可動範囲を表します.range[0]が下限,range[1]が上限です.
可動範囲を制限するためのバネ・ダンパモデルの係数です.
= =0trueptPH1DJointLimitIfクラス height0.75pt
現在の関節姿勢が可動範囲外にある時にtrueを返します.この関数がtrueを返すような時,関節には可動域制約を実現するための拘束力が発生しています.
ボールジョイントの可動範囲はFig #.#.#(b)に示すSwing-Twist座標系によって指定します.
ボールジョイントに対しては2種類の可動範囲制約を使用することができます.
ConeLimitは円錐形の可動範囲制約で,主に関節のスイング角を一定範囲内に制約します.
SplineLimitは自由曲線形の可動範囲制約で,プラグ座標系z軸の可動範囲を閉曲線で指定することができます.
ここではConeLimitについて説明します(SplineLimitについては後述します).
= =0trueptPHBallJointConeLimitDescクラス height0.75pt
スイング角の可動範囲です.概念的には,関節が一定以上に折れ曲がらないようにする制約です(スイング角の下限を設定する事もできるので,実際には一定以上にまっすぐにならないようにする機能も有しています).
limitSwing[0]が下限,limitSwing[1]が上限です.limitSwingを取得・設定するためのAPIは
PHBallJointConeLimitIf::[Set]SwingRange(range)
です.
limitSwing[0] > limitSwing[1]となる時は無効化されます.デフォルトではlimitSwing[0] > limitSwing[1]となる値がセットされています.
ツイスト角の可動範囲です.概念的には,関節が一定以上にねじれないようにするための制約です.
limitTwist[0]が下限,limitTwist[1]が上限です.limitTwistを取得・設定するためのAPIは
PHBallJointConeLimitIf::[Set]TwistRange(range)
です.
limitTwist[0] > limitTwist[1]となる時は無効化されます.デフォルトではlimitTwist[0] > limitTwist[1]となる値がセットされています.
可動範囲を制限するためのバネ・ダンパモデルの係数です.自由度関節の場合と同じです.
= =0trueptPHBallJointConeLimitIfクラス height0.75pt
現在の関節姿勢が可動範囲外にある時にtrueを返します.自由度関節の場合と同じです.