110.绘制彩色抛物线

简介: 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;
}
相关文章
如何使用命令生成RSA2密钥
说明:   本帖主要说明如何使用命令来生成RSA2密钥。    使用密钥工具生成RSA2密钥(推荐使用):    帖子地址:[url]https://openclub.alipay.com/read.
2002 12
|
人工智能 算法
AI 0基础学习,数学名词解析
AI 0基础学习,数学名词解析
102 2
|
消息中间件 缓存 运维
|
存储 Kubernetes Docker
Docker 与 K8S学习笔记(十九)—— Pod的配置管理
我们在部署应用时常常会考虑将应用程序与配置文件相分离,这样可以使应用程序更好的复用,并且通过不同配置也能实现更灵活的功能。将应用制作成镜像后,我们可以在启动容器时通过环境变量或挂载文件的方式注入,但是在面临大规模容器集群的场景下就显得力不从心了,因此我们可以使用ConfigMap进行统一配置。 一、
432 0
|
域名解析 存储 缓存
2020-2021 IETF DNS技术热点分析
域名系统(DNS)是互联网基础服务和协议,为互联网服务及资源名称(域名)和IP地址两种标识符体系之间的衔接转换,为互联网可扩展性,应用部署的灵活性,和业务安全稳定提供了基础能力。进入移动互联网和云平台时代,DNS作为核心网络基础设施的地位也正在得到愈发广泛的认同。IETF是互联网技术权威标准组织,也是DNS技术定制标准的主要阵地。本文将概述过去两年(2020-2021)在IETF DNS技术热点,包括当前DNS技术社群讨论的技术问题,创新想法,话题趋势和方向。
2663 3
2020-2021 IETF DNS技术热点分析
|
安全 网络安全 开发工具
SSH 连接远程终端实用教程
SSH 可分为客户端和服务端,服务端是一个守护进程,一般是 sshd 进程,在后台运行并响应来自客户端的请求,提供了对远程请求的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接;客户端一般是 SSH 进程,另外还包含 scp、slogin、sftp 等其他进程。 这篇文章主要讲如何 SSH 连接远程终端,以此记录一下整个配置过程。
757 0
SSH 连接远程终端实用教程
|
弹性计算 PHP Apache
ECS体验感悟
基于ECS搭建云上博客感悟
ECS体验感悟
|
云安全 弹性计算 人工智能
阿里云ACA、ACP和ACE认证考试如何选择?有什么区别?
阿里云认证分为ACA、ACP和ACE三个等级,等级含金量ACE>ACP>ACA,考生应该考取ACA、ACP还是ACE阿里云认证证书呢?阿里云认证等级ACA、ACP和ACE选择
SpringBoot使用Caffeine缓存
springboot使用caffeine
3847 0
|
Java 调度 API
Executor
Executor体系 java中,new一个线程对象是耗费资源的操作,对于需要大量线程创建的场景可以使用线程池来解决。 使用线程池不仅能够降低创建和销毁线程的性能开销,如果合理的设置线程池还能够避免无限制的创建线程资源,保持系统稳定。
1686 0