HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0501
名無し邪魔な線を削除する方法5解決


名無し

リンク

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の最後の座標と最初の座標を参照して、それを結ぶわけですから。



ONION software Copyright 1997-2023(c) All rights reserved.