新しく発言する EXIT インデックスへ
黄金四角形を描くプログラム

  黄金四角形を描くプログラム yossy 2007/05/10 21:55:49 
  漸化式、再帰呼び出しで簡潔にする 山中和義 2007/05/12 10:19:07  (修正1回)
  │├正方形の辺の長さがフィボナッチ数列になる... 山中和義 2007/05/12 11:13:29  (修正1回)
  ││└複素数による図形変換 山中和義 2007/05/19 22:15:15 
  │└山中さん、はじめまして。yossyと申します。... yossy 2007/05/12 13:48:45 
  !フラクタル風に、描く。 SECOND 2007/05/15 15:00:39 
   └!もっと、シンプル。 SECOND 2007/05/16 14:23:39 
    └SECONDさん、はじめまして。さらにシンプル... yossy 2007/05/18 03:45:06 

  黄金四角形を描くプログラム yossy 2007/05/10 21:55:49  ツリーへ

黄金四角形を描くプログラム 返事を書く ノートメニュー
yossy <cfdugezjff> 2007/05/10 21:55:49
DECLARE EXTERNAL PICTURE polygon
OPTION ANGLE DEGREES
SUB circle1(a,b,r)
FOR t=90 TO 180
PLOT LINES: a+r*COS(t),b+r*SIN(t);
NEXT t
PLOT LINES
END SUB
SUB circle2(a,b,r)
FOR t=0 TO 90
PLOT LINES: a+r*COS(t),b+r*SIN(t);
NEXT t
PLOT LINES
END SUB
SUB circle3(a,b,r)
FOR t=-90 TO 0
PLOT LINES: a+r*COS(t),b+r*SIN(t);
NEXT t
PLOT LINES
END SUB
SUB circle4(a,b,r)
FOR t=-180 TO -90
PLOT LINES: a+r*COS(t),b+r*SIN(t);
NEXT t
PLOT LINES
END SUB
SET WINDOW -0.1,1.7,-0.1,1.7
DRAW GRID
LET φ=(1+SQR(5))/2
DRAW polygon(4) WITH ROTATE(-45)*SCALE(SQR(2)/2)*SHIFT(0.5,0.5)
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ)*SQR(2))/2)*SHIFT(1+((1/φ)/2),1-((1/φ)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^2)*SQR(2))/2)*SHIFT(φ-((1/φ^2)/2),(1/φ^2)/2)
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^3)*SQR(2))/2)*SHIFT(1+((1/φ^3)/2),(1/φ^3)/2)
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^4)*SQR(2))/2)*SHIFT(1+((1/φ^4)/2),(1/φ^3)+((1/φ^4)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^5)*SQR(2))/2)*SHIFT(1+(1/φ^4)+((1/φ^5)/2),(1/φ^2)-((1/φ^5)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^6)*SQR(2))/2)*SHIFT(φ-(1/φ^2)-((1/φ^6)/2),(1/φ^3)+((1/φ^6)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^7)*SQR(2))/2)*SHIFT(1+(1/φ^4)+((1/φ^7)/2),(1/φ^3)+((1/φ^7)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^8)*SQR(2))/2)*SHIFT(1+(1/φ^4)+((1/φ^8)/2),(1/φ^3)+(1/φ^7)+((1/φ^8)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^9)*SQR(2))/2)*SHIFT(1+(1/φ^4)+(1/φ^8)+((1/φ^9)/2),(1/φ^3)+(1/φ^6)-((1/φ^9)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^10)*SQR(2))/2)*SHIFT(1+(1/φ^4)+(1/φ^7)-((1/φ^10)/2),(1/φ^3)+(1/φ^7)+((1/φ^10)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^11)*SQR(2))/2)*SHIFT(1+(1/φ^4)+(1/φ^8)+((1/φ^11)/2),(1/φ^3)+(1/φ^7)+((1/φ^11)/2))
DRAW polygon(4) WITH ROTATE(-45)*SCALE(((1/φ^12)*SQR(2))/2)*SHIFT(1+(1/φ^4)+(1/φ^8)+((1/φ^12)/2),(1/φ^3)+(1/φ^7)+(1/φ^11)+((1/φ^12)/2))
CALL circle1(1,0,1)
CALL circle2(1,1/φ^2,1/φ)
CALL circle3(1+(1/φ^3),1/φ^2,1/φ^2)
CALL circle4(1+(1/φ^3),1/φ^3,1/φ^3)
CALL circle1(1+(1/φ^4),1/φ^3,1/φ^4)
CALL circle2(1+(1/φ^4),(1/φ^2)-(1/φ^5),(1/φ^5))
CALL circle3(1+(1/φ^3)-(1/φ^6),(1/φ^3)+(1/φ^6),(1/φ^6))
CALL circle4(1+(1/φ^4)+(1/φ^7),(1/φ^3)+(1/φ^7),(1/φ^7))
CALL circle1(1+(1/φ^4)+(1/φ^8),(1/φ^3)+(1/φ^7),(1/φ^8))
CALL circle2(1+(1/φ^4)+(1/φ^8),(1/φ^3)+(1/φ^6)-(1/φ^9),(1/φ^9))
CALL circle3(1+(1/φ^4)+(1/φ^7)-(1/φ^10),(1/φ^3)+(1/φ^7)+(1/φ^10),(1/φ^10))
CALL circle4(1+(1/φ^4)+(1/φ^8)+(1/φ^11),(1/φ^3)+(1/φ^7)+(1/φ^11),(1/φ^11))
CALL circle1(1+(1/φ^4)+(1/φ^8)+(1/φ^12),(1/φ^3)+(1/φ^7)+(1/φ^11),(1/φ^12))
END
EXTERNAL PICTURE polygon(n)
OPTION ANGLE DEGREES
FOR i=0 TO n
PLOT LINES:COS(i*360/n),SIN(i*360/n);
NEXT i
END PICTURE

  漸化式、再帰呼び出しで簡潔にする 山中和義 2007/05/12 10:19:07  (修正1回) ツリーへ

