通过中点画线法画出坐标原点在左下角的直线,支持要求各种斜率:

《计算机图形学基础》这本书上的中点画线算法只列出了k<1的情况,然后下边是补充的k>1的情况(前提是k>=0)

#include

#include

#include

int xs,ys,xe,ye;

void MidpointLine(int x0,int y0,int x1,int y1)

{

if((x0!=x1)&&(y0!=y1))

{

int a,b,delta1,delta2,d,x,y;

float k=(float)(y1-y0)/(float)(x1-x0);

if(k>=0&&k<=1)

{

a=y0-y1;

b=x1-x0;

d=2*a+b;

delta1=2*a;

delta2=2*(a+b);

x=x0;

y=y0;

glVertex2i(x,y);

while(x

{

if(d<0)

{

x++;

y++;

d+=delta2;

}

else

{

x++;

d+=delta1;

}

glVertex2i(x,y);

}

}

else //if(k>1)

{

a=y0-y1;

b=x1-x0;

d=a+2*b;

delta1=2*(a+b);

delta2=2*b;

x=x0;

y=y0;

glVertex2i(x,y);

while(y

{

if(d<0)

{

y++;

d+=delta2;

}

else

{

y++;

x++;

d+=delta1;

}

glVertex2i(x,y);

}

}

}

else

{

int min,d;

if(x0==x1)

{

int x=x0,y;

y=(y0<=y1)?y0:y1;

d=fabs((double)(y0-y1));

while(d>=0)

{

glVertex2i(x,y);

y++;

d--;

}

}

if(y0==y1)

{

int x,y=y0;

x=(x0<=x1)?x0:x1;

d=fabs((double)(x0-x1));

while(d>=0)

{

glVertex2i(x,y);

x++;

d--;

}

}

}

}

void lineSegment()

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0,0.0,0.0);

glBegin(GL_POINTS);

MidpointLine(xs,ys,xe,ye);

glEnd();

glFlush();

}

void main(int argc,char *argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

printf("输入线段的起点和终点坐标");

scanf("%d,%d,%d,%d",&xs,&ys,&xe,&ye);

glutInitWindowPosition(50,100);

glutInitWindowSize(500,500);

glutCreateWindow("终点画线法");

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,500.0,0.0,500.0);

glutDisplayFunc(lineSegment);

glutMainLoop();

}

line划线计算机图像学,《计算机图形学基础》OpenGL中点画线法画直线(同时支持k1和k1的情况)...相关推荐

  1. 计算机图形学E3——OpenGL 中点画圆

    其他计算机图形学实验见 链接 #include<iostream> #include<GL/glut.h> using namespace std;float bx, by, ...

  2. 【计算机图形学】中点画线法实现任意斜率直线的绘制

    [计算机图形学]中点画线法实现任意斜率直线的绘制 一.中点画线法原理简介 1.建立基础 中点画线法的建立基础是数值微分画线法(DDA),其作为改进算法,沿用了DDA算法的增量思想,针对影响DDA算法效 ...

  3. line划线计算机图像学,【计算机图形学】根本图形元素:直线的生成算法

    [计算机图形学]基本图形元素:直线的生成算法 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net ...

  4. 【计算机图形学】中点画线法实现焦点在x、y轴上的椭圆绘制

    [计算机图形学]中点画线法实现焦点在x.y轴上的椭圆绘制 一.中点画线法原理简介 1.建立基础 中点画线法的原理介绍见直线绘制的博文中点画线法实现任意斜率直线的绘制.基本思路是以下一点在椭圆外/内的位 ...

  5. 【计算机图形学|直线生成算法】中点画线法

    文章目录 概述 一.基本思想 二.构造判别式: 三.递推出增量 优化: 总结: 四.例题分析 五.伪代码 概述 中点画线法(Midpoint Line Algorithm)是一种画线(Line Dra ...

  6. [计算机图形学算法]直线扫描转换算法-中点画线法

    DDA算法用斜截式表示直线方程,简化了乘法运算,但任存在浮点运算. 我们猜想,用别的方式表示直线,是否能把浮点运算也简化为整数运算. 在中点画线法中,我们用Ax+By+C=0的一般式方程来表示直线,即 ...

  7. 【OpenGL C++】画一个空心汉字和一个圆,并填充汉字(中点画线法,中点画圆法,种子填充法)

    内容:画一个空心汉字和一个圆 设计一个画任意直线和圆的算法,可选所学的任一图形扫描转换算法(中点或bresenham算法),不能使用任何画线/画圆的API: 使用画线算法实现空心汉字的绘制,汉字必须为 ...

  8. 图形学--(中点画线法+Bresenham画线算法)

    编程环境:codeblocks+EGE库 用到的函数:putpixel(int x1,int y1,int color)  用某种颜色打亮一个坐标点. 这俩种算法都是用来在计算机上画一条直线的,那么我 ...

  9. 计算机图形学基础如何学,计算机图形学基础思考

    计算机图形学基础思考 2019-08-07 版权声明 举报文章 第3届太平洋计算机图形学学术会议(PaeifieGraphies'95)于8月21日至24日在韩国汉城召开.会议邀请了专家作讲演,题目为 ...

  10. 中点画线法c语言程序,计算机图形学 :中点画圆法

    由于安装了easyx的vc6.0只能用initgraph(x,y)初始化一个x*y的第一象限的画板.所以对于书上的画圆法我们需要稍微进行一点改变.这个算法只能画1/8的圆,其它7/8的圆只能通过对称关 ...

最新文章

  1. linux内核编译静态库,用icc编译Linux内核完美教程[图文]
  2. PyQt5 图形界面 - Qt Designer独立安装包,仅需30M!python图像化界面绘制工具
  3. 有关ftp4j的FTPListParseException异常
  4. 【Python基础】Python中的高效迭代库itertools,排列组合随便求
  5. Delphi 2010 新增功能之: TWICImage 类[4] - 图像的修剪
  6. 批量执行命令(SSH)
  7. 钟薛高雪糕最贵一支66元 创始人:成本40 你爱要不要
  8. 最大值、数据排序、九九乘法表、杨辉三角
  9. Ubuntu免密码输入关机脚本
  10. gmssl编程之签发X509证书
  11. 《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)...
  12. swift3 下标subscript
  13. Blender摄像机环绕运动、动画渲染、视频合成
  14. 【数据结构和算法】赫夫曼树 | 实战演练
  15. 【c++ primer】第五版第十四章习题答案
  16. 【海康威视单个摄像头读取视频流并保存本地】
  17. 英语基础语法——使役动词
  18. 微信域名检测的C#实现
  19. PPT制作小技巧分享
  20. linux 程序切换wifi,linux wpa_supplicant连接无线网络(转)

热门文章

  1. SAP BW顾问如何保持市场竞争力?【转自WKingChen的博客】
  2. 红红火火的丹麦造陆运动,和它恍恍惚惚的“硅谷梦”
  3. .NET Core使用微软官方类库实现汉字简繁切换以及转拼音
  4. windows 无法格式化SD卡
  5. python——t检验和ks检验
  6. EF Core注意事项
  7. Spring3.2.1+Hibernate4.1.7 多数据源动态切换
  8. 【网格压缩测评】MeshQuan、MeshOpt、Draco
  9. linux 部署应用服务器,(小白指南)在 Linux 服务器上安装 Nodejs、Nginx 以及部署 Web 应用...
  10. 2D转换及相关案例实现