分(piao)享(qie)别人的算法,代码很短,用了递归。。。qwq
直接上代码(以下是我按照算法码的C++Demo)。。。
个人觉得效果很赞!。。。。
#include <graphics.h>
#include <iostream>
#include <conio.h>
#include <time.h>
#define curDetail 10
void drawLightning(double x1,double y1,double x2,double y2,double displace)
{
if (displace < curDetail) {//当被掐弯的线段达到一个最小值时,画出来(就像切蛋糕,不可切太碎)
line(x1,y1,x2,y2);
}
else {
double mid_x = (x2+x1)/2;///////////////////////////
double mid_y = (y2+y1)/2;///////////////////////////计算一条线段的中间位置
mid_x += (double)((rand()%10)/10.0-0.5)*displace;///(double)((rand()%10)/10.0-0.5)相当于从[-0.5,0.5]随机取数
mid_y += (double)((rand()%10)/10.0-0.5)*displace;///改变这条线段中间的位置,使其歪成两半
drawLightning(x1,y1,mid_x,mid_y,displace/2);////
drawLightning(x2,y2,mid_x,mid_y,displace/2);///继续对这两半进行随机掰弯操作
}
/////////////////////////////////////////////////////////////////////////////////////上面就是主要代码,非常短
}
void main()
{
initgraph(1440, 680);
srand((unsigned)time(NULL));
MOUSEMSG m;
while(1)///不断绘制闪电。。。
{
for(int i=0;i<=3;i++)drawLightning(500,400,m.x,m.y,200);//从(500,400)到鼠标位置画四条闪电
_sleep(15);
cleardevice();
while(MouseHit())
{
m=GetMouseMsg();
}
}
getch();
closegraph();
}
算法转自 http://blog.csdn.NET/u012945598/article/details/18862091
文中注释是按我自己理解打的,有没说明白的或者说的不对的地方请见谅并纠正我的错误qwq
。。
如果有不懂的可以去原文博客那看看(贴出来了)。。

效果截图,动态效果更赞。。自己运行试试吧
直接上代码(以下是我按照算法码的C++Demo)。。。
个人觉得效果很赞!。。。。
#include <graphics.h>
#include <iostream>
#include <conio.h>
#include <time.h>
#define curDetail 10
void drawLightning(double x1,double y1,double x2,double y2,double displace)
{
if (displace < curDetail) {//当被掐弯的线段达到一个最小值时,画出来(就像切蛋糕,不可切太碎)
line(x1,y1,x2,y2);
}
else {
double mid_x = (x2+x1)/2;///////////////////////////
double mid_y = (y2+y1)/2;///////////////////////////计算一条线段的中间位置
mid_x += (double)((rand()%10)/10.0-0.5)*displace;///(double)((rand()%10)/10.0-0.5)相当于从[-0.5,0.5]随机取数
mid_y += (double)((rand()%10)/10.0-0.5)*displace;///改变这条线段中间的位置,使其歪成两半
drawLightning(x1,y1,mid_x,mid_y,displace/2);////
drawLightning(x2,y2,mid_x,mid_y,displace/2);///继续对这两半进行随机掰弯操作
}
/////////////////////////////////////////////////////////////////////////////////////上面就是主要代码,非常短
}
void main()
{
initgraph(1440, 680);
srand((unsigned)time(NULL));
MOUSEMSG m;
while(1)///不断绘制闪电。。。
{
for(int i=0;i<=3;i++)drawLightning(500,400,m.x,m.y,200);//从(500,400)到鼠标位置画四条闪电
_sleep(15);
cleardevice();
while(MouseHit())
{
m=GetMouseMsg();
}
}
getch();
closegraph();
}
算法转自 http://blog.csdn.NET/u012945598/article/details/18862091
文中注释是按我自己理解打的,有没说明白的或者说的不对的地方请见谅并纠正我的错误qwq
如果有不懂的可以去原文博客那看看(贴出来了)。。

效果截图,动态效果更赞。。自己运行试试吧
