|
|
|
2020/5/1(Fri) 15:33:37|NO.90253
; 円盤
diskBaseX = 200.0
diskBaseY = 200.0
diskCount = 30
dimtype diskRadius , vartype("double") , diskCount
dimtype diskRadian , vartype("double") , diskCount
dimtype diskRotationSpeed , vartype("double") , diskCount
repeat diskCount
diskRadius(cnt) = ( 80.0 / ( cnt + 1 ) )
diskRadian(cnt) = 0.0
diskRotationSpeed(cnt) = ( 5.0 + 1.0 * cnt )
loop
; 軌跡
trackMoveSpeed = 4.0
trackCount = ( GINFO_WINX - baseX )
dimtype trackDraw , vartype("int") , trackCount
dimtype trackPostion , vartype("double") , 2, trackCount
repeat trackCount
trackDraw(cnt) = 0
trackPostion( 0, cnt ) = double( baseX + radius(0) ), 0.0
loop
; メイン処理
time = 0
repeat
; 描画開始
redraw 0
; 背景
color 0, 0, 0
boxf
; 円盤描画
diskDrawX = diskBaseX
diskDrawY = diskBaseY
repeat diskCount
; 描画
color 255, 255, 255
circle ( diskDrawX - diskRadius(cnt) ), ( diskDrawY - diskRadius(cnt) ), ( diskDrawX + diskRadius(cnt) ), ( diskDrawY + diskRadius(cnt) ), 0
; 移動
diskRadian(cnt) = deg2rad(( 1.0 * time * diskRotationSpeed(cnt) ) \ 360.0 )
diskDrawX = ( diskDrawX + cos( diskRadian(cnt) ) * ( 0.8 * diskRadius(cnt) ) )
diskDrawY = ( diskDrawY + sin( diskRadian(cnt) ) * ( 0.8 * diskRadius(cnt) ) )
; 描画
diskDrawRadius = ( 1.0 + 0.1 * diskRadius(cnt) )
color 255, 0, 0
circle ( diskDrawX - diskDrawRadius ), ( diskDrawY - diskDrawRadius ), ( diskDrawX + diskDrawRadius ), ( diskDrawY + diskDrawRadius ), 1
loop
; 線描画
color 255, 255, 0
line diskDrawX, diskDrawY, ( diskBaseX + diskRadius(0) ), diskDrawY
; 軌跡追加
trackId = ( time \ trackCount )
trackPostion( 0, trackId ) = double( diskBaseX + diskRadius(0) ), diskDrawY
trackDraw(trackId) = 1 ; 念のため
; 軌跡描画
color 255, 0, 0
repeat trackCount
; 描画
if ( trackDraw(cnt) ) {
if ( cnt < ( trackCount - 1 ) ) {
; 線で結合
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, ( cnt + 1 ) ), trackPostion( 1, ( cnt + 1 ) )
} else {
; 最後は点
pset trackPostion( 0, cnt ), trackPostion( 1, cnt )
}
}
; 移動
trackPostion( 0, cnt ) += trackMoveSpeed
loop
; 描画終了
redraw 1
; タイマー
time++
await 16
loop
実行してもらうと分かると思いますが、邪魔な線が表示されます。
原因は配列の動きを脳内シュミレーションで理解しましたが
解決法が分からないので是非とも教えてほしいです。
| |
|
2020/5/1(Fri) 15:39:03|NO.90254
すいません
trackCount = ( GINFO_WINX - baseX )
ではなく
trackCount = ( GINFO_WINX - diskBaseX )
です。
|
|
2020/5/1(Fri) 15:44:24|NO.90255
よく見たら最後の線が切れてたので
pset trackPostion( 0, cnt ), trackPostion( 1, cnt )
ではなく
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, 1 ), trackPostion( 1, 1 )
です。
本当にすいません。
|
|
2020/5/1(Fri) 16:43:29|NO.90256
ちょっとプログラムの全容については把握していないのですが、
trackPostion( 0, trackId ) = double( diskBaseX + diskRadius(0) ), diskDrawY
これでtrackPostionの途中の部分が更新されているにもかかわらず、
更新前の座標と更新後の座標をlineで結んでいるので、邪魔な線が出るのではないかと。
こんな感じで↓修正してみましたが、どうでしょうか。
; 円盤
diskBaseX = 200.0
diskBaseY = 200.0
diskCount = 30
dimtype diskRadius , vartype("double") , diskCount
dimtype diskRadian , vartype("double") , diskCount
dimtype diskRotationSpeed , vartype("double") , diskCount
repeat diskCount
diskRadius(cnt) = ( 80.0 / ( cnt + 1 ) )
diskRadian(cnt) = 0.0
diskRotationSpeed(cnt) = ( 5.0 + 1.0 * cnt )
loop
; 軌跡
trackMoveSpeed = 4.0
trackCount = ( GINFO_WINX - diskBaseX )
dimtype trackDraw , vartype("int") , trackCount
dimtype trackPostion , vartype("double") , 2, trackCount
repeat trackCount
trackDraw(cnt) = 0
trackPostion( 0, cnt ) = double( baseX + radius(0) ), 0.0
loop
; メイン処理
time = 0
repeat
; 描画開始
redraw 0
; 背景
color 0, 0, 0
boxf
; 円盤描画
diskDrawX = diskBaseX
diskDrawY = diskBaseY
repeat diskCount
; 描画
color 255, 255, 255
circle ( diskDrawX - diskRadius(cnt) ), ( diskDrawY - diskRadius(cnt) ), ( diskDrawX + diskRadius(cnt) ), ( diskDrawY + diskRadius(cnt) ), 0
; 移動
diskRadian(cnt) = deg2rad(( 1.0 * time * diskRotationSpeed(cnt) ) \ 360.0 )
diskDrawX = ( diskDrawX + cos( diskRadian(cnt) ) * ( 0.8 * diskRadius(cnt) ) )
diskDrawY = ( diskDrawY + sin( diskRadian(cnt) ) * ( 0.8 * diskRadius(cnt) ) )
; 描画
diskDrawRadius = ( 1.0 + 0.1 * diskRadius(cnt) )
color 255, 0, 0
circle ( diskDrawX - diskDrawRadius ), ( diskDrawY - diskDrawRadius ), ( diskDrawX + diskDrawRadius ), ( diskDrawY + diskDrawRadius ), 1
loop
; 線描画
color 255, 255, 0
line diskDrawX, diskDrawY, ( diskBaseX + diskRadius(0) ), diskDrawY
; 軌跡追加
trackId = ( time \ trackCount )
trackPostion( 0, trackId ) = double( diskBaseX + diskRadius(0) ), diskDrawY
trackDraw(trackId) = 1 ; 念のため
; 軌跡描画
color 255, 0, 0
repeat trackCount
; 描画
if ( trackDraw(cnt) ) {
if trackId != cnt {
if cnt < ( trackCount - 1 ) {
; 線で結合
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, ( cnt + 1 ) ), trackPostion( 1, ( cnt + 1 ) )
} else {
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, 0 ), trackPostion( 1, 0 )
}
}
}
; 移動
trackPostion( 0, cnt ) += trackMoveSpeed
loop
; 描画終了
redraw 1
; タイマー
time++
await 16
loop
| |
|
2020/5/1(Fri) 19:49:53|NO.90258
ありがとうございます。
また一部のコードが間違っていました。。
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, 1 ), trackPostion( 1, 1 )
準備不足ですいません。
|
|
2020/5/1(Fri) 21:02:57|NO.90259
その部分ですが、
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, 1 ), trackPostion( 1, 1 )
は
line trackPostion( 0, cnt ), trackPostion( 1, cnt ), trackPostion( 0, 0 ), trackPostion( 1, 0 )
が正しいのではないでしょうか。
cntがループの最後の数値である「trackCount - 1」の時に、
trackPostionの最後の座標と最初の座標を参照して、それを結ぶわけですから。
|
|