コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
こういち ◆ou0jbJnEJ0Kb
2019/2/12 12:02 ネタバレ
ACLS
OPTION STRICT
XSCREEN 1
VAR N=2,I
VAR K=9e9,M=9e-31
VAR Q=1.6e-19
DIM VI[N],VJ[N]
DIM X[N],Y[N]
DIM SIGN[N]

DEF MOVE
 VAR SP=CALLIDX
 VAR SPDI=VI[SP],SPDJ=VJ[SP]
 VAR MX=X[SP],MY=Y[SP]
 VAR I=SP-1
 MX=(MX+SPDI+400)MOD 400
 MY=(MY+SPDJ+240)MOD 240
 WHILE I
  VAR DVI=X[I]-MX,DVJ=Y[I]-MY
  VAR R=SQR(DVI*DVI+DVJ*DVJ)
  IF R!=0THEN
   DVI=100*DVI*K*Q*Q/R/R/R/M
   DVJ=100*DVJ*K*Q*Q/R/R/R/M
   IF SIGN[SP]!=SIGN[I]THEN
    SPDI=SPDI+DVI
    SPDJ=SPDJ+DVJ
    DEC VI[I],DVI
    DEC VJ[I],DVJ
   ELSE
    SPDI=SPDI-DVI
    SPDJ=SPDJ-DVJ
    INC VI[I],DVI
    INC VJ[I],DVJ
   ENDIF
  ENDIF
  I=I-1
 WEND
 SPOFS SP,MX,MY
 X[SP]=MX:Y[SP]=MY
 VI[SP]=SPDI:VJ[SP]=SPDJ
END
FOR I=0 TO N-1
 SPSET I,6
 SPHOME I,8,8
 X[I]=RND(400)
 Y[I]=RND(240)
 VI[I]=2*RNDF()-1
 VJ[J]=2*RNDF()-1
 SIGN[I]=RND(2)-1
 SPFUNC I,"MOVE"
NEXT I

REPEAT
 WAIT 1
 CALL SPRITE
UNTIL(BUTTON(2)AND 128)==128

コメント

アバター
つちのこ 2019/2/12 12:07 ◆h2Oy7FZkRC90
ここはプチコンじゃないです。フチバースです。
アバター
こういち 2019/2/12 12:11 ◆ou0jbJnEJ0Kb
確かに。
ちょっといいコード書けたので公開したかったんだけどな。
アバター
BlackSoft 2019/2/12 18:32 ◆SobaeWJUXPfD
脳内RUN
クーロンの法則に従って互いに影響を受け合う荷電粒子2粒。のシミュレーションですね。処理数が個数の2乗だから、10個くらいになるとかなり重そうですね。

ソースコードだって立派にプチコンの投稿です。個人的には有り。
あまり長いのは問題ですが。
アバター
うょリウム(元 SPDX) 2019/2/13 0:20 ◆UTOEg1c1vr.B
5行目で頭がオーバーフローしました。ぎゃー。
アバター
こういち 2019/2/13 17:16 ◆ou0jbJnEJ0Kb
BSさん
そのとーり。
処理が重いのはちょっと気にしてました。
とは言え100個ぐらいまでは行けるとおもったんですけどね。
ビットボードとか使って高速化出来ないかな。(定数倍エグくて逆に重くなるパターン)
うょリウムさん
5行目の9e9は
9*pow(10,9)って意味です。
もうちょい分かりやすく書くと
9000000000
まぁ単なる数値なので深い意味はない。

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -