• 締切済み

十進BASICでの衝突プログラミング

十進ベーシック超初心者です。二次元の箱の中に円を置き、そこで衝突を繰り返すプログラムをつくりたいのですが行き詰っています。 箱の中だけでの衝突は、以下のようにプログラムできたのですが、円にぶつかるときどのようにプログラムをくんで跳ね返させればいいかわかりません。どなたか教えて下さい。 SET WINDOW -20,20,-20,20 DRAW GRID(2,2) PLOT LINES: -10,-10 ;10,-10;10,10;-10,10;-10,-10 DRAW CIRCLE WITH SCALE (2) LET X=-10 LET Y=-10 LET T=0 LET V=4.53574748 LET A=56.654968 LET VX=COS(A) LET VY=SIN(A) 100 PLOT LINES:X,Y ; IF VX>0 THEN LET LX=20-(10+X) END IF IF VX<0 THEN LET LX=20-(10-X) END IF IF VY>0 THEN LET LY=20-(10+Y) END IF IF VY<0 THEN LET LY=20-(10-Y) END IF LET T=MIN(LX/ABS(VX),LY/ABS(VY)) LET X=VX*T+X LET Y=VY*T+Y IF T=LX/ABS(VX) THEN LET VX=-VX END IF IF T=LY/ABS(VY) THEN LET VY=-VY END IF GOTO 100 END

みんなの回答

noname#194317
noname#194317
回答No.1

円の大きさがわかっているなら、中心の座標が今どこにあるかを見張ることで、接触したかどうかの判定はできますけど、そういう問題ではないですか?座標系が100x100で中の円が直径20なら、円の中心座標がX>90またはX<10のとき、左右の壁に当たっていることになります。

gendoh
質問者

補足

回答ありがとうございます。 問題は、座標系が100x100の箱の中に、原点に直径20の固定された円(座標系、円の直径はこの値でなくてもいい)を置き、その箱の中で直径を考えない物体(レーザーのようなもの)を衝突させ続け、レーザーが通った後は黒く表示され、箱の中が真っ黒になっていく様子を見たいのです。直径20の円の中にはレーザーは入らず、円の中は真っ白なままです。ちょっと意味がわからないかもしれないですが、私がつくったプログラムをコピーして実行していただけたら、何がしたいかわかると思います。 私は、箱の中でレーザーを跳ね返させ続けるプログラムをつくることはできたのですが、原点に円を置き、そこにレーザーを跳ね返させるのに苦労しています。 レーザーが円にぶつかる時刻、ぶつかった後のレーザーの進む方向など、どうプログラムをくめばいいかわかりません。

関連するQ&A