中心点は 480,480 サイズ 400 にて 1 degree ずつプロットする例
100 CLS 3
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 FOR I=0 TO DEGREES_360 STEP DEGREES_1
160 X = SIN(I) * SIZE + SX
170 Y = COS(I) * SIZE + SY
180 PRINT I , X , Y
190 PSET (X,Y)
200 NEXT I
(0,0)
1 PI (rad)
@@@
@@ @@
@@ @@
@ @
@ @
3/2 PI (rad) @ @ 1/2 PI (rad)
@ @
@ @
@@ @@
@@ @@
@@@
0 PI (rad)
2 PI (rad)
360 deg / 60 sec = 6
100 CLS 3
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 FOR I=0 TO DEGREES_360 STEP DEGREES_1 * 6 ' 360 deg / 60 sec = 6
160 X = SIN(I) * SIZE + SX
170 Y = COS(I) * SIZE + SY
180 PRINT I , X , Y
190 PSET (X,Y)
200 NEXT I
中心点から線引き
100 CLS 3
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 FOR I=0 TO DEGREES_360 STEP DEGREES_1 * 6 ' 360 deg / 60 sec = 6
160 X = SIN(I) * SIZE + SX
170 Y = COS(I) * SIZE + SY
180 PRINT I , X , Y
190 LINE (SX,SY)-(X,Y) ' 中心点から線引き
200 NEXT I
前のを消す。
100 CLS 3
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 FOR I=0 TO DEGREES_360 STEP DEGREES_1 * 6 ' 360 deg / 60 sec = 6
155 LINE (SX,SY)-(X,Y) , 0
160 X = SIN(I) * SIZE + SX
170 Y = COS(I) * SIZE + SY
180 PRINT I , X , Y
190 LINE (SX,SY)-(X,Y)
200 NEXT I
というかgosub化
120 SX=480:SY=480:SIZE=400
130 PI=3.14159263#
140 DEGREES_360=2*PI
150 DEGREES_1=DEGREES_360/360
155 '
160 *LOOP
170 GOSUB *DRAWC
180 GOTO *LOOP
190 '
200 *DRAWC
210 FOR I=0 TO 360 STEP 1
220 GOSUB *DRAW_LINE
230 NEXT I
240 RETURN
250 '
260 *DRAW_LINE ' DRAW_LINE(INT I)
270 DRAW_LINE_I = DEGREES_1 * I
280 LINE (SX,SY)-(X,Y) , 0
290 X = SIN(DRAW_LINE_I) * SIZE + SX
300 Y = COS(DRAW_LINE_I) * SIZE + SY
310 LINE (SX,SY)-(X,Y), 4
320 RETURN
時間取得用のSUB作る
120 SX=480:SY=480:SIZE=400
130 PI=3.14159263#
140 DEGREES_360=2*PI
150 DEGREES_1=DEGREES_360/360
160 *LOOP
170 GOSUB *DRAWC
180 GOTO *LOOP
190 '
200 *DRAWC
210 FOR I=0 TO 360 STEP 1
220 GOSUB *GET_TIME
230 PRINT "HH= " ,HH,"MM= " ,MM,"SS= " ,SS
240 NEXT I
250 RETURN
260 '
:::
340 '
350 *GET_TIME ' (HH:MM:SS) = GET_TIME()
360 HH=VAL( MID$(TIME$, 1, 2 ))
370 MM=VAL( MID$(TIME$, 4, 2 ))
380 SS=VAL( MID$(TIME$, 7, 2 ))
390 RETURN
時計完成
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 '
160 *LOOP
170 CLS 2
180 GOSUB *GET_TIME
190 GOSUB *DRAWC
200 GOTO *LOOP
210 END
220 '
230 *DRAWC
240 HH = HH MOD 12 ' 12時間に丸める
250 I=SS*(360/60):SIZE=400:CL=1:GOSUB *DRAW_LINE
260 I=MM*(360/60):SIZE=200:CL=4:GOSUB *DRAW_LINE
270 I=HH*(360/12):SIZE=100:CL=2:GOSUB *DRAW_LINE
280 RETURN
290 '
300 *DRAW_LINE ' DRAW_LINE(INT I)
310 DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180) ' -- +180(1 PI rad) 時計用にずらして反転
320 ' LINE (SX,SY)-(X,Y) , 0
330 X = SIN(DRAW_LINE_I) * SIZE + SX
340 Y = COS(DRAW_LINE_I) * SIZE + SY
350 LINE (SX,SY)-(X,Y), CL
360 RETURN
370 '
380 *GET_TIME ' (HH:MM:SS) = GET_TIME()
390 HH=VAL( MID$(TIME$, 1, 2 ))
400 MM=VAL( MID$(TIME$, 4, 2 ))
410 SS=VAL( MID$(TIME$, 7, 2 ))
420 RETURN
ほげ 消し方変えてみる
100 CLS 2
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 '
160 *LOOP
170 SSCL=0:MMCL=0:HHCL=0:GOSUB *DRAWC
180 GOSUB *GET_TIME
190 SSCL=1:MMCL=4:HHCL=2:GOSUB *DRAWC
200 GOTO *LOOP
210 END
220 '
230 *DRAWC ' DRAWC(COLOR SSCL, COLOR MMCL, COLOR HHCL)
240 HH = HH MOD 12 ' 12時間に丸める
250 I=SS*(360/60):SIZE=400:CL=SSCL:GOSUB *DRAW_LINE
260 I=MM*(360/60):SIZE=200:CL=MMCL:GOSUB *DRAW_LINE
270 I=HH*(360/12):SIZE=100:CL=HHCL:GOSUB *DRAW_LINE
280 RETURN
290 '
300 *DRAW_LINE ' DRAW_LINE(DEGREE I)
310 DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180) ' -- +180(1 PI rad) 時計用にずらして反転
320 ' LINE (SX,SY)-(X,Y) , 0
330 X = SIN(DRAW_LINE_I) * SIZE + SX
340 Y = COS(DRAW_LINE_I) * SIZE + SY
350 LINE (SX,SY)-(X,Y), CL
360 RETURN
370 '
380 *GET_TIME ' (HH:MM:SS) = GET_TIME()
390 HH=VAL( MID$(TIME$, 1, 2 ))
400 MM=VAL( MID$(TIME$, 4, 2 ))
410 SS=VAL( MID$(TIME$, 7, 2 ))
420 RETURN
盤面かく
100 CLS 2
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 '
160 GOSUB *DRAW_LABEL
170 *LOOP
180 SSCL=0:MMCL=0:HHCL=0:GOSUB *DRAWC
190 GOSUB *GET_TIME
200 SSCL=1:MMCL=4:HHCL=2:GOSUB *DRAWC
210 GOTO *LOOP
220 END
230 '
240 ' ------------------------------------------------------------
250 '
260 *GET_LOCATE ' (X, Y) = GET_LOCATE(DEGREE I)
270 ' -- +180(1 PI rad) 時計用にずらす。
280 DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180)
290 X = SIN(DRAW_LINE_I) * SIZE + SX
300 Y = COS(DRAW_LINE_I) * SIZE + SY
310 RETURN
320 '
330 *DRAW_LINE ' DRAW_LINE(DEGREE I)
340 GOSUB *GET_LOCATE
350 LINE (SX,SY)-(X,Y), CL
360 RETURN
370 '
380 *DRAWC ' DRAWC(COLOR SSCL, COLOR MMCL, COLOR HHCL)
390 HH = HH MOD 12 ' 12時間に丸める
400 I=SS*(360/60):SIZE=300:CL=SSCL:GOSUB *DRAW_LINE
410 I=MM*(360/60):SIZE=200:CL=MMCL:GOSUB *DRAW_LINE
420 I=HH*(360/12):SIZE=100:CL=HHCL:GOSUB *DRAW_LINE
430 RETURN
440 '
450 *GET_TIME ' (HH:MM:SS) = GET_TIME()
460 HH=VAL(MID$(TIME$,1,2))
470 MM=VAL(MID$(TIME$,4,2))
480 SS=VAL(MID$(TIME$,7,2))
490 RETURN
500 '
510 *DRAW_LABEL ' DRAW_LABEL()
520 FOR MM=0 TO 60:SIZE=320:I=MM*(360/60):GOSUB *GET_LOCATE:PSET (X,Y):NEXT MM
530 FOR HH=0 TO 11:SIZE=320:I=HH*(360/12):GOSUB *GET_LOCATE:CIRCLE (X,Y),5:NEXT HH
540 RETURN
ネタ
100 CLS 2
110 SX=480:SY=480:SIZE=400
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 '
160 GOSUB *DRAW_LABEL
170 *LOOP
180 SSCL=0:MMCL=0:HHCL=0:GOSUB *DRAWC
190 GOSUB *GET_TIME
200 SSCL=1:MMCL=4:HHCL=2:GOSUB *DRAWC
210 GOTO *LOOP
220 END
230 '
240 ' ------------------------------------------------------------
250 '
260 *GET_LOCATE ' (X, Y) = GET_LOCATE(DEGREE I)
270 ' -- +180(1 PI rad) 時計用にずらす。
280 DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180)
290 X = SIN(DRAW_LINE_I) * SIZE + SX
300 Y = COS(DRAW_LINE_I) * SIZE + SY
310 RETURN
320 '
330 *DRAW_LINE ' DRAW_LINE(DEGREE I)
340 GOSUB *GET_LOCATE
350 LINE (SX,SY)-(X,Y), CL
360 RETURN
370 '
380 *DRAWC ' DRAWC(COLOR SSCL, COLOR MMCL, COLOR HHCL)
390 HH = HH MOD 12 ' 12時間に丸める
400 I=SS*(360/60):SIZE=300:CL=SSCL:GOSUB *DRAW_LINE
410 I=MM*(360/60)+SS*(360/60/60):SIZE=200:CL=MMCL:GOSUB *DRAW_LINE
420 I=HH*(360/12)+MM*(360/60/12)+SS*(360/60/60/12):SIZE=100:CL=HHCL:GOSUB *DRAW_LINE
430 RETURN
440 '
450 *GET_TIME ' (HH:MM:SS) = GET_TIME()
460 HH=VAL(MID$(TIME$,1,2))
470 MM=VAL(MID$(TIME$,4,2))
480 SS=VAL(MID$(TIME$,7,2))
490 RETURN
500 '
510 *DRAW_LABEL ' DRAW_LABEL()
520 FOR MM=0 TO 60:SIZE=320:I=MM*(360/60):GOSUB *GET_LOCATE:PSET (X,Y):NEXT MM
530 FOR HH=0 TO 11:SIZE=320:I=HH*(360/12):GOSUB *GET_LOCATE:CIRCLE (X,Y),5:NEXT HH
540 RETURN
ちょいちいさくしよう
100 CLS 2
110 SX=180:SY=180:MSIZE=100
120 PI=3.14159263#
130 DEGREES_360=2*PI
140 DEGREES_1=DEGREES_360/360
150 '
160 GOSUB *DRAW_LABEL
170 *LOOP
180 SSCL=0:MMCL=0:HHCL=0:GOSUB *DRAWC
190 GOSUB *GET_TIME
200 SSCL=1:MMCL=4:HHCL=2:GOSUB *DRAWC
210 GOTO *LOOP
220 END
230 '
240 ' ------------------------------------------------------------
250 '
260 *GET_LOCATE ' (X, Y) = GET_LOCATE(DEGREE I)
270 ' -- +180(1 PI rad) 時計用にずらす。
280 DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180)
290 X = SIN(DRAW_LINE_I) * SIZE + SX
300 Y = COS(DRAW_LINE_I) * SIZE + SY
310 RETURN
320 '
330 *DRAW_LINE ' DRAW_LINE(DEGREE I, SIZE SIZE, COLOR CL)
340 GOSUB *GET_LOCATE
350 LINE (SX,SY)-(X,Y), CL
360 RETURN
370 '
380 *DRAWC ' DRAWC(COLOR SSCL, COLOR MMCL, COLOR HHCL)
390 HH = HH MOD 12 ' 12時間に丸める
400 SIZE=MSIZE-2:CL=SSCL:I=SS*(360/60):GOSUB *DRAW_LINE
410 SIZE=SIZE/2:CL=MMCL:I=MM*(360/60)+SS*(360/60/60):GOSUB *DRAW_LINE
420 SIZE=SIZE/2:CL=HHCL:I=HH*(360/12)+MM*(360/60/12)+SS*(360/60/60/12):GOSUB *DRAW_LINE
430 RETURN
440 '
450 *GET_TIME ' (HH:MM:SS) = GET_TIME()
460 HH=VAL(MID$(TIME$,1,2))
470 MM=VAL(MID$(TIME$,4,2))
480 SS=VAL(MID$(TIME$,7,2))
490 RETURN
500 '
510 *DRAW_LABEL ' DRAW_LABEL()
520 FOR MM=0 TO 60:SIZE=MSIZE:I=MM*(360/60):GOSUB *GET_LOCATE:PSET (X,Y):NEXT MM
530 FOR HH=0 TO 11:SIZE=MSIZE:I=HH*(360/12):GOSUB *GET_LOCATE:CIRCLE (X,Y),5:NEXT HH
540 RETURN
移植してみる
#include <stdio.h>
#include <time.h>
#include <math.h>
#ifndef PI
#define PI (3.14159263F)
#endif
#define DEGREES_36
#define DEGREES_1 (DEGREES_36
#define SX 180
#define SY 180
#define MSIZE 100
#define SIN(x) sin(x)
#define COS(x) cos(x)
void CLS(int level)
{
}
void PSET(int x, int y )
{
}
void CIRCLE(int x, int y , int size)
{
}
void LINE(int sx, int sy, int x, int y , int cl )
{
}
void GET_LOCATE(double I, double SIZE, double* X, double* Y)
{
double DRAW_LINE_I;
DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180);
*X = SIN(DRAW_LINE_I) * SIZE + SX;
*Y = COS(DRAW_LINE_I) * SIZE + SY;
return;
}
void DRAW_LINE(double I, double SIZE, int CL)
{
double X,Y;
GET_LOCATE(I, SIZE, &X, &Y);
LINE (SX,SY,X,Y,CL);
return;
}
void DRAWC( double _SIZE,
int HH, int MM, int SS,
int HHCL, int MMCL, int SSCL )
{
int CL, SIZE, I;
HH = HH % 12 ;
SIZE=_SIZE-2;CL=SSCL;I=SS*(360/60);DRAW_LINE(I, CL, SIZE);
SIZE=SIZE/2;CL=MMCL;I=MM*(360/60)+SS*(360/60/60);DRAW_LINE(I, CL, SIZE);
SIZE=SIZE/2;CL=HHCL;I=HH*(360/12)+MM*(360/60/12)+SS*(360/60/60/12);DRAW_LINE(I, CL, SIZE);
return;
}
void GET_TIME( int *HH, int *MM, int *SS )
{
time_t timer;
struct tm *date;
time(&timer);
date = localtime(&timer);
*HH=date->tm_sec;
*MM=date->tm_min;
*SS=date->tm_hour;
return;
}
void DRAW_LABEL(double _SIZE)
{
int MM, HH;
double I, X, Y;
double SIZE = _SIZE;
for(MM=0;MM<60;MM++){I=(double)MM*(360/60);GET_LOCATE(I,SIZE,&X,&Y);PSET (X,Y);};
for(HH=0;HH<12;HH++){I=(double)HH*(360/12);GET_LOCATE(I,SIZE,&X,&Y);CIRCLE (X,Y,5);};
return;
}
int main()
{
double X,Y,SIZE;
int HH,MM,SS;
int HHCL,MMCL,SSCL;
CLS(2);
DRAW_LABEL(MSIZE);
for(;;) {
SSCL=0;MMCL=0;HHCL=0;DRAWC(MSIZE, HH, MM, SS, HHCL, MMCL, SSCL);
GET_TIME(&HH,&MM,&SS);
SSCL=1;MMCL=4;HHCL=2;DRAWC(MSIZE, HH, MM, SS, HHCL, MMCL, SSCL);
}
return 0 ;
}