#include<iostream>
#include<graphics.h>
#include<cmath>
using namespace std;
int longg = 640, heigh = 480;
IMAGE acc[200];
void kuosan(int xo, int yo)//扩散粒子,采用指数实现近密远疏
{
double x, y;
for (int i = 0; i < 10; i++) {
for (int j1 = 0; j1 <= 8; j1++) {
if (rand()%10==6) {//使得粒子数量少一点
x = xo + cos(3.1415926 * (rand() % 20) / 10) * pow(rand() % 8 + 1, j1 - 5);
y = yo + sin(3.1415926 * (rand() % 20) / 10) * pow(rand() % 8 + 1, j1 - 5);
putpixel(x, y, RGB(0, 191, 255));
}
}
}
}
void huizhi(double size)//x=16sin3t,y=13cost
{
double x, y;
for (double i = 0; i < 160; i += 0.01)
{
x = 16 * (sin(i) * sin(i) * sin(i));
y = -(13 * cos(i) - 5 * cos(2 * i) - 2 * cos(3 * i) - cos(4 * i));
x = x * size + 320;
y = y * size + 210;
putpixel(x, y, RGB(0,191,255));
kuosan(x, y);
}
}
int main()
{
initgraph(longg, heigh);
int u = 0;
while (u<200) {
BeginBatchDraw();
huizhi(10+sin(3.1415926*u/100));
getimage(&acc[u], 0, 0, 640, 480);//获取图片之后循环放,直接计算呈现有点卡
EndBatchDraw();
cleardevice();
u++;
}
u = 0;
while (++u) {
putimage(0, 0, &acc[u % 200]);
Sleep(10);//调整播放的速度
}
getchar();
closegraph();
}
//得等大概半分钟才能正常呈现