110.绘制彩色抛物线

#include <graphics.h>
#include <math.h>

/*画抛物线的子函数spara()*/
/*row,col代表抛物线顶点的坐标,x1,y1是抛物线起点相对顶点的坐标*/
/*t为抛物线绕顶点旋转的角度*/
void spara(row,col,x1,y1,t,color)  
int row,col,x1,y1,t,color;
{   
  int n,dx,dy,x,y,x2,y2;
  double ct,st;
  double f,fx,fy,b,a,rx;
  st=(double)t*3.1415926/180.0;		/*把角度转化为弧度*/
  ct=cos(st); st=sin(st);
  n=abs(x1)+abs(y1); n=n+n;			
  dx=1; dy=1; f=0.0;				/*初始化工作*/
  if (x1>0) dx=-1;
  if (y1>0) dy=-1;
  a=y1; b=x1; b=b*b;
  rx=-a-a; fx=2.0*x1*dx+1.0;
  fx=-a*fx; fy=b;
  if (dy<0) fy=-fy;
  x=x1; y=y1;
  x2=(double)x*ct-(double)y*st+2000.5;
  y2=(double)x*st+(double)y*ct+2000.5;
  x2=x2-2000; y2=y2-2000;
  putpixel(row-y2,col+x2,color);
  while (n>0)						/*具体的运算法则见上面的公式*/
    { n=n-1;
	  if (f>=0.0)
	  { x=x+dx;
	    x2=(double)x*ct-(double)y*st+2000.5;
	    y2=(double)x*st+(double)y*ct+2000.5;
	    x2=x2-2000; y2=y2-2000;
	    putpixel(row-y2,col+x2,color);
	    if (fx>0.0) f=f-fx;
	    else f=f+fx;
	    fx=fx+rx;
	    if (fx==0.0||(fx<0.0&&fx-rx>0.0)||(fx>0.0&&fx-rx<0.0))
	      { dy=-dy; fy=-fy; f=-f;}
	  }
	else
	  { y=y+dy;
	    x2=(double)x*ct-(double)y*st+2000.5;
	    y2=(double)x*st+(double)y*ct+2000.5;
	    x2=x2-2000; y2=y2-2000;
	    putpixel(row-y2,col+x2,color);
	    if (fy>0.0) f=f+fy;
	    else f=f-fy;
	  }
    }
  return;
}

void main()
{
  int i,color;
  int gdriver = DETECT , gmode;
  color = 1;
  registerbgidriver(EGAVGA_driver);
  initgraph(&gdriver,&gmode,"..\\bgi");			/*初始化图形界面*/
  for (i=1;i<=4;i++)							/*先画出四个互成90度的抛物线*/
  {
    spara(200,200,100,100,i*90,color);
    color+=3;
    getch();
  }
  color = 1;
  for (i=1;i<=11;i++)							/*再画12个互成30度的抛物线*/
  {	
    spara(200,200,100,100,i*30,color);
    color++;
  }
  getch();
  closegraph();
  return;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程与实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值