#include<stdlib.h>
#include<stdio.h>
#include<math.h>
main()
{
int graphdrv=VGA
int graphmode=VGAHI
int i
float k=0.75,dt=0.05,x0,y0,x,y,vx,vy,ax,ay,r1,r2
initgraph(&graphdrv,&graphmode,"\\tc\\bgi")
line(400,0,400,480)line(0,240,640,240)
fillellipse(400,160,20,20)settextstyle(1,0,0)
fillellipse(400,320,20,20)settextstyle(1,0,0)
outtextxy(180,0,"SCATTERED")
outtextxy(180,25,"ALPHA RAY")
settextstyle(3,0,0)
for(i=0i<11i++)
{
y0=80+20*i
y=y0
x=x0=2
vx=1.5
vy=0
r1=sqrt(pow(x/10-40,2)+pow(y/10-16,2))
r2=sqrt(pow(x/10-40,2)+pow(y/10-32,2))
ax=k*((x/10-40)/pow(r1,3)+(x/10-40)/pow(r2,3))
ay=k*((x/10-16)/pow(r1,3)+(y/10-32)/pow(r2,3))
vx=vx+0.5*ax*dt
vy=vy+0.5*ay*dt
loop:x=x+vx*dt
y=y+vy*dt
r1=sqrt(pow(x/10-40,2)+pow(y/10-16,2))
r2=sqrt(pow(x/10-40,2)+pow(y/10-32,2))
ax=k*((x/10-40)/pow(r1,3)+(x/10-40)/pow(r2,3))
ay=k*((y/10-16)/pow(r1,3)+(y/10-32)/pow(r2,3))
vx=vx+0.5*ax*dt
vy=vy+0.5*ay*dt
if(x>639){goto end}
if(x<2){goto end}
if(y<2){goto end}
line(x0,y0,x,y)
line(x0,480-y0,x,480-y)
x0=x
y0=y
goto loop
end:continue
}
while(!kbhit())
closegraph()
}
找一个绘图api,每帧遍历所有种子对象按位置进行绘制即可考虑到涉及大量粒子,可以采用支持硬件加速的库,并且通过批处理进行优化
不嫌烦可以直接从opengl底层写起,否则诸如allegro,csfml等都是可以考虑的选项
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)