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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0222
Area39星印を描画しようとすると微妙にズレる2解決


Area39

リンク

2024/2/22(Thu) 22:24:50|NO.101282

お世話になります、今回もよろしくお願い致します。

#module #deffunc drawline int p1 , int p2 line x@(p1),y@(p1),x@(p2),y@(p2) return #global #define DIAMETERX 800 #define DIAMETERY 800 #define DIAMETER2X 300 #define DIAMETER2Y 300 #define SPAN_L 100 #define SPAN_R 100 #define SPAN_U 100 #define SPAN_D 100 #define CX (DIAMETERX+SPAN_L+SPAN_R)/2 #define CY (DIAMETERY+SPAN_U+SPAN_D)/2 screen 0,DIAMETERX+SPAN_L+SPAN_R,DIAMETERY+SPAN_U+SPAN_D,,050,050 color 000,000,000 : boxf repeat 5 x(cnt) = 1.0*CX+1.0*DIAMETERX/2*cos(deg2rad(18+72*cnt)) y(cnt) = 1.0*CY-1.0*DIAMETERY/2*sin(deg2rad(18+72*cnt)) loop repeat 5 x(cnt+5) = 1.0*CX+1.0*DIAMETER2X/2*cos(deg2rad(18+72*cnt)) y(cnt+5) = 1.0*CY+1.0*DIAMETER2Y/2*sin(deg2rad(18+72*cnt)) loop color 000,255,000 drawline 0,2 drawline 0,3 drawline 1,3 drawline 1,4 drawline 2,4 color 255,000,000 drawline 0,9 drawline 9,1 drawline 1,8 drawline 8,2 drawline 2,7 drawline 7,3 drawline 3,6 drawline 6,4 drawline 4,5 drawline 5,0 msg = "" repeat length(x) msg += ""+cnt+" x:"+int(x(cnt))+"|y:"+int(y(cnt))+"\n" loop msg += ""+CX+"|"+CY dialog msg stop

今回は数学的な問題になるかと思います。
星形の真ん中の逆5角形を消した絵を描きたいと思って書いております。
星形は、直径800の円に内接、
真ん中の5角形は300の円に内接すると考えこのように描きましたが
横線がまっすぐになるはずが、まっすぐにならず、
両方描くと微妙にズレております。

これは何か間違いがあるのでしょうか?
考えましたが答えが出ませんでした。
分かる方いらっしゃいましたらご教授願います。

よろしくお願いいたします。



この記事に返信する


雪月夜

リンク

2024/2/23(Fri) 17:36:11|NO.101286


#module #deffunc drawline int p1 , int p2 ;line x@(p1),y@(p1),x@(p2),y@(p2) dir=atan(y@(p1)-y@(p2),x@(p1)-x@(p2)) line x@(p2)+cos(dir)*len@,y@(p2)+sin(dir)*len@,x@(p2),y@(p2) return #global #define DIAMETERX 800 #define DIAMETERY 800 ;#define DIAMETER2X 300 ;#define DIAMETER2Y 300 #define SPAN_L 100 #define SPAN_R 100 #define SPAN_U 100 #define SPAN_D 100 #define CX (DIAMETERX+SPAN_L+SPAN_R)/2 #define CY (DIAMETERY+SPAN_U+SPAN_D)/2 screen 0,DIAMETERX+SPAN_L+SPAN_R,DIAMETERY+SPAN_U+SPAN_D,,050,050 color 000,000,000 : boxf repeat 5 x(cnt) = 1.0*CX+1.0*DIAMETERX/2*cos(deg2rad(18+72*cnt)) y(cnt) = 1.0*CY-1.0*DIAMETERY/2*sin(deg2rad(18+72*cnt)) loop ;repeat 5 ;x(cnt+5) = 1.0*CX+1.0*DIAMETER2X/2*cos(deg2rad(18.0+72*cnt)) ;y(cnt+5) = 1.0*CY+1.0*DIAMETER2Y/2*sin(deg2rad(18.0+72*cnt)) ;loop ;一辺の長さを求める len=sqrt(powf(x(0)-x(2),2)+powf(y(0)-y(2),2)) color 000,255,000 drawline 0,2 drawline 0,3 drawline 1,3 drawline 1,4 drawline 2,4 ;黄金比で割る len/=((1.0+sqrt(5))/2+1) color 255,000,000 drawline 2,0 drawline 3,0 drawline 3,1 drawline 4,1 drawline 4,2 drawline 0,2 drawline 0,3 drawline 1,3 drawline 1,4 drawline 2,4 msg = "" repeat length(x) msg += ""+cnt+" x:"+int(x(cnt))+"|y:"+int(y(cnt))+"\n" loop msg += ""+CX+"|"+CY dialog msg
直径800の円の場合、真ん中の5角形に内接する円は正確には300ではないです。
少し面倒ですが、5角形の角は計算で求められます。



Area39

リンク

2024/2/23(Fri) 22:41:57|NO.101288

雪月夜 さま

ご面倒な内容、確認して下さりありがとうございます。
座標から300だろうと考えて居たのが間違いでした。

出来に感激しております。


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



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101282への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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