
系列文章
| 序号 | 直达链接 |
| 1 | C/C++爱心代码 |
| 2 | C/C++跳动的爱心 |
| 3 | C/C++李峋同款跳动的爱心代码 |
| 4 | C/C++满屏飘字表白代码 |
| 5 | C/C++大雪纷飞代码 |
| 6 | C/C++烟花代码 |
| 7 | C/C++黑客帝国同款字母雨 |
| 8 | C/C++樱花树代码 |
| 9 | C/C++奥特曼代码 |
| 10 | C/C++圣诞树代码 |
写在前面
C语言实现简单版的跳动的红色爱心。
语言需求:C语言
环境需求:DevCpp
完整代码
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <tchar.h>
float f(float x, float y, float z) {
float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}
float h(float x, float z) {
for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
if (f(x, y, z) <= 0.0f)
return y;
return 0.0f;
}
int main() {
……
}
代码分析
这段代码实现了一个跳动的爱心图案的动画效果,下面是代码的详细分析。
1.引入了需要的头文件
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <tchar.h>
2.定义了两个函数
float f(float x, float y, float z):计算指定坐标点(x, y, z)处的函数值。该函数的计算公式是(x * x + 9.0f / 4.0f * y * y + z * z - 1) * (x * x + 9.0f / 4.0f * y * y + z * z - 1) * (x * x + 9.0f / 4.0f * y * y + z * z - 1) - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z。float h(float x, float z):根据给定的 x 和 z 坐标,求出在相应平面上的 y 坐标。该函数通过迭代计算从 y=1.0f 逐渐减小到 y=0.0f,找到满足函数 f(x, y, z)<=0 的最小 y 值。
3.定义主函数 int main()
- 设置控制台的颜色和大小。
- 获取控制台窗口句柄并获取窗口的位置和大小信息。
- 计算窗口在屏幕中应该出现的位置,并使用
SetWindowPos函数设置窗口位置。 - 进入一个无限循环来实现动画效果。
- 在每次循环中,先清空缓冲区
buffer。 - 使用一个变量
t作为时间变量,每轮循环增加 0.1f,用于控制爱心的跳动速度。 - 使用变量
s计算 sin(t) 的平方,作为爱心的大小因子。 - 使用变量
a计算 s^4 * 0.2f,作为爱心的形状调整因子。 - 遍历 z 坐标,从 1.3f 到 -1.2f,步长为 0.1f。
- 在每个 z 坐标下,遍历 x 坐标,从 -1.5f 到 1.5f,步长为 0.05f。
- 计算当前点 (x, 0.0f, z) 的函数值 v。
- 如果 v <= 0,说明当前点在爱心的内部,需要绘制到缓冲区。
- 计算当前点 (x, 0.0f, z) 对应的曲面上的 y 坐标 y0。
- 计算当前点在 x 方向和 z 方向上的梯度 ny 和 nz。
- 根据梯度计算法向量的长度并标准化。
- 计算当前点的深度值 d,用来选择合适的字符来绘制。
- 将计算得到的字符存储到缓冲区
buffer中。 - 将缓冲区的内容输出到控制台。
- 通过调用
Sleep函数控制动画的帧率。
总结:这段代码通过使用函数计算和动态绘制,实现了一个跳动的爱心图案的动画效果。
写在后面
我是一只有趣的兔子,感谢你的喜欢!



















