私は、いくつかのパーティクルが相互作用している力ベースの物理シミュレーションをモデリングしています。パーティクルは、静的ビューポートがそれらのトラックを簡単に失うように移動できます(パーティクルのグループ全体が画面から右に移動し、ビューポートが空白の背景を表示していることを想像してください)。重心のビューポートでオブジェクトを移動する
私の現在の解決策は、xとyの最小/最大を見つけて、ビューポートの中央をそれに追従させることによって、粒子の「中心」を単に追跡することです。それは正常に動作します(真の重心を見つける必要はありません)。ここでは、視覚的です:
私の問題は、私は手動でマウスを使って周りの粒子をドラッグする機能を追加しようとしています。私はこれを行うエレガントな方法を発見していない。問題は、ビューポートが粒子の中心をたどるため、ビューポート座標とシミュレーション座標の間の変換が絶えず変化することです。
私は粒子上にマウスを置くと、シミュレーションで固定された位置にしたい(それはその上のすべての力を無視する)。ボタンを押したままマウスを動かすと、シミュレーションで粒子が動くようになります。私はこれを達成しました。しかし、ビューポートとまだ動いている他のパーティクルのために不快な副作用を引き起こします。マウスが押し下げられて静止しているにもかかわらず、パーティクルはシミュレーションで動いていませんが、パーティクルの中心が変わり、ビューポートがそれに応じて調整されるため、画面上を移動しています。カーソルは静止しているので、パーティクルはその下から移動します。マウスを少しだけ動かすと、カーソルの新しい位置が根本的に異なるシミュレーション座標を表すため、パーティクルはカーソルの下にテレポートします。
上記の副作用がなく、すばらしい一貫したユーザーエクスペリエンスの提案はありますか?マウスがダウン
- :私はすでに考えてきました
変更(本当に悪い)
しかし、それらはすべて他の悪い副作用やtを持っていますシミュレーションから離れた値。
また、私はこの質問は言語とプラットフォームに依存しないので、 "ビューポート"、 "ビューポート座標"、または "シミュレーション座標"にリテラルと実装固有の意味を付けないでください。一般的なグラフィックスの概念として扱います。
これは非常に興味深いです、私はそれを考えませんでした。マウスを下にすばやくジャンプしますが、パーティクルをドラッグしている間は楽しいです。私はあなたに戻ってくるでしょう:-) – colithium