時計を作ってみる

中心点は 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_360 (2*PI)
#define DEGREES_1 (DEGREES_360/360)

#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 )
{
 
}

//
// ------------------------------------------------------------
// *GET_LOCATE ' (X, Y) = GET_LOCATE(DEGREE I)
// ------------------------------------------------------------
void  GET_LOCATE(double I, double SIZE, double* X, double* Y)
{
	double DRAW_LINE_I;
	// -- +180(1 PI rad) 時計用にずらす。
	DRAW_LINE_I = DEGREES_1 * ( 360 - I + 180);

	*X = SIN(DRAW_LINE_I) * SIZE + SX;
	*Y = COS(DRAW_LINE_I) * SIZE + SY;
	return;
}

//
// ------------------------------------------------------------
// *DRAW_LINE ' DRAW_LINE(DEGREE I, SIZE SIZE, COLOR CL)
// ------------------------------------------------------------
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;
}


//
// ------------------------------------------------------------
// *DRAWC ' DRAWC(COLOR SSCL, COLOR MMCL, COLOR HHCL)
// ------------------------------------------------------------
void DRAWC( double _SIZE,
			int HH,   int MM,   int SS,
			int HHCL, int MMCL, int SSCL )
{
	int CL, SIZE, I;

	HH = HH % 12 ; // 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;
}

//
// ------------------------------------------------------------
// *GET_TIME ' (HH:MM:SS) = GET_TIME()
// ------------------------------------------------------------
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;
}

//
// ------------------------------------------------------------
// *DRAW_LABEL ' DRAW_LABEL()
// ------------------------------------------------------------
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;
}


// ------------------------------------------------------------
// main
// ------------------------------------------------------------
int main()
{
	double X,Y,SIZE;
	int HH,MM,SS;
	int HHCL,MMCL,SSCL;

	CLS(2);

	DRAW_LABEL(MSIZE);

	// LOOP
	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 ; //END
}