関数でお絵かき

 投稿者:山中和義  投稿日:2012年11月16日(金)14時24分33秒
 
SET WINDOW -10,10,-10,10 !表示領域
DRAW grid !座標を描く

CALL fvLINE(2,-6, 3,4) !1 y=2x-6
CALL fvLINE(-3/2,9, 0,4) !2 y=(-3/2)x+9
CALL fvLINEH(2, -5,4) !3 y=2
CALL fvLINE(-1/5,2, -5,0) !4 y=(-1/5)+2
CALL fvLINEH(0, -3,3) !5 y=0
CALL fvLINEV(0, 2,9) !6 x=0
CALL fvLINE(6/5,9, -5,0) !7 y=(6/5)x+9
CALL fvLINE(-1,-3, -5,-3) !8 y=-x-3
CALL fvLINEH(3, 0,4) !9 y=3
CALL fvLINE(2/3,-10, 6,9) !10 y=(2/3)x-10
CALL fvLINEH(-6, -9,-8) !11 y=-6
CALL fvLINEV(-3, -8,-4) !12 x=-3
CALL fvCIRCLE(6.5,4.5,0.5, -10,10) !13 (x+6.5)^2+(y+4.5)^2=0.5^2
CALL fvLINEV(1, -8,-4) !14 x=1
CALL fvLINEH(-6, -5,6) !15 y=-6
CALL fvLINEV(9, -8,-4) !16 x=9
CALL fvLINE(-2/3,-2, 6,9) !17 y=(-2/3)x-2
CALL fvLINEV(-1, -8,-4) !18 x=-1
CALL fvLINEV(-5, -10,-2) !19 x=-5
CALL fvCIRCLE(5,6,4, -9,-5) !20 (x+5)^2+(y+6)^2=4^2

END


EXTERNAL SUB fvLINE(A,B, P,Q) !直線y=Ax+B, x∈[P,Q]
PLOT LINES: P,A*P+B; Q,A*Q+B
END SUB

EXTERNAL SUB fvLINE2(A,B, P,Q) !直線y=Ax+B(A≠0), y∈[P,Q]
IF A=0 THEN
   PRINT "直線y=Ax+BでA=0です。"; A;B; P;Q
   STOP
ELSE
   PLOT LINES: (P-B)/A,P; (Q-B)/A,Q
END IF
END SUB

EXTERNAL SUB fvLINEH(B, P,Q) !水平線y=B, x∈[P,Q]
PLOT LINES: P,B; Q,B
END SUB

EXTERNAL SUB fvLINEV(A, P,Q) !垂直線x=A, y∈[P,Q]
PLOT LINES: A,P; A,Q
END SUB

EXTERNAL SUB fvCIRCLE(A,B,R, P,Q) !円 (x+A)^2+(y+B)^2=R^2, x∈[P,Q] ※中心(-A,-B)、半径R
FOR x=P TO Q STEP 0.01 !上側
   WHEN EXCEPTION IN
      PLOT LINES: x,SQR(R^2-(x+A)^2)-B;
   USE
      PLOT LINES
   END WHEN
NEXT x
PLOT LINES
FOR x=P TO Q STEP 0.01 !下側
   WHEN EXCEPTION IN
      PLOT LINES: x,-SQR(R^2-(x+A)^2)-B;
   USE
      PLOT LINES
   END WHEN
NEXT x
PLOT LINES
END SUB

EXTERNAL SUB fvFNC2(A,B,C, P,Q) !2次関数y=A(x+B)^2+C, x∈[P,Q] ※軸x=-B、頂点(-B,C)
FOR x=P TO Q STEP 0.01
   PLOT LINES: x,A*(x+B)^2+C;
NEXT x
PLOT LINES
END SUB

 

関数でお絵かき

 投稿者:山中和義  投稿日:2013年 1月25日(金)11時19分45秒
  > No.2018[元記事へ]

問題
同じ長さのマッチ棒12本を一辺に3本、4本、5本使って三角形を作りました。
これら12本のマッチ棒のうち、4本だけを動かして、
面積がもとの三角形の1/2である多角形になるようにしてください。

答え

SET WINDOW -3,3,-1,5 !表示領域
DRAW grid !座標を描く

CALL fvSEGMENT(-2,0,1,0) !AB
PLOT TEXT ,AT -2,0: "A"
CALL fvSEGMENT(1,0,1,4) !BC
PLOT TEXT ,AT 1,0: "B"
CALL fvSEGMENT(1,4,-2,0) !CA
PLOT TEXT ,AT 1,4: "C"

!折り返し
SET LINE COLOR 4
CALL fvSEGMENT(0,1,1,3) !P

CALL fvSYMMETRY2(1,1,2,1, xx,yy) !B'
PRINT xx;yy

SET LINE COLOR 2
CALL fvSEGMENT(0,0,0,1)
CALL fvSEGMENT(0,1,xx,yy)
CALL fvSEGMENT(xx,yy,1,3)

END

!●作図ルーチン

!直線
EXTERNAL SUB fvSEGMENT(x1,y1,x2,y2) !線分
PLOT LINES: x1,y1; x2,y2
END SUB

!●計算ルーチン

!点対称

!点(x,y)の原点に対称な点は、(-x,-y)より、点(a,b)に対しては、(-(x-a)+a,-(y-b)+b)=(2a-x,2b-y)
EXTERNAL SUB fvSYMMETRY(x,y,a,b, xx,yy) !点(a,b)に対称な点(点(a,b)を基準に180度回転した点)
LET xx=2*a-x
LET yy=2*b-y
END SUB

!線対称

EXTERNAL SUB fvSYMMETRY22(x,y,a, xx,yy) !直線Y=a*Xに対称な点
LET m1=1-a*a
LET m2=2*a
LET m3=1+a*a
LET xx=(m1*x+m2*y)/m3
LET yy=(m2*x-m1*y)/m3
END SUB

EXTERNAL SUB fvSYMMETRY2(x,y,a,b, xx,yy) !直線Y=a*X+bに対称な点
LET m1=1-a*a
LET m2=2*a
LET m3=1+a*a
LET xx=(m1*x+m2*y-2*b*a)/m3
LET yy=(m2*x-m1*y+2*b)/m3
END SUB

!点(x,y)のy軸に対称な点は、(-x,y)より、直線X=aについては、(-(x-a)+a,y)=(2a-x,y)
EXTERNAL SUB fvSYMMETRYh(x,y,a, xx,yy) !直線X=aに対称な点
LET xx=2*a-x
LET yy=y
END SUB

!点(x,y)のx軸に対称な点は、(x,-y)より、直線Y=bについては、(x,-(y-b)+b)=(x,2b-y)
EXTERNAL SUB fvSYMMETRYv(x,y,b, xx,yy) !直線Y=bに対称な点
LET xx=x
LET yy=2*b-y
END SUB

!回転

EXTERNAL SUB fvROTATE90(x,y,a,b, xx,yy) !点(a,b)を基準に90度回転した点
LET xx=-(y-b)+a
LET yy= (x-a)+b
END SUB

EXTERNAL SUB fvROTATEm90(x,y,a,b, xx,yy) !点(a,b)を基準に-90度回転した点
LET xx= (y-b)+a
LET yy=-(x-a)+b
END SUB



その他の解の例
 

戻る