2

VPython を使用して仮想プール/ビリヤード ゲームを作成しています。より速くではなく、「時間」の dt 量ごとに位置を更新するようにしたいと思います (ループ時間を制限するために rate() を使用しています)。

位置の計算は、潜在的な衝突を先取りしています 0

例: dt=1 で、衝突を 0.25 秒で検出した場合、位置を 0.25 秒進め、新しい速度を計算し、次の 0.75 秒で衝突をチェックします。これは、現在のタイム ジャンプで衝突が検出されなくなるまで繰り返されます。次に、このオブジェクトの位置の変化を示したいと思います。(その後、 rate() は次回まで待機します)

私の質問は次のとおりです: sphere.position = sphere.position+sphere.velocity*t1 ---または--- 衝突を検出する前に、すべての位置と速度ベクトルをタプルに変更して元に戻すことにより、ベクトル計算を行う方が高速ですか?新しい t=t+dt 位置/速度値を割り当てる前に、ベクトルに変換し、次にベクトル計算を行い、次にタプルに変換してからベクトルに変換します。

ベクトルは変更可能なデータであるため、変換が必要です。したがって、値を新しい変数に取得して計算を実行すると、sphere.position の値が変更され、画面上の位置が更新されます。

基本的に、Vpython は位置を視覚的に更新している間、他のプロセスを保留にしますか、それとも数値が可能な限り高速に処理されている間、可能な限り高速に実行しますか?

もっと明確に説明する必要がある場合はお知らせください

編集:

これには安価なソリューションを使用できることに気付きました。

>>> h=vector(5,6,2)
>>> j=h
>>> j.mag*=2
>>> j
vector(10, 12, 4)
>>> h
vector(10, 12, 4)

上記のセグメントは、ベクトルを直接コピーするとどうなるかを示しています。ただし、コピー中に1を掛けると、技術的には値が変更されたため、新しいベクトルが作成されますが、数値的には同じです

>>> k=h*1
>>> k
vector(10, 12, 4)
>>> k*=2
>>> k
vector(20, 24, 8)
>>> h
vector(10, 12, 4)
4

0 に答える 0