これは、Python を使用したコンピューター サイエンスの課題です。画面上を転がる正方形またはボックスを作成するためのアルゴリズムの作成をどこから開始するか知っている人はいますか? そして、私は確かにスライドではなくロールを意味します. 必ずしも python を使用する必要はありません。座標がどのように機能するかについての一般的なアイデアと一般的なアルゴリズムが必要です。
3 に答える
単位正方形が 1 つの辺が x 軸に置かれ、右下隅が (xs, 0) にある場合、時計回りに 4 分の 1 回転すると、再び 1 つの辺が x 軸に置かれ、右下隅が下になります。右隅 (xs+1, 0) になりました。回転する前に、左下隅に a というラベルを付けます。左上、b。そして右上、c。角 a と c は、正方形が回転するにつれて、単位円の円弧に沿って移動します。コーナー b は半径 d = sqrt(2) で移動します。
これは次の方法につながります: ステップ角 t を 0 から pi/2 (つまり 90°) まで、次のようにし
ます。 • xa = xs - cos t
• ya = sin t
• xb = xs - d*cos(t+pi/4)
• yb = d*sin(t+pi/4)
• xc = xs + sin t
• yc = コスト t
各時間ステップで、背景色の線を描画して古い正方形を消去し、方程式から新しい (xa,ya,xb,yb,xc,yc) を計算し、(xs,0) から (xa,yb) までの線で新しい正方形を描画します) から (xc,yc) へ (xd,yd) から (xs,0) へ、そして適切な量の遅延を行います。t が pi/2 になるたびに、t を 0 に戻し、xs に 1 を加算します。正方形全体を消去してから新しい線を描く代わりに、古い線を 1 つ消去して 4 つの辺に新しい線を 1 つ描くことを試みることができることに注意してください。
私はまず、箱が 1 つの角を中心に 1 つの側面から次の側面に回転することを考え、次にこれらのステップを順番に組み合わせて、これに取り組みます。つまり、次のようなボックスがある場合
A ---- B
| |
C ---- D
右に転がると、最初に全体が D を中心に旋回します。
C - A
| |
| |
| |
| |
D - B
そのステップは、原点 D の周りのすべての点を 0 ~ 90 度の角度シータだけ時計回りに単純に回転させることです。質問者および/またはウィキペディアにそれを理解することを任せます;)。
ステップアウトを理解したら、回転の次の部分は同じですが、D ではなく B を中心に回転していることを除きます。これにより、次のようになります。
D ---- C
| |
B ---- A
したがって、大まかに言えば、最初に最新の「フラット」構成を把握し、次にどのコーナーが正面にあるかを把握し、次にどのように正方形が平らな状態になってからかなりの時間が経過しました。
おまけのヒントとして、divmod は、タイムスタンプをペアに分割するための Python の優れた関数です (どのステップにいるか、そのステップにどれくらい進んでいるか)。
別の方法として、pybox2d、pymunk、または別の物理エンジンを使用してすべての計算を行うことで、割り当ての精神を完全に壊すこともできます。次に、たくさんのボックスが転がり、互いに跳ね返る可能性があります:D