C++对称抛物迷幻视界
这是一个使用 C++ 语言和 sprites.h(一个类似 Python Turtle 的绘图库)编写的图形生成程序。
- 核心逻辑 :程序通过一个无限循环
while(true)来不断刷新屏幕,实现动画效果。 - 颜色计算 :利用变量
phase(相位)随时间递增,结合坐标y计算出val值。这个值被用来动态计算颜色的色相 (colorVal) 和明度/饱和度 (shadeVal),从而产生彩虹般的渐变条纹。 - 图形变换 :代码中最巧妙的部分在于
if语句块内的四次绘图操作。它不仅仅绘制原始坐标(x, y),还通过对称变换绘制了(x, -y)、(y, x)和(-y, x)。这使得原本单一的图案在屏幕上形成了四重旋转对称(上下左右及对角线对称),构成了类似"回"字形的结构。 - 形状裁剪 :
if (y - (0.005 * x * x ) > 0 )这行代码定义了一个抛物线区域。只有位于抛物线上方的点才会被绘制,这就解释了为什么屏幕中心会留出一个黑色的、边缘内凹的四角星形空洞。
视频描述: 视频展示了一个极具视觉冲击力的迷幻动画。
- 视觉效果:画面中心是一个黑色的、类似内凹四角星的区域,四周被密集的彩虹色线条填满。
- 动态变化 :随着程序的运行,彩虹色的条纹仿佛在不断地流动和呼吸。由于
phase变量的增加,颜色条纹产生了一种向中心无限延伸或从中心向外扩散的错觉,营造出强烈的纵深感和隧道效应。 - 整体风格:这是一种典型的"生成艺术"(Generative Art),通过简单的数学公式(绝对值、抛物线、线性变换)创造出了复杂且令人 hypnotic(催眠)的视觉体验。
- 本程序所有代码
cpp
#include "sprites.h" //采用C++精灵库
Screen sc;
Sprite t;
int main(){ //C++对称抛物彩虹视界
t.ht().bgcolor("black").tracer(0).speed(0).pu();
// 相位偏移量
int phase = 0;
while(true){
sc.clear();
for(int x=-500; x<=500; x++){
for(int y=-350; y<=350; y++){
double val = abs(y/30.0 + phase/10.0);
int colorVal = 80 * (val + 1);
int shadeVal = 200 * (val * val);
if (y - (0.005 * x * x ) > 0 ) {
t.pencolor(colorVal).penshade(shadeVal);
t.go(x,y+50).dot(2);
t.go(x,-y-50).dot(2);
t.go(y+50,x).dot(2);
t.go(-y-50,x).dot(2);
}
}
}
sc.update();
//数值越大,移动越快
phase += 5;
}
return 0;
}