Re: 黄金四角形を描くプログラム 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/05/12 10:19:07 ** この記事は1回修正されてます
漸化式、再帰呼び出しで簡潔にする

第2象限の正方形と4分の1円を、φ縮小させ90度右へ回転しながら配置させる。

漸化式(繰り返し)による例


!黄金四角形を描く
OPTION ANGLE DEGREES

PICTURE box_circle4div !正方形と4分の1円を描く
PLOT LINES: -1,0; 0,0; 0,1; -1,1; -1,0 !第2象限 正方形

FOR t=180 TO 90 STEP -1 !第2象限 4分の1円
PLOT LINES: COS(t),SIN(t);
WAIT DELAY 0.05 !!!!!
NEXT t
PLOT LINES
END PICTURE


SET WINDOW -0.1,1.7,-0.1,1.7
!SET WINDOW 1,1.5,0,0.5 !ズームイン!
DRAW GRID

LET φ=(1+SQR(5))/2 !黄金比

LET x=1 !配置位置
LET y=0
FOR n=0 TO 10
DRAW disk WITH SCALE(0.01)*SHIFT(x,y) !!!!!
LET k=-90*n !-90°回転
DRAW box_circle4div WITH SCALE(1/φ^n)*ROTATE(k)*SHIFT(x,y)
LET x=x-SIN(k)/φ^(n+2) !螺旋上に配置する
LET y=y+COS(k)/φ^(n+2)
NEXT n

END

  │├正方形の辺の長さがフィボナッチ数列になる... 山中和義 2007/05/12 11:13:29  (修正1回) ツリーへ

Re: 漸化式、再帰呼び出しで簡潔にする 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/05/12 11:13:29 ** この記事は1回修正されてます
正方形の辺の長さがフィボナッチ数列になるのを利用して、小さい図形から順に描く場合


!黄金四角形を描く
OPTION ANGLE DEGREES

PICTURE box_circle4div !正方形と4分の1円を描く
PLOT LINES: 0,0; 1,0; 1,1; 0,1; 0,0 !第1象限 正方形

FOR t=0 TO 90 !第1象限 4分の1円
PLOT LINES: COS(t),SIN(t);
WAIT DELAY 0.01 !!!!!
NEXT t
PLOT LINES
END PICTURE


SET WINDOW -100,100,-100,100
DRAW GRID(10,10)

LET x=0 !配置位置
LET y=0

DEF a(n)=MOD(n,3)+1 !3項間
DIM f(3)

LET f(a(0))=1 !第1項
DRAW box_circle4div WITH SCALE(f(a(0)))*ROTATE(90*0)*SHIFT(x,y)
LET f(a(1))=1 !第2項
DRAW box_circle4div WITH SCALE(f(a(1)))*ROTATE(90*1)*SHIFT(x,y)

FOR n=2 TO 11
LET k=90*n !90°回転
LET f(a(n))=f(a(n-1))+f(a(n-2)) !フィボナッチ数列 ※正方形の辺の長さ
LET x=x-COS(k)*f(a(n-2)) !螺旋上に配置する
LET y=y-SIN(k)*f(a(n-2))
DRAW box_circle4div WITH SCALE(f(a(n)))*ROTATE(k)*SHIFT(x,y)
NEXT n

END

  ││└複素数による図形変換 山中和義 2007/05/19 22:15:15  ツリーへ

Re: 正方形の辺の長さがフィボナッチ数列になる... 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/05/19 22:15:15
複素数による図形変換

!黄金四角形を描く
OPTION ARITHMETIC COMPLEX
OPTION ANGLE DEGREES
PICTURE box_circle4div !正方形と4分の1円を描く
PLOT LINES: -1,-1; 0,-1; 0,0; -1,0; -1,-1 !第3象限 正方形

FOR t=270 TO 180 STEP -1 !第3象限 4分の1円
PLOT LINES: COS(t),SIN(t);
WAIT DELAY 0.05 !!!!!
NEXT t
PLOT LINES
END PICTURE

SET WINDOW -0.1,1.7,-0.1,1.7
!SET WINDOW 0.5,1,1,1.5 !ズームイン!
DRAW GRID

LET φ=(1+SQR(5))/2 !黄金比

LET Zsr=complex(1,0) !大きさ、向きのベクトル
LET Zt=complex(1,1) !配置位置
LET z=complex(0,φ) !座標変換の複素数
FOR n=0 TO 10
DRAW disk WITH SCALE(0.01)*SHIFT(re(Zt),im(Zt)) !!!!!

DRAW box_circle4div WITH SCALE(ABS(Zsr))*ROTATE(arg(Zsr))*SHIFT(re(Zt),im(Zt))

LET Zsr=Zsr/z !縮小、-90°回転
LET Zt=(Zt+z*z)/z !螺旋上に配置する
NEXT n

END

  │└山中さん、はじめまして。yossyと申します。... yossy 2007/05/12 13:48:45  ツリーへ

Re: 漸化式、再帰呼び出しで簡潔にする 返事を書く ノートメニュー
yossy <cfdugezjff> 2007/05/12 13:48:45
山中さん、はじめまして。yossyと申します。
簡潔なプログラムに直して頂き、ありがとうございました。
動画にしてみると、また違った味わいがあっていいですね。
軟化式、再帰呼び出しなど、いろいろと勉強になりました。
フィボナッチ数列の方も、ユニークで面白かったです。
それでは、またの機会によろしくお願いします。

  !フラクタル風に、描く。 SECOND 2007/05/15 15:00:39  ツリーへ

Re: 黄金四角形を描くプログラム 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/05/15 15:00:39
!フラクタル風に、描く。

OPTION ANGLE DEGREES
SET WINDOW -1.1,0.7, -0.1,1.7
DRAW GRID
LET φ=(1+SQR(5))/2 ! 黄金比

PICTURE arc(m, r)
!-----
FOR t=90 TO 180
PLOT LINES: r*COS(t),r*SIN(t); ! 円弧
NEXT t
PLOT LINES: -r,r; 0,r; 0,0; -r,0 ! 正方形
!-----
IF 0<m THEN DRAW arc(m-1, r/φ) WITH ROTATE(-90)*SHIFT(0, r/φ^2) ! 再帰draw
END PICTURE

DRAW arc( 10, 1) ! 段数、開始の寸法

END

   └!もっと、シンプル。 SECOND 2007/05/16 14:23:39  ツリーへ

Re: !フラクタル風に、描く。 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/05/16 14:23:39
!もっと、シンプル。

OPTION ANGLE DEGREES
SET WINDOW -1.1,0.7, -0.4,1.4
DRAW GRID
LET φ=(1+SQR(5))/2 ! 黄金比

PICTURE arc(m)
!-----
FOR t=90 TO 180
PLOT LINES: COS(t),SIN(t); ! 円弧
NEXT t
PLOT LINES: -1,1; 0,1; 0,0; -1,0 ! 正方形
!-----
IF 0<m THEN DRAW arc(m-1) WITH ROTATE(-90)*SHIFT(0, 1/φ)*SCALE(1/φ) !再帰draw
END PICTURE

DRAW arc(10) ! 段数

END

    └SECONDさん、はじめまして。さらにシンプル... yossy 2007/05/18 03:45:06  ツリーへ

Re: !もっと、シンプル。 返事を書く ノートメニュー
yossy <cfdugezjff> 2007/05/18 03:45:06
SECONDさん、はじめまして。さらにシンプルにして頂き、ありがとうございました。
ここまでシンプルなプログラムで黄金四角形を描ける十進BASICは、やはり凄いですね!


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。