逆運動学を使って 2D ゲームを書いています。私はこの単純なアルゴリズムを使用しています:
let angleToParent = angleBetweenPoints(parent, child)
child.x = parent.x + distance*Math.cos(angleToParent)
child.y = parent.y + distance*Math.sin(angleToParent)
child.rotation = angleToParent
チャイルドに角度制約を実装する方法は?
親の回転が 180 度を超えると、このコードは正しく動作しません。
let implementBound = (lowerBound, upperBound, input) => {
return Math.min(Math.max(lowerBound, input), upperBound)
}
let constraint = (Math.PI/180)*15
let left = parent.rotation - constraint
let right = parent.rotation + constraint
angleToParent = implementBound(left, right, angleToParent)