問題:マウス入力をポイントとして円形パスに沿ってポイントを移動します。マウスの動き(python/pygame)を経由して円軌道に沿ってポイントを移動する
点を円軌道に沿って移動するには、center + math.sin || cos(angle)* radius方程式を使用して角度を増やす方法がたくさんあります。ただし、これはマウス入力では機能しません。元のx/y値の一部であってもラジアンに変換された場合、「円」は一定の半径を持たず、パスポイントはマウスの位置と奇妙な関係で移動します。
パスポイント(円周上の点)を原点から特定の距離(強制半径)に制限する必要があるということです。私はまた、yのいずれかがxまたはxの関数である必要があるという感情をyの関数にする必要があります。
私は、距離の公式を使ってパスの点から円の中心までの距離を調べる道を踏み出しました。その考えは、xとyの値を許容距離 - 真の距離だけ「スナップ」することでしたが、それは...うまくいかなかったのです。すなわち、2点間の距離と2点間の差に違いがあるからです(どのようにを理解するのは、2点の違いによってベクトルが得られるということです)。とにかく、もっと簡単な解決策があると確信しています。
、マウスのX、Y円の原点であり、x、y座標を使用することができ
:残っている唯一のものは、マウスの距離や円半径との割合 あるスカラーを計算する です!三角関数は、ゼロ除算エラーを発生させました。これはおそらく、mousexとmouseyのすべての値が1に設定されている円の中心の周りに障壁を作ることでうまくいく可能性があります。私も感受性に遭遇しました - マウスを動かすと、これを改善するために方程式に角速度を含める方法がないのだろうかと思います。 @Meyer、これは素晴らしいです!ベクトルタプルの内部にある要素は何ですか? (名前があれば) –
また、トピックではなく、CENTER [0] + vector [0] * scalarはcenter + cos(theta)* radiusと同じ形式になっています。好奇心。 –
私は要素をベクトル座標またはベクトル成分として知っています。 ゼロ除算に関しては、私もそれを忘れて、 を忘れて、それに応じてコードを修正しました。 'satelliteCenter'は距離がゼロでないときにのみ更新されることに注意してください。はい、ベクトル間の角度の余弦との関係は、 たとえば[ベクトル投影](https://en.wikipedia.org/wiki/Vector_projection)のWikipediaの記事を参照してください。 – Meyer