计算机图形学:中点划线法(任意斜率)
第一次学绘图,后来发现书上的SetPixel函数在vc6.0中不能用。就去百度查找了,找了好久才找到easyx(包含graphics.h头文件)。最后又查找了easyx帮助文档找到putpixel(x,y,color)( 在指定位置画一像素)能够代替书上的SetPixel(x,y,color)。
由于书本上只有斜率在0~1范围内的终点划线法,又根据书本上的方法找到了在其它斜率下的情况。
0<=k<=1 |
-1<=k<=0 |
k>1 |
k<-1 |
d=2a+b |
d=2a-b |
d=a+2b |
d=a-2b |
d>0:d2=d1+2a d<=0:d2=d1+2a+2b |
d>0:d2=d1+2a-2b d<=0:d2=d1+2a |
d>0:d2=d1+2a+2b d<=0:d2=d1+2b |
d>0:d2=d1-2a d<=0:d2=d1+2a-2b |
由于在graphics.h头文件中使用initgraph(x,y)建立绘图屏幕 只能是左上角为(0,0)
坐标,x坐标向右,y坐标向下的第一象限。所以在测试数据时候只能写起始坐标(x0,y0)终点坐标(x1,y1)在第一象限内的直线(即x0>=0,x1>=0,y0>=0,y1>=0);
Easyx下载地址:http://www.easyx.cn/downloads/
编程环境:vc6.0(安装了easyx)
运行:windows7旗舰版
至于源代码,等我的作业交上去了在贴上吧,先贴上运行结果
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
//中点画线法斜率为0~1斜率为0~1
void MidPointLine1(int x0,int y0,int x1,int y1)
{//初始一个480*480的绘图屏幕initgraph(480, 480); int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;//在对应的x,y像素点着色putpixel(x,y,GREEN);while(x<x1){if(d<0){x++;y++;d+=delta2;}else{x++;d+=delta1;}//在对应的x,y像素点着色putpixel(x,y,GREEN);//可以把下面这句取消注释,按回车看画线过程。// system("pause");}//为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕getch();closegraph();
}
//斜率>1
void MidPointLine2(int x0,int y0,int x1,int y1)
{//初始一个480*480的绘图屏幕initgraph(480, 480); int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=a+2*b;delta1=2*(a+b);delta2=2*b;x=x0;y=y0;//在对应的x,y像素点着色putpixel(x,y,GREEN);while(y<y1){if(d<0){y++;d+=delta2;}else{y++;x++;d+=delta1;}//在对应的x,y像素点着色putpixel(x,y,GREEN);//可以把下面这句取消注释,按回车看画线过程。// system("pause");}//为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕getch();closegraph();
}
//斜率为-1~0
void MidPointLine3(int x0,int y0,int x1,int y1)
{//初始一个480*480的绘图屏幕initgraph(480, 480); int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a-b;delta1=2*a-2*b;delta2=2*a;x=x0;y=y0;//在对应的x,y像素点着色putpixel(x,y,GREEN);while(x<x1){if(d<0){x++;d+=delta2;}else{x++;y--;d+=delta1;}//在对应的x,y像素点着色putpixel(x,y,GREEN);//可以把下面这句取消注释,按回车看画线过程。// system("pause");}//为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕getch();closegraph();
}//斜率<-1
void MidPointLine4(int x0,int y0,int x1,int y1)
{//初始一个480*480的绘图屏幕initgraph(480, 480); int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=a-2*b;delta1=-2*b;delta2=2*(a-b);x=x0;y=y0;//在对应的x,y像素点着色putpixel(x,y,GREEN);while(y>y1){if(d<0){x++;y--;d+=delta2;}else{y--;d+=delta1;}//在对应的x,y像素点着色putpixel(x,y,GREEN);//可以把下面这句取消注释,按回车看画线过程。// system("pause");}//为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕getch();closegraph();
}
int main()
{int x1,y1,x2,y2;printf("请输入起始点,终点坐标(用空格隔开,回车结束):");scanf("%d %d %d %d",&x1,&y1,&x2,&y2);//根据斜率范围判断对应函数float k=(float)(y2-y1)/(float)(x2-x1);if(k>=0&&k<=1)MidPointLine1(x1,y1,x2,y2);//斜率为0~1 测试数据0 0 320 100else if(k>1)MidPointLine2(x1,y1,x2,y2);//斜率为>1 测试数据0 0 100 320else if(k>=-1&&k<=0)MidPointLine3(x1,y1,x2,y2);//斜率为-1~0 测试数据0 100 200 0elseMidPointLine4(x1,y1,x2,y2);//斜率为<-1 测试数据0 200 100 0}
运行结果:
1.测试数据:0 0 320 100
运行结果:
2.测试数据:0 0 100 320
运行结果:
3.测试数据:0 100 200 0
运行结果:
4.测试数据:0 200 100 0
运行结果:
计算机图形学:中点划线法(任意斜率)相关推荐
- 计算机图形学--中点椭圆算法原理及代码实现
目录 椭圆的几何特性: 算法原理: 代码实现: 说明,我们这里讨论的椭圆都是对称轴平行于坐标轴的椭圆,对于其他方程较为复杂的椭圆我们不做讨论. 椭圆的几何特性: 首先我们考虑椭圆的几何特性.椭圆是抽对 ...
- 中点画线法(计算机图形学)
#include <graphics.h> #include <conio.h> #include <iostream.h>// 使用中点算法画任意斜率的直线(包括 ...
- 计算机图形学(三种画线算法)
第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示 ...
- 计算机图形学 第四章 光栅图形学
第四章 光栅图形学 计算机图形学 第四章 光栅图形学的相关内容,包括:直线段的扫描转换算法.圆弧的扫描转换算法.多边形区域填充.字符的生成.裁剪.反走样 等 Def 光栅显示器:一个像素矩阵(因此,要 ...
- 计算机图形学画图形,计算机图形学(三种画线算法)(示例代码)
第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示 ...
- 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc
计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...
- c语言计算机图形来画八分画圆,计算机图形学:中点画圆算法
在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...
- c语言 绘制任意斜率的直线,绘制任意斜率的直线
<绘制任意斜率的直线>由会员分享,可在线阅读,更多相关<绘制任意斜率的直线(15页珍藏版)>请在人人文库网上搜索. 1.淮海工学院计算机工程学院 实验报告书 课程名: 计算机图 ...
- 【计算机图形学】中点画圆算法和Bresenham画圆算法
在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...
- 计算机图形学05:中点BH算法对任意斜率的直线扫描转换方法
作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...
最新文章
- MyISAM与InnoDB的索引实现
- php实现父子评论,关于php:将一系列父子关系转换为层次树?
- 使用SQL SERVER 2000的全文检索功能
- mysql limit的使用方法
- 漫画:什么是鸡尾酒排序
- Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
- linux 通配符与正则表达式
- 转载:SharePoint技术资料
- postman的基础使用
- javascript高级程序设计pdf_JavaScript八张思维导图
- 【原创】 ES5高效封装WIN10系统教程2020系列(六)ES5封装
- python绘制缓和曲线_CAD中如何绘制缓和曲线
- 目前三大前端主流框架
- 别让西药毁了凉茶!盒马牵手平安堂,能放心喝的凉茶来了
- 编译出现错误:incomplete type ‘WebsocketSession’ used in nested name specifier。
- 部署搭建DNS服务器
- 基于 Spring SSM框架 开发的一套 进存销管理系统
- 应用签名不一致,该应用可能被篡改的问题
- 回忆数学老前辈孙元远先生
- Linux:TTY串口接收中断
热门文章
- 数字信号处理(自学篇)
- 没有人脉如何靠内推进大厂?内推真的那么神吗?带你搞透内推到底是什么
- 剑指offer第9题及扩展 斐波那契数列
- leetcode之Find All Numbers Disappeared in an Array(448)
- 【转】中控系统的概念、特点及功能
- PTA 4-4 查询水果价格
- ThreeJs DRACO压缩并加载gltf模型
- 电子密码锁的设计(Verilog HDL实现)
- C2 - Skyscrapers (hard version),Codeforces Round #622 (Div. 2),单调栈
- 从行业到技术,一位嵌入式er带你清晰总览嵌入式行业职业规划