📜  C程序使用图形创建钟摆时钟(1)

📅  最后修改于: 2023-12-03 15:00:12.872000             🧑  作者: Mango

C程序使用图形创建钟摆时钟

介绍:

在本文章中,我们将会介绍如何使用C程序,并且结合图形函数创建一个可以显示时间而且拥有钟摆效果的时钟程序。

技术栈:

  • C语言
  • 图形函数:graphics.h

步骤:

  1. 首先,我们需要在C语言中引入一个名为graphics.h的图形库。以下是引入图形库的代码:
#include<graphics.h>
  1. 接着,我们需要初始化一个图形窗口。以下是初始化窗口的代码:
initwindow(400,400,"Clock Window");

上述代码表示创建一个尺寸为400*400,并且窗口名称为Clock Window的图形窗口。

  1. 接下来,我们需要获取当前时间,并将小时,分钟和秒钟数分别存入变量中。以下是获取当前时间的代码:
time_t currentTime;
struct tm *localTime;

currentTime = time(NULL);        //获取当前时间
localTime = localtime(&currentTime);  //转换为本地时间

int hour = localTime->tm_hour;
int minute = localTime->tm_min;
int second = localTime->tm_sec;

上述代码中,我们使用了C++内置的时间库。

  1. 接下来,我们需要使用C++中的数学库以及graphics.h图形库中的一些函数来绘制时钟面板,表针和钟摆效果。以下是绘制时钟面板的示例代码:
// 绘制外圆
circle(cx, cy, r);
setfillstyle(SOLID_FILL, LIGHTGRAY);
floodfill(cx, cy, WHITE);
 
// 绘制刻度线
line(x,y,x+rx,y+ry);

对于表针和钟摆效果的绘制,可以使用如下示例代码:

// 绘制指针
line(x, y, x1, y1);
line(x, y, x2, y2);

// 实现钟摆效果
int l=4;  //摆长
double pi=3.1415926535;
double t=1.0;
double a=-pi/2.0+pi/2.0*sin(t)-asin((double)l*sin(t)/(double)r);
int x3=r*cos(a);
int y3=r*sin(a);

line(cx,cy,cx+x3,cy+y3);
  1. 最后,我们将时针,分针和秒针的指针效果结合起来,就可以呈现出完整的钟摆时钟了。下面是完整的代码片段:
#include<graphics.h>
#include<time.h>
#include<math.h>

void drawClock(int cx, int cy, int r, int hour, int minute, int second)
{
    // 计算时针,分针和秒针的指针效果
    int second_angle = second * 6;
    int minute_angle = (minute * 6) + (second_angle / 60);
    int hour_angle = (hour * 30) + (minute_angle / 12);

    // 计算指针的坐标
    int x = cx, y = cy;
    int x1 = cx + (int)((double)r * 0.4 * sin(hour_angle * 3.14 / 180));
    int y1 = cy - (int)((double)r * 0.4 * cos(hour_angle * 3.14 / 180));
    int x2 = cx + (int)((double)r * 0.6 * sin(minute_angle * 3.14 / 180));
    int y2 = cy - (int)((double)r * 0.6 * cos(minute_angle * 3.14 / 180));
    int x3 = cx + (int)((double)r * 0.8 * sin(second_angle * 3.14 / 180));
    int y3 = cy - (int)((double)r * 0.8 * cos(second_angle * 3.14 / 180));

    // 绘制外圆
    circle(cx, cy, r);
    setfillstyle(SOLID_FILL, LIGHTGRAY);
    floodfill(cx, cy, WHITE);

    // 绘制12个刻度线
    double pi = 3.1415926;
    double ang = 30;
    for (int i = 0; i < 12; i++)
    {
        int rx = r * cos(ang * pi / 180);
        int ry = r * sin(ang * pi / 180);
        int x = cx + rx, y = cy - ry;
        line(x, y, x + rx / 10, y - ry / 10);
        ang += 30.0;
    }

    // 绘制指针
    line(x, y, x1, y1);
    line(x, y, x2, y2);
    line(cx, cy, x3, y3);

    // 实现钟摆效果
    int l=4;  //摆长
    pi=3.1415926535;
    double t=1.0;
    double a=-pi/2.0+pi/2.0*sin(t)-asin((double)l*sin(t)/(double)r);
    x3=r*cos(a);
    y3=r*sin(a);
    line(cx,cy,cx+x3,cy+y3);
}

int main()
{
    // 初始化图形窗口
    initwindow(400,400,"Clock Window");

    while(1)
    {
        // 获取当前时间
        time_t currentTime;
        struct tm *localTime;

        currentTime = time(NULL);
        localTime = localtime(&currentTime);

        int hour = localTime->tm_hour;
        int minute = localTime->tm_min;
        int second = localTime->tm_sec;

        // 绘制时钟
        drawClock(200, 200, 150, hour, minute, second);

        // 延迟1秒钟
        delay(1000);

        // 清空画布重新开始绘制
        cleardevice();
    }

    getch();
    return 0;
}

总结:

本文介绍了使用C语言和图形函数创建钟摆时钟,包含了绘制表针和钟摆效果的方法,可以帮助大家更好地理解C语言和图形函数的使用。