无限循环的几何 铜牌收录

做一个旋转的立体几何,这个立体几何为三个相互嵌套着的正方体,让这三个大小不一的正方体分别绕着不同的轴线旋转。 1.初始时的就是一个正视图为正方形中心在原点的正方体,称之为初始状态。 2.调整正方体使其两个顶点以及中心在 Z 轴上,此时正方体的正视图为正六边形,也就是展示状态。 3.在旋转的时候,需要将正方体调整回初始状态,旋转完毕后再调整为展示状态。 4.从三维直角坐标系中左手系的来说,最外围的正方体沿着 Y 轴转动,中间的正方体沿着 XOZ 平面中 x+z=0 轴线转动,最内的正方体沿着 XOZ 平面中 x-z=0 轴线转动。

三维旋转球 源码+注释+简单讲解 银牌收录

前言

关于三维的东西远不止这么点内容,也不是我几句话可以讲完的,需要大家扎扎实实的看图形学。不能好高骛远,要扎实、系统的学习。还要注意相关数学知识的学习。

图形学一般是借助矩阵实现的各种转换。我在这篇文章里尽量不用图形学的术语,也不做优化、不加额外功能,只用最简单的三角函数实现,希望大家能从道理上看的清楚明白。

简单讲解

关于一个点,一定要有一个三维坐标,程序中的结构体 POINT3D 就是。

点的初始化由函数 InitPoint() 实现,该函数产生了 n 个半径为 1 的点。

点的运动,是在三维坐标内运动的,包括平移、缩放、旋转等。这个程序只涉及到了旋转,定义了三个方法:RotateX()、RotateY()、RotateZ(),分别实现绕三个轴旋转;可以使用矩阵运算来实现,也可以直接这样算出来。

最后需要将三维世界呈现出来,这里用到一个术语:投影,就是将三维的画面投影到二维上。投影有多种方法,这个球体用的单点透视,因此还需要一个“观察点”,程序中用 viewZ 定义,观

...

视觉错觉艺术 铜牌收录

一、 视觉错觉效果图如下

二、思想

先画小球从左到右排放,然后再到下一行继续重复上一个过程。

三、完整代码如下

///////////////////////////////////////////////////
// 程序名称:视觉错觉艺术图
// 编译环境:VS2019, EasyX_20200902
// 作  者:梦萤花火
// 最后修改:2021-1-24
//
#include <graphics.h>
#include <conio.h>

int x;								// X轴坐标
int y;								// y轴坐标
int g_multiples = 0;				// 倍数:作用是对弧度角进行改变
float g_PI = 3.1415927;				// 圆周率
float g_radianAngle;				// 起始角的弧度


// 实施画单个完整小球的函数
void DrawCe
...

数字拼图游戏 银牌收录

这是一个简易的拼图游戏,一共有 15 个数字方块,将其一行行的排列为 1~15 即可完成。游戏会记录下完成拼图的时间。我想说的是,很多时候,精彩的游戏不一定非要用图片。将游戏的功能和手感都做好,游戏一样好玩。所以我就做了这个拼图游戏当作例子。

游戏:矿井逃生 银牌收录

游戏说明:

矿井里的电路又出问题了。迅速借助你的头灯,在漆黑的矿井里找到出口逃出去吧。

控制说明:

  • 方向键:移动
  • A/S/D/W:移动
  • 鼠标:控制照射方向
  • F2:重来一局
  • ESC:退出游戏

就不放抓图了,有兴趣的运行一下代码看看效果吧,【点这里下载编译后的 exe 文件】。

以下是全部源代码:

///////////////////////////////////////////////////
// 程序名称:矿井逃生
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200727
// 作  者:yangw80 <yw80@qq.com>
// 最后修改:2013-11-15
//
#include <graphics.h>
#include <time.h>
#include 
...

[图像处理] 将图片转换为马赛克效果 铜牌收录

这个程序将图片转换为马赛克效果。

算法原理:求出每个小方块内所有像素的颜色平均值,然后用来设置为该小方块的颜色。依次处理每个小方块,即可实现马赛克效果。

完整代码如下:

/////////////////////////////////////////////////////////
// 程序名称:将图片转换为马赛克效果
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200727
// 作    者:krissi <zh@easyx.cn>
// 最后修改:2013-4-22
//
#include <graphics.h>
#include <conio.h>

// 将图片转换为马赛克效果
// 参数:
//		pimg: 待处理的 IMAGE 对象指针
//		tilesize: 马赛克的尺寸
//		startx: 马赛克的平铺起始位置 x 坐标
//		starty: 马赛克的平铺起始位置 y 坐标
vo
...

台球斯诺克 铜牌收录

一款桌球游戏,简单模拟斯诺克。

底部力度条,可以控制击球力度。

按键 P 可以固定某个力度进行击球。

鼠标右键退出游戏。

附件下载(vs 2019 版):

snooker1.2

钟表模拟程序(表针形式) 铜牌收录

这是个简单的表针式时钟模拟程序。

运行效果如下:

在源代码的基础上,可以通过 API 函数 mciSendString 轻松加上滴答声音,我就不再多写了。

代码如下:

////////////////////////////////////////////
// 程序名称:钟表模拟程序(表针形式)
// 编译环境:Visual C++ 6.0 ~ 2019,EasyX_20210730
// 程序编写: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, 
...

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

基于上篇文章 Mandelbrot Set (曼德布洛特集) 的源代码:
https://codebus.cn/yangw/mandelbrot-set

我修改了几个地方:

  1. 修改了颜色,使用黑->蓝->白->棕->黑这样的渐变颜色方案(当然,可以修改 InitColor() 函数改变配色方案)

  2. 增加了放大鼠标选中区域的功能。按鼠标中键可以恢复原尺寸。

  3. 将迭代次数提了出来,定义了常量。如果需要绘制更精细的图,请加大常量 ITERATIONS。不过越大绘制的越慢。精细程度开始看不出来,放大次数多了就明显了。

  4. 理论上是可以无穷放大,但实际受 double 类型精度的影响,放大到一定程度就会是马赛克了。

先看看逐步放大的效果吧:

另一个位置的逐步放大效果:

代码如下:

...

合成立方体 (模仿) 铜牌收录

游戏介绍

在 4399 上面看到一个很有趣的小游戏:合成立方体(游戏原地址)。

游戏中,玩家需要通过所给的形状去尽可能拼凑出完整的一行一列,然后完整的行列会增加分数,一旦所给的形状无法被塞下,游戏结束。非常简单的游戏,我用了 EasyX 去复原了一下。

游戏运行截图如下:

游戏源码下载

点击这里下载游戏完整源代码