iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现绘制可爱的橘子钟表
  • 326
分享到

C语言实现绘制可爱的橘子钟表

C语言绘制橘子钟表C语言橘子钟表C语言钟表 2022-12-28 18:12:30 326人浏览 八月长安
摘要

目录简介程序截图源码简介 这个橘子钟表程序主要分成三个部分:画表盘、画表针、显示当前时间。画表盘部分运用到了三次贝塞尔曲线、HSL 颜色模型以及字符串格式化命令,其中三次贝塞尔曲线确

简介

这个橘子钟表程序主要分成三个部分:画表盘、画表针、显示当前时间。画表盘部分运用到了三次贝塞尔曲线、HSL 颜色模型以及字符串格式化命令,其中三次贝塞尔曲线确定点的坐标比较复杂。

画表针主要涉及到计算各表针运动的弧度。

显示当前时间所用字体为等宽字体,其作用在于居中后效果更均匀。

程序当中计算三次贝塞尔曲线坐标部分,我定义了 13 个点,其中 0 点和 11 点 12 点重合,3 点和 4 点重合,5 点和 6 点重合,10 点和 9 点重合。这样做的目的是便于确定起始点、控制点和终点。

程序中用到了 Broadway 字体,好像是装 Office 的时候带的字体。如果看不到文字效果,请先安装这个字体。

程序截图

源码

#include <stdio.h>
#include <coNIO.h>
#include <graphics.h>
#include <math.h>
 
const double PI = 3.141592654;	// 定义圆周率
 
 
// 画表盘
void dial()
{
	// 画蓝色背景
	setbkcolor(0xe6cdb4);		// 设置背景色
	cleardevice();				// 清屏
 
	// 画黄色外圆
	setlinestyle(PS_SOLID, 10);	// 设置线宽为十个像素
	setlinecolor(YELLOW);		// 设置画线颜色为黄色
	setfillcolor(WHITE);		// 设置填充颜色为白色
	fillcircle(0, 0, 170);		// 画圆
 
	// 填充扇形颜色
	int r = 150;				// 定义半径为 150
	setlinestyle(PS_SOLID, 2);	// 设置线宽为两像素
	for (int n = 0; n < 10; n++)
	{
		// 画橘子瓣的三次贝塞尔曲线
		POINT pts[13];				// 定义数组,起始点、控制点 1、控制点 2、终点(起点)、控制点 1、控制点 2、终点(起点)……
		double a = 2 * PI * n / 10;	// 橘子瓣弧度
		pts[0].x = int(r / 8 * cos(a + 2 * PI / 22));
		pts[0].y = int(r / 8 * sin(a + 2 * PI / 22));	pts[12] = pts[11] = pts[0];
		pts[1].x = int(r / 12 * cos(a + 2 * PI / 22));	pts[2].x = int(r / 12 * cos(a - 2 * PI / 22));
		pts[1].y = int(r / 12 * sin(a + 2 * PI / 22));	pts[2].y = int(r / 12 * sin(a - 2 * PI / 22));
		pts[3].x = int(r / 8 * cos(a - 2 * PI / 22));
		pts[3].y = int(r / 8 * sin(a - 2 * PI / 22));	pts[4] = pts[3];
		pts[5].x = int(r * cos(a - 2 * PI / 22));
		pts[5].y = int(r * sin(a - 2 * PI / 22));		pts[6] = pts[5];
		pts[9].x = int(r * cos(a + 2 * PI / 22));
		pts[9].y = int(r * sin(a + 2 * PI / 22));		pts[10] = pts[9];
		pts[7].x = int(r * 1.1 * cos(a - 2 * PI / 30));	pts[8].x = int(r * 1.1 * cos(a + 2 * PI / 30));
		pts[7].y = int(r * 1.1 * sin(a - 2 * PI / 30));	pts[8].y = int(r * 1.1 * sin(a + 2 * PI / 30));
 
		int c = HSLtoRGB(36.0f * n, 0.8f, 0.8f);				// 设置彩虹色
		setlinecolor(c);										// 设置画线颜色为彩虹色
		polybezier(pts, 13);									// 画三次贝塞尔曲线	
 
		setfillcolor(c);										// 设置填充色为彩虹色
		floodfill(int(r / 2 * cos(a)), int(r / 2 * sin(a)), c);	// 填充橘子瓣
	}
 
	// 显示表盘细节
	settextcolor(BLACK);				// 设置字体颜色
	setbkmode(TRANSPARENT);				// 设置背景色为透明
	for (int n = 0; n < 12; n++)
	{
		// 整点刻度
		setfillcolor(BLACK);
		solidcircle(int(145 * cos(n * 2 * PI / 12)), -int(145 * sin(n * 2 * PI / 12)), 2);
		solidcircle(int(145 * cos(n * 2 * PI / 4)),  -int(145 * sin(n * 2 * PI / 4)),  4);
 
		// 显示数字
		wchar_t s[10];
		swprintf_s(s, 10, L"%d", 12 - n);		// int 类型转换成 char 类型
 
		// 设置字体、大小及输出
		if ((12 - n) % 3 == 0)	settextstyle(48, 0, L"Broadway");
		else					settextstyle(24, 0, L"Broadway");
 
		// 定义字符串长和宽,居中
		int w, h;
		w = textwidth(s);
		h = textheight(s);
		outtextxy(int(125 * cos(n * 2 * PI / 12 + PI / 2) - w / 2),
				 -int(125 * sin(n * 2 * PI / 12 + PI / 2) - h / 2),
				  s);
	}
}
 
 
// 显示数字时钟
void digital(int h, int m, int s)
{
	// 画显示当前时间的三个小矩形
	setlinecolor(LIGHTGRAY);	// 设置边框颜色为浅灰色
	setfillcolor(WHITE);		// 设置填充颜色为白色
	fillrectangle(-40 - 13, 50, -40 + 13, 50 + 26);
	fillrectangle(     -13, 50,       13, 50 + 26);
	fillrectangle( 40 - 13, 50,  40 + 13, 50 + 26);
 
	// 显示当前时间
	settextstyle(24, 0, L"Consolas");
	wchar_t a[10];
	int w;
	swprintf_s(a, 10, L"%d", h);	w = textwidth(a);	outtextxy(-40 - w / 2, 50, a);
	swprintf_s(a, 10, L"%d", m);	w = textwidth(a);	outtextxy(     -w / 2, 50, a);
	swprintf_s(a, 10, L"%d", s);	w = textwidth(a);	outtextxy( 40 - w / 2, 50, a);
}
 
 
// 画表针
void needles(int h, int m, int s)
{
	double a = PI / 2 - (2 * PI * h / 12 + 2 * PI * 1 / 12 * m / 60);	// 时针所走弧度
	double b = PI / 2 - (2 * PI * m / 60 + 2 * PI * 1 / 60 * s / 60);	// 分针所走弧度
	double c = PI / 2 - 2 * PI * s / 60;								// 秒针所走弧度
 
	setlinecolor(BLACK);												// 设置画线颜色为黑色
	setlinestyle(PS_SOLID, 9);											// 设置线宽为九像素
	line(0, 0, int(50 * cos(a)), int(-50 * sin(a)));					// 画时针
 
	setlinestyle(PS_SOLID, 6);											// 设置线宽为六像素
	line(0, 0, int(100 * cos(b)), int(-100 * sin(b)));					// 画分针
 
	setlinecolor(RED);													// 设置画线颜色为红色
	setlinestyle(PS_SOLID, 3);											// 设置线宽为三像素
	line(int(20 * cos(c + PI)), -int(20 * sin(c + PI)), int(130 * cos(c)), -int(130 * sin(c)));	// 画秒针
}
 
 
// 主函数
int main()
{
	// 创建绘图窗口
	initgraph(640, 480);
	BeginBatchDraw();		// 开启批量绘图
	setorigin(320, 240);	// 设置原点
 
	while (true)
	{
		// 计算
		SYSTEMTIME ti;		// 定义变量保存当前时间
		GetLocalTime(&ti);	// 获取当前时间
 
		// 绘画
		cleardevice();
		dial();										// 画表盘
		digital(ti.wHour, ti.wMinute, ti.wSecond);	// 画数字时钟
		needles(ti.wHour, ti.wMinute, ti.wSecond);	// 画表针
 
		// 延时
		FlushBatchDraw();
		Sleep(1000);
	}
 
	_getch();
	EndBatchDraw();
	closegraph();
	return 0;
}

到此这篇关于C语言实现绘制可爱的橘子钟表的文章就介绍到这了,更多相关C语言钟表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现绘制可爱的橘子钟表

本文链接: https://www.lsjlt.com/news/176118.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现绘制可爱的橘子钟表
    目录简介程序截图源码简介 这个橘子钟表程序主要分成三个部分:画表盘、画表针、显示当前时间。画表盘部分运用到了三次贝塞尔曲线、HSL 颜色模型以及字符串格式化命令,其中三次贝塞尔曲线确...
    99+
    2022-12-28
    C语言绘制橘子钟表 C语言 橘子钟表 C语言 钟表
  • C语言如何实现绘制LoveBeat爱心曲线
    这篇文章主要讲解了“C语言如何实现绘制LoveBeat爱心曲线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现绘制LoveBeat爱心曲线”吧!心形曲线给出心形曲线参数方程如下:...
    99+
    2023-07-05
  • C语言实现基于控制台的电子时钟
    使用c语言制作一个控制台的电子时钟,供大家参考,具体内容如下 学习了c语言基本语法后,在学习了time.h的库文件,让我产生了想制作一款电子时钟的念头,那好就开始动手操作吧。 使用到...
    99+
    2024-04-02
  • C语言实现实时钟表
    本文实例为大家分享了C语言实现实时钟表的具体代码,供大家参考,具体内容如下 一、最终效果展示 效果图如下: 二、绘制静态秒针 代码如下: #include<graphics...
    99+
    2024-04-02
  • C语言实现绘制LoveBeat爱心曲线的示例代码
    目录心形曲线曲线内点的生成曲线外点的生成制作动画示例代码心形曲线 给出心形曲线参数方程如下: x = sin^3(θ) y = (13 * cos(θ) - ...
    99+
    2023-03-08
    C语言实现绘制爱心曲线 C语言绘制爱心曲线 C语言 爱心曲线 C语言 曲线
  • C语言怎么实现基于控制台的电子时钟
    这篇文章主要介绍“C语言怎么实现基于控制台的电子时钟”,在日常操作中,相信很多人在C语言怎么实现基于控制台的电子时钟问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现基于控制台的电子时钟”的疑惑有所...
    99+
    2023-06-30
  • R语言绘制尺子的实现示例
    本文使用基本的绘图命令plot、rect、segments、text绘制一把长10厘米的直尺。话不多说上教程。 1、定义基本单位 xcm <- 0.07 ycm <- 0...
    99+
    2024-04-02
  • Python+Turtle实现绘制可爱的小仓鼠
    目录一、效果展示二、代码详解1.导入库2.播放音乐3.定义画小仓鼠头的函数4.定义画左眼和右眼的函数5.定义画嘴的函数一、效果展示 在介绍代码之前,先来看下本文的实现效果。 可以参...
    99+
    2024-04-02
  • C语言实现电子秒表
    秒表是我们生活中常见的计时工具,特别是在运动会等比赛中,今天我就来写一个简单的电子秒表。 实现思路 这里简单介绍一下我的实现思路: 1、简单版:简单版本只实现了单次计时功能,即每次开...
    99+
    2024-04-02
  • 如何进行R语言绘制尺子的实现
    如何进行R语言绘制尺子的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。下面使用基本的绘图命令plot、rect、segments、text绘制一把长10厘米...
    99+
    2023-06-26
  • C语言如何实现电子秒表
    这篇文章主要介绍“C语言如何实现电子秒表”,在日常操作中,相信很多人在C语言如何实现电子秒表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现电子秒表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • C语言如何实现绘制绕线画
    本篇内容介绍了“C语言如何实现绘制绕线画”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!绕线画简介简单点来说,就是在木板上钉一圈钉子,通过绕线...
    99+
    2023-07-04
  • 利用Go语言实现在终端绘制小兔子
    目录前言创作过程小兔子模型制作实现思路代码小结前言 思来想去,使用 Go 语言创作,没有想到好的创意,最后打算在终端动态打印小兔子,给大家拜年! 先来看看效果图:...
    99+
    2023-01-13
    Go语言终端绘制兔子 Go语言绘制兔子 Go语言 兔子
  • C语言实现绘制绕线画的示例代码
    目录绕线画简介算法简介示例绕线画简介 简单点来说,就是在木板上钉一圈钉子,通过绕线进行构图,最终呈现出一幅图像。 算法简介 可以总结概括一下, 首先需要有一张图,可以是彩色的,但是必...
    99+
    2022-11-13
    C语言实现绕线画 C语言绕线画
  • C语言实现三子棋游戏(棋盘可变)
    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 思路: main函数结构部署 game函数功能的实现 ①创建存储空间 ②初始化存储空间为空格 ③打印棋盘...
    99+
    2024-04-02
  • C语言基于EasyX库实现有图形界面钟表
    本文实例为大家分享了C语言基于EasyX库实现有图形界面钟表的具体代码,供大家参考,具体内容如下 1.目标要求: 实现一个显示图像的时钟 2.C语言代码: #include<g...
    99+
    2024-04-02
  • C语言实现控制台五子棋小游戏
    这是一个用C语言实现的控制台小游戏—-五子棋,棋盘大小和获胜棋子数目是用宏定义的,可以自定义,所以可以轻松改为三子棋、六子棋等等。此游戏设定为人机对战(PVE),电脑走棋是随机的。 ...
    99+
    2024-04-02
  • C语言基于EasyX库怎么实现有图形界面钟表
    这篇文章主要介绍“C语言基于EasyX库怎么实现有图形界面钟表”,在日常操作中,相信很多人在C语言基于EasyX库怎么实现有图形界面钟表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言基于EasyX库怎么...
    99+
    2023-06-29
  • 用C语言实现简单的三子棋
    三子棋代码的实现需要一个简单的思路做指引,所以我们先来做一下思路的整理,代码的实现主要分为以下几个步骤: 1.初始化数组2.显示数组3.电脑走4.玩家走5.判断输赢 所以,先写出源文...
    99+
    2024-04-02
  • C语言实现简单的三子棋项目
    前言 三子棋是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作