CodeBus

分享代码,一起进步~

钟表模拟程序(表针形式)

这是个简单的表针式时钟模拟程序。运行效果如下: 在源代码的基础上,可以通过 API 函数 mciSendString 轻松加上滴答声音,我就不再多话了。 完整的 VC 源代码如下: //////////////////////////////////////////// // 程序名称:钟表模拟程序(表针形式) // 编译环境:Visual C++ 6.0,EasyX 2013白露版 // 程序编写:BestAns <BestAns@qq.com> // 最后更新:2010-10-30 // #include <graphics.h> #include <conio.h> #include <math.h> #define PI 3.1415926536 void DrawHand(int hour, int minute, int second) { double a_hour, a_min, a_sec; // 时、分、秒针的弧度值 int x_hour, y_hour, x_min, y_min, x_s... [更多...]

用多个圆形组合形成的心形图案

这个程序在很多书上都有写过,以下是运行效果截图: 完整的 VC 源代码如下: // 程序名称:圆形组合而成的心形图案 // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-10-28 // #include <graphics.h> #include <conio.h> #include <math.h> #define PI 3.1415926536 void main() { int x, y, y1, r = 50, r1; // 初始化图形模式 initgraph(640, 480); // 设置原点为屏幕中央 setorigin(320, 240); // 设置绘图颜色为红色 setcolor(RED); // 用数学方法,用多个圆形组合形成心形图案 y1 = 240 - r; for(double a = 0; a < 2 * PI; a += PI / 18) { x = (int)(r * cos(a)); y = (int)(r * sin(... [更多...]

三维旋转球 源码+注释+简单讲解

关于三维的东西远不止这么点内容,也不是我几句话可以讲完的,需要大家扎扎实实的看图形学。不能好高骛远,要扎实、系统的学习。还要注意相关数学知识的学习。 过去我写了一些简单教程(以后还会写),但是这篇文章不算教程。我写这篇文章,是想表达我前面的看法,希望大家能认识到。 我在这篇文章里尽量不用图形学的术语,也不做优化、不加额外功能,只希望大家能从道理上看的清楚明白。 简单讲一下: 关于一个点,一定要有一个三维坐标,程序中的结构体 POINT3D 就是; 点的初始化由函数 InitPoint() 实现,该函数产生了 n 个半径为 1 的点; 点的运动,是在三维坐标内运动的,包括平移、缩放、旋转等。这个程序只涉及到了旋转,定义了三个方法:RotateX()、RotateY()、RotateZ(),分别实现绕三个轴旋转; 最后需要将三维世界呈现出来,这里用到一个术语:投影,就是将三维的画面投影到二维上。投影有多种方法,这个球体用一点透视就可以。还需要一个“观察点”,程序中用 viewZ 定义,具体的观察点坐标是:(0, 0, viewZ)。函数 Projection() ... [更多...]

[分形学] 可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码

基于上篇文章 Mandelbrot Set (曼德布洛特集) 的源代码:http://www.codebus.cn/yw80/post/mandelbrot-set 我修改了几个地方: 1. 修改了颜色,使用黑->蓝->白->棕->黑这样的渐变颜色方案(当然,大家可以修改 InitColor() 函数改变配色方案) 2. 增加了放大鼠标选中区域的功能。按鼠标中键可以恢复原尺寸。 3. 将迭代次数提了出来,定义了常量。如果需要绘制更精细的图,请加大常量 ITERATIONS。不过越大绘制的越慢。精细程度开始看不出来,放大次数多了就明显了。 4. 理论上是可以无穷放大,但实际受 double 类型精度的影响,放大到一定程度就会是马赛克了。 先看看逐步放大的效果吧: 另一个位置的逐步放大效果: 完整的 VC 源代码如下: // 程序名称:分形学 - 可以无穷放大的 Mandelbrot Set (曼德布洛特集) // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-9-9 // #include <graphic... [更多...]

[分形学] Julia Set (茱莉亚集) VC 源代码

关于 Julia Set (茱莉亚集) 的介绍什么的我就不多说了,网上一大堆。执行效果如图: 关于 Julia Set,可以通过设置复数 c 的初值,显示出不同的图案,比如,大家可以试试以下几组: c.re = 0.45, c.im = -0.1428;c.re = 0.285, c.im = 0.01;c.re = 0.285, c.im = 0;c.re = -0.8, c.im = 0.156;c.re = -0.835, c.im = -0.2321;c.re = -0.70176, c.im = -0.3842; 随便用哪行替换掉源程序中的“c.re = -0.75, c.im = 0;”就可以看到不同的图案了。循环变量 k 是迭代次数,在某些参数下需要高一些会更精细。为了美观,还需要修改一下颜色部分,目前代码中的颜色是这样的: HSLtoRGB((float)((k<<5) % 360), 1.0, 0.5)这行代码中的 k 的取值范围是 0~180,将其映射到 HSL 颜色空间中的色相上(360 度)。 全部 VC 源代码如下: //... [更多...]

[分形学] Mandelbrot Set (曼德布洛特集) VC 源代码

关于 Mandelbrot Set (曼德布洛特集) 的介绍什么的我就不多说了,网上一大堆。执行效果如图: 为了美观,可以修改一下颜色部分,目前代码中的颜色是这样的: HSLtoRGB((float)((k<<5) % 360), 1.0, 0.5) 这行代码中的 k 的取值范围是 0~180,将其映射到 HSL 颜色空间中的色相上(360 度)。 全部 VC 源代码如下: // 程序名称:分形学 - Mandelbrot Set (曼德布洛特集) // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-9-9 // #include <graphics.h> #include <conio.h> ///////////////////////////////////////////////// // 定义复数及乘、加运算 ///////////////////////////////////////////////// // 定义复数 struct COMPLEX { double re; do... [更多...]

打字母游戏

某天突然来兴趣了,就写了这么个打字母的小程序,就是以前学习机上那种字母往下掉,然后按相应键字母消失的游戏。 程序不长,尤其很大篇幅都是开始和结束的文字绘制,除去这些没几行代码了,感觉做个范例还是很有用的。 又补了个小特效,加了点注释。。。一看,整100行,呵呵。 完整的源代码如下: //////////////////////////////////////////// // 程序名称:打字母游戏 // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 程序编写:yangw80 <yw80@qq.com> // 最后更新:2010-8-26 // #include <graphics.h> #include <conio.h> #include <time.h> // 欢迎界面 void welcome() { // 输出屏幕提示 cleardevice(); setcolor(YELLOW); setfont(64, 0, "黑体"); outtextxy(160, 50, "打字母游戏"); se... [更多...]

彩虹

该程序是 EasyX 帮助中带的范例程序。 执行效果如下图: 完整源代码如下: // 程序名称:彩虹 // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-8-25 // #include <graphics.h> #include <conio.h> void main() { float H, S, L; initgraph(640, 480); // 画渐变的天空(通过亮度逐渐增加) H = 190; // 色相 S = 1; // 饱和度 L = 0.7f; // 亮度 for(int y = 0; y < 480; y++) { L += 0.0005f; setcolor( HSLtoRGB(H, S, L) ); line(0, y, 639, y); } // 画彩虹(通过色相逐渐增加) H = 0; S = 1; L = 0.5f; setlinestyle(PS_SOLID, NULL, 2); // 设置线宽为 2 for(int r ... [更多...]

鼠标操作演示

该程序是 EasyX 帮助中的范例程序。 实现的功能是:当移动鼠标时,在鼠标轨迹上画红点,点左键,画一个小方块;按 Ctrl 再点左键,画一个大方块;按鼠标右键退出。 // 程序名称:鼠标操作演示 // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2009-11-23 // #include <graphics.h> #include <conio.h> void main() { // 初始化图形窗口 initgraph(640, 480); MOUSEMSG m; // 定义鼠标消息 while(true) { // 获取一条鼠标消息 m = GetMouseMsg(); switch(m.uMsg) { case WM_MOUSEMOVE: // 鼠标移动的时候画红色的小点 putpixel(m.x, m.y, RED); break; case WM_LBUTTONDOWN: // 如果点左键的同时按下了 Ctrl 键 if ... [更多...]

星空

该程序是 EasyX 帮助中的范例程序。 模拟了星空效果。 完整的源代码如下: // 程序名称:星空 // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2009-2-22 // #include <graphics.h> #include <time.h> #include <conio.h> #define MAXSTAR 200 // 星星总数 struct STAR { double x; int y; double step; int color; }; STAR star[MAXSTAR]; // 初始化星星 void InitStar(int i) { star[i].x = 0; star[i].y = rand() % 480; star[i].step = (rand() % 5000) / 1000.0 + 1; star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5); // 速度越快,颜色越亮 star[i].c... [更多...]