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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0906
みそ汁にあんこ四角形の表示がうまくいきません4解決


みそ汁にあんこ

リンク

2021/9/6(Mon) 14:21:48|NO.93777

こんにちは。
HSP 3.6を使って円を等分する点の上に縦50×横10の四角形を配置します。
以下のコードで6等分の場合が完成することを確認しました。


#const vert 50 // 縦の長さ #const hori 10 // 横の長さ #const r1 100 // 円の半径 val1 = sqrt(3) screen 1, ginfo_dispx, ginfo_dispy color 0, 0, 0 // 6等分 boxf ginfo_dispx/2-hori/2, ginfo_dispy/2-r1-vert/2, ginfo_dispx/2+hori/2, ginfo_dispy/2-r1+vert/2 boxf ginfo_dispx/2+r1/2*val1-hori/2, ginfo_dispy/2-r1/2-vert/2, ginfo_dispx/2+r1/2*val1+hori/2, ginfo_dispy/2-r1/2+vert/2 boxf ginfo_dispx/2+r1/2*val1-hori/2, ginfo_dispy/2+r1/2-vert/2, ginfo_dispx/2+r1/2*val1+hori/2, ginfo_dispy/2+r1/2+vert/2 boxf ginfo_dispx/2-hori/2, ginfo_dispy/2+r1-vert/2, ginfo_dispx/2+hori/2, ginfo_dispy/2+r1+vert/2 boxf ginfo_dispx/2-r1/2*val1-hori/2, ginfo_dispy/2+r1/2-vert/2, ginfo_dispx/2-r1/2*val1+hori/2, ginfo_dispy/2+r1/2+vert/2 boxf ginfo_dispx/2-r1/2*val1-hori/2, ginfo_dispy/2-r1/2-vert/2, ginfo_dispx/2-r1/2*val1+hori/2, ginfo_dispy/2-r1/2+vert/2

同じように12等分で1〜3つ目まで進めたところ、
1番目と3番目は表示されるのに、2番目の四角形は画面に表示されないことに気がつきました。


#const r2 200 // 円の半径 // 12等分 boxf ginfo_dispx/2-hori/2, ginfo_dispy/2-r2-vert/2, ginfo_dispx/2+hori/2, ginfo_dispy/2-r2+vert/2 // 1番目 boxf ginfo_dispx/2+r2/2-hori/2, ginfo_dispy/2-r2/2*val1-vert/2, ginfo_dispx/2+r2/2+hori/2, ginfo_dispy/2-r2/2*val1+vert/2 // 2番目 boxf ginfo_dispx/2+r2/2*val1-hori/2, ginfo_dispy/2-r2/2-vert/2, ginfo_dispx/2+r2/2*val1+hori/2, ginfo_dispy/2-r2/2+vert/2 // 3番目

また、sin, cos関数を使って試みると、
2番目が表示されないことに加え、3番目の位置が変わってしまいました。


val2 = sin(Π/6) val3 = cos(Π/6) boxf ginfo_dispx/2-hori/2, ginfo_dispy/2-r2-vert/2, ginfo_dispx/2+hori/2, ginfo_dispy/2-r2+vert/2 // 1番目 boxf ginfo_dispx/2+r2*val2-hori/2, ginfo_dispy/2-r2*val3-vert/2, ginfo_dispx/2+r2*val2+hori/2, ginfo_dispy/2-r2*val3+vert/2 // 2番目 boxf ginfo_dispx/2+r2*val3-hori/2, ginfo_dispy/2-r2*val2-vert/2, ginfo_dispx/2+r2*val3+hori/2, ginfo_dispy/2-r2*val2+vert/2 // 3番目

なぜ2番目の四角形は表示されないのでしょうか。
分かる方いらっしゃいましたら助言お願いいたします。

10等分などの場合も予定しているので、
sin, cos関数を利用したコードについても助けていただけると幸いです。
よろしくお願いいたします。



この記事に返信する


沢渡

リンク

2021/9/6(Mon) 16:19:03|NO.93780

描く四角形それぞれについて一つ一つ位置を手計算していたのでは大変ですので、
「sin, cos関数を利用したコード」を最初から作った方が楽だと思います。
「div=12」の部分を10にすれば10等分もできます。

#const vert 50 // 縦の長さ #const hori 10 // 横の長さ #const r1 200 // 円の半径 #const vert2 vert/2 #const hori2 hori/2 #define boxf_c(%1,%2) boxf (%1)-hori2,(%2)-vert2,(%1)+hori2-1,(%2)+vert2-1 //↑「boxf_c p1,p2」で、(p1,p2)を中心にhori×vertの四角形を描く screen 1, ginfo_dispx, ginfo_dispy x0=ginfo_dispx/2 : y0=ginfo_dispy/2 //円の中心 color 0,0,0 div=12 //円を何等分するか repeat div t=M_PI*2*cnt/div //角度 x=int(cos(t)*r1)+x0 : y=int(sin(t)*r1)+y0 boxf_c x,y loop



みそ汁にあんこ

リンク

2021/9/6(Mon) 17:56:55|NO.93784

沢渡様
回答ありがとうございます。

#defineを利用して効率的に表示するということに考えが至りませんでした、、
大いに勉強になります、ありがとうございます。

回答を参考にさせていただき、円を6等分する点上に四角形を表示して、
そのうち任意のものを傾けるプログラムを作成しました。

#const vert 50 // 縦の長さ #const hori 10 // 横の長さ #const r 100 // 円の半径 #const vert2 vert/2 #const hori2 hori/2 #define boxf_c(%1,%2) boxf (%1)-hori2,(%2)-vert2,(%1)+hori2-1,(%2)+vert2-1 //↑「boxf_c p1,p2」で、(p1,p2)を中心にhori×vertの四角形を描く #define grect_c(%1,%2) grect (%1),(%2),π/2,hori,vert screen 1, ginfo_dispx, ginfo_dispy x0=ginfo_dispx/2 : y0=ginfo_dispy/2 //円の中心 color 0,0,0 div=6 //円を何等分するか repeat div t=M_PI*2*cnt/div //角度 x=int(cos(t)*r)+x0 : y=int(sin(t)*r)+y0 if cnt=0 : { grect_c x,y } else { boxf_c x,y } loop stop
最初に表示する四角形だけを90°回転させたいのですが回転しないまま表示されてしまいます。
90など数字を直接入れると回転はしますが、想定した状態ではありませんでした。

角度の入力に問題があると思うのですが、grect命令について調べても有益な情報を見つけることができず。
重ね重ねで恐縮ではあるのですが、お助けいただけないでしょうか。



沢渡

リンク

2021/9/6(Mon) 18:24:48|NO.93786

「Π」というギリシャ文字にはHSPでは特別な意味はありませんよ。
「Π」をM_PI(円周率を表す定数)に置き換えれば上手くいくと思いますが。



みそ汁にあんこ

リンク

2021/9/6(Mon) 22:39:17|NO.93791

単純なところを見落としていました。
ありがとうございました。



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