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だろうと考えて居たのが間違いでした。

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


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



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