# 计算机图形学中的中点画线，中点画圆，Bresenham画线与画圆算法

 #include#include  // 这样引用 EasyX 图形库#include#include#include#includeusing namespace std; //Bresenham画线void Bresenham_line(int x0,int y0,int x1,int y1){ int x,y,dx,dy; float k,e; dx=x1-x0; dy=y1-y0; k=dy/dx;//这里是完成k值的初始化 e=-0.5; x=x0; y=y0; //这里的i每次都是加一个格字，直到终点，y这是选择性的加一或者不加 for(int i=0;i<=dx;i++) {  //画点的函数 putpixel(x,y,255); x=x+1; e=e+k; if(e>=0) { y=y+1; e=e-1;//如果e大于零了就要马上减一 } }} //中点画线void MidpointLine(int x0,int y0,int x1,int y1){ int a,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=2*a+b; //这里的2是为了避免小数的计算 delta1=2*a; delta2=2*(a+b); x=x0; y=y0; putpixel(x,y,255); while(x= 0 ? 1 : (b = -b, -1));   int delty = (a <= 0 ? 1 : (a = -a, -1)); for(int i=0;i<=400;i++) {putpixel(i, 200, color);putpixel(200, i, color);} putpixel(x+200, y+200, color); int d, delt1, delt2; if (-a <= b)  // 斜率绝对值 <= 1 {  d = 2 * a + b;  delt1 = 2 * a;  delt2 = 2 * (a + b);  while(x != x2)  {   if (d < 0)    y += delty, d += delt2;   else    d += delt1;   x += deltx;   putpixel(x+200, y+200, color);  } } else    // 斜率绝对值 > 1 {  d = 2 * b + a;   delt1 = 2 * b;  delt2 = 2 * (a + b);  while(y != y2)   {    if(d < 0)    d += delt1;    else     x += deltx, d += delt2;    y += delty;    putpixel(x+200, y+200, color);  }  }} //中点画圆void MidpointCircle(int x0,int y0,int r,int color) { int x=0,y=r; float d=5.0/4-r; while(x<=y){ putpixel(x0+x,y0+y,color); putpixel(x0+x,y0-y,color); putpixel(x0-x,y0+y,color); putpixel(x0-x,y0-y,color); putpixel(x0+y,y0+x,color); putpixel(x0+y,y0-x,color); putpixel(x0-y,y0+x,color); putpixel(x0-y,y0-x,color); if(d<0) d+=x*2.0+3; else{ d+=2.0*(x-y)+5;y--; }  x++; }} //Bresenhem画圆 void BresenhemCircle(int centerx, int centery, int radius, int color){ int x =0; int y = radius; int delta = 2*(1-radius); int direction; while (y >= 0) {   putpixel(centerx+x, centery+y, color);   putpixel(centerx-x, centery+y, color);   putpixel(centerx-x, centery-y, color);   putpixel(centerx+x, centery-y, color);  if (delta < 0) {   if ((2*(delta+y)-1) < 0) {    direction = 1;   }   else {    direction = 2;   }  }  else if(delta > 0) {   if ((2*(delta-x)-1) <= 0) {    direction = 2;   }   else {    direction = 3;   }  }  else {   direction=2;  }  switch(direction) {  case 1:   x++;   delta += (2*x+1);   break;  case 2:   x++;   y--;   delta += 2*(x-y+1);   break;  case 3:   y--;   delta += (-2*y+1);   break;  } }} void main(){ int x0,y0,x1,y1; initgraph(640, 480);  Bresenham_line(10,10,56,56); MidpointLine2(0,100,369,0,255);  MidpointCircle(100,100,50,255); BresenhemCircle(100,100,100,255); getch();    // 按任意键继续 closegraph();   // 关闭图形界面} 多的也不说了，源码直接可以使用，而且还是带有坐标轴的

## 计算机图形学DDA画线法+中点画线法+Bresenham画线法

#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> void line1(){ line(100, 100, 200, 400); line(100, 400, 200, 100); line(0, 200, 300, 300); line(0, 300, 300, 200); } void lineDDA(int x0, int y0, int x1,

## 计算机图形学-mac系统下Xcode中OpenGL开发环境配置。

mac系统下Xcode中OpenGL开发环境配置. 这学期有计算机图形学的课程,需要用到OpenGL,最近着手开始配置开发环境了,老师上课给的安装包都是基于windows系统的.网上也是windows上配置的教程比较多,Mac版的比较少.我综合了几个教程并自己总结,实践成功.特来分享配置过程.希望能帮到大家! 介绍 OpenGL(Open Graphics Library)是定义了一个跨编程语言,跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维亦可),是一个功能强大,与硬件无关,调

## 图形学中的画线算法之 &quot;DDA&quot;算法

DDA算法画直线,其理论依据:如 m 表示直线斜率, 那么有斜率 m  =  (y2 - y1) / (x2 - x1), ∴ m = Δy / Δx ,   从而有对于沿直线给定的 x 任何增量Δx,计算出对应的y的增量  Δy = m • Δx :  同理: Δx = Δy / m: 假设斜率  |m| <= 1:即 x 的长度大于  y的长度.现以 x 单位间距为增量,逐个计算  y 值, 有: yk+1 = yk + m; 同理,对于|m| > 1; 我们有: xK+1 = yK +