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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0828
ばってんgrotateについて4解決


ばってん

リンク

2017/8/28(Mon) 09:18:56|NO.81162

お世話になります。

grotateについて、
以下ののスクリプトを実行すると、

1234567890    ←mes(これは当然判る)

     1234567890     ←50,50の辺り(何故?)

           1234 ←100,100の辺り(何故?)

と3つ表示されるのですが、
何故こうなるのか判りません。。。
HSPの仕様でしょうか?


mes "1234567890" pos 100,100 gmode 0,100,100 grotate 0,0,0,(3.14*0.1)



この記事に返信する


沢渡

リンク

2017/8/28(Mon) 10:33:24|NO.81163

「50,50のあたりに表示される」に関してはgrotateの正しい結果なのですが、
「100,100のあたりに中途半端に表示されるもの」に関しては本当に謎ですね。
以下のように他のバッファから持ってくるようにすれば正常に行くのですが、
同一ウィンドウ内の画像をgrotateするのは想定外の使用方法なのかもしれません。

buffer 1,200,200 color 0,0,0 : boxf //回転状況をわかりやすくするため白黒反転。不要な場合は削除 color 255,255,255 //同上 mes "1234567890" gsel 0 gmode 0,100,100 pos 100,100 grotate 1,0,0,(3.14*0.1)



Makoto

リンク

2017/8/28(Mon) 12:02:41|NO.81165

処理の順番を考えていけば謎ではありません。

おそらく grotate は、元画像の左上から処理を始めていると思われます。
元画像の処理位置から取得したデータを回転した位置へ描画、
という処理を左上から右端まで行い、次の段へ下がってまた左から右へ
を繰り返して、下端まで行っていきます。

今回の場合同じ画面上に描画しているため
処理が「50,50の辺り」に到達した時には左上の画像がすでに書き込まれています。
その書き込まれた画像をさらに回転させた位置へ描画するのでこういった現象が起こります。

mes "1234567890" pos 100,100 gmode 0,100,100 grotate 0,0,0,(3.14*0.1) line 100,0,0,0 line 100,100 line 0,100 line 0,0 line 162.99,67.88,67.88,37.00 line 132.11,162.99 line 37.00,132.11 line 67.88,37.00
こうすると少しわかりやすいでしょうか。
描画範囲が重ならないようにすればこういった現象は起こりません。



ばってん

リンク

2017/8/28(Mon) 12:26:53|NO.81166

>沢渡さま
>Makotoさま

お二方ともご返信ありがとうございます。
反転したり枠表示すれば納得しました。
なるほど同一画面の場合、少し注意が必要ですね。。

repeat
color:boxf 0,0,100,100
color 255,255,255:pos 0,0:mes "1234567890"
pos 100,100:gmode 0,100,100
grotate 0,0,0,(3.14*(0.01*cnt))
redraw 1:await 16:redraw 0:boxf
loop

ありがとうございました。



沢渡

リンク

2017/8/28(Mon) 12:42:24|NO.81167

ははあ、なるほど。元の画像を一括してどこかに転送して回してるわけではなく、
1ピクセル1ピクセルをその都度元画像から拾って、座標変換してプロットしていると。
合点がいきました。



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