10000 !========================================= 10010 ! 三角関数デモプログラム 10020 !----------------------------------------- 10030 INIT 10040 TEXTMODE 2 10050 BGCOL 0,0,128 10060 !========================================= 10070 ! Rは円のY方向(縦方向)の半径。 10080 ! X方向(横方向)はRの2倍になります。 10090 ! これは画面の一つ一つの点(ピクセル)が 10100 ! 縦横同じ長さの正方形ではなく、 10110 ! 縦長の長方形になっているためです。 10120 ! ちなみにポリゴンモデルを扱う 10130 ! 3次元座標においては、 10140 ! このような考慮は不要です。 10150 ! EZ-BASICが自動的に補正してくれると 10160 ! 考えてください。 10170 R=100 10180 !========================================= 10190 X0=320 ! 画面中央のスクリーンX座標(頂点0) 10200 Y0=112 ! 画面中央のスクリーンY座標(頂点0) 10210 !========================================= 10220 ! X軸(横軸)を描く 10230 LINEPOS 400,0,Y0,640,Y0,0 10240 LINECOL 400,0,255,0,128 10250 LINEDISP 400 10260 ! 10270 ! Y軸(縦軸)を描く 10280 LINEPOS 401,X0,0,X0,224,0 10290 LINECOL 401,255,0,0,128 10300 LINEDISP 401 10310 ! 10320 ! 半径Rの円を描く 10330 CALL CIRCLE_DISP(X0,Y0,R) 10340 ! 10350 DO 10360 IF PAD(1,1)>4 THEN A=MOD(A-1,360) 10370 IF PAD(1,2)>4 THEN A=MOD(A+1,360) 10380 IF PAD(1,3)>4 THEN R=MIN(R+1,100) 10390 IF PAD(1,4)>4 THEN R=MAX(R-1,-100) 10400 B=RAD(A) ! 単位を"度"から"ラジアン"に変換 10410 X1=2*R*COS(-B)+X0 ! X座標(半径は2倍する) 10420 Y1= R*SIN(-B)+Y0 ! Y座標 10430 CLEAR 10440 TEXTCOL WHITE 10450 LOCATE 24,12 10460 PRINT "0" 10470 TEXTCOL RED 10480 LOCATE 21,0 10490 PRINT "+100*SIN(B)" 10500 LOCATE 21,22 10510 PRINT "-100*SIN(B)"; 10520 TEXTCOL GREEN 10530 LOCATE 4,12 10540 PRINT "-100*COS(B)" 10550 LOCATE 37,12 10560 PRINT "+100*COS(B)"; 10570 LOCATE 0,0 10580 TEXTCOL YELLOW 10590 PRINT " R(半径)=";R 10600 TEXTCOL WHITE 10610 PRINT " A(角度)=";A;"度" 10620 PRINT " B(角度)=";B;"ラジアン" 10630 PRINT " ( B=RAD(A) )" 10640 TEXTCOL GREEN 10650 PRINT " R*COS(B)=";R*COS(B) 10660 TEXTCOL RED 10670 PRINT " R*SIN(B)=";R*SIN(B) 10680 LINEPOS 500,X0,Y0,X1,Y1,0 10690 LINECOL 500,255,255,0,128 10700 LINEDISP 500 10710 LINEPOS 501,X0,Y1,X1,Y1,0 10720 LINECOL 501,255,0,0,128 10730 LINEDISP 501 10740 LINEPOS 502,X1,Y0,X1,Y1,0 10750 LINECOL 502,0,255,0,128 10760 LINEDISP 502 10770 FOR I=1 TO A 10780 LINECOL I,255,255,255,128 10790 NEXT I 10800 FOR I=A+1 TO 360 10810 LINECOL I,0,0,255,128 10820 NEXT I 10830 IF PAD(1,8)>4 THEN FSYNC 1 ELSE FSYNC 10 10840 LOOP 10850 ! 10860 !========================================= 10870 ! 中心座標(X,Y),半径Rの円を描く 10880 !----------------------------------------- 10890 SUB CIRCLE_DISP(X,Y,R) 10900 CX0=2*R*COS(RAD(0))+X 10910 CY0= R*SIN(RAD(0))+Y 10920 FOR I=1 TO 360 10930 CX1=2*R*COS(RAD(-I))+X 10940 CY1= R*SIN(RAD(-I))+Y 10950 LINEPOS I,CX0,CY0,CX1,CY1,0 10960 LINECOL I,0,0,255,128 10970 LINEDISP I 10980 CX0=CX1 10990 CY0=CY1 11000 NEXT I 11010 END SUB