博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
直线段的扫描转换算法
阅读量:5160 次
发布时间:2019-06-13

本文共 1113 字,大约阅读时间需要 3 分钟。

直线的扫描转换就是确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作。

通常有数值微分法(DDA)、中点画线法、Bresenham算法这三个算法。

数值微分法(DDA):

void LineDDA ( int x0,int y0,int x1,int y1,int color) {
int x,y; float dx,dy,k; dx= float(x1-x0); dy= float(y1-y0); k=dy/dx; if(abs(k)<1) {
for(x=x0; x<=x1, x++) {
Setpixel(x, int(y+0.5), color); y+=k; } } else {
for(y=y0; y<=y1, y++) {
Setpixel(int(x+0.5),y,color); x+=1/k; } } }

中点画线法:

MidPointLine(x0,y0,x1,y1,color) {
int x0,y0,x1,y1,color; int a,b,d,d1,d2,x,y; a = y0-y1;b = x1-x0; d = 2 * a +b; d1 = 2*a;d2 = 2*(a+b); x = x0;y = y0; Setpixel(x,y,color); while(x

Bresenham算法:

void InterBresenhamline(int x0,int y0,int x1, int y1,int color) {
int dx,dy,x,y,i; float e; dx = x1-x0; dy = y1- y0; e=-dx; x=x0; y=y0; for(i=0; i<= dx; i++) {
Setpixel(x, y, color); x++; e=e+2*dy; if(e>=0) {
y++; e=e-2*dx; } } }

转载于:https://www.cnblogs.com/xiacl/archive/2012/03/22/2410926.html

你可能感兴趣的文章
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>
[转载]mysql的left,right,substr,instr截取字符串,截取
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
摘抄详细的VUE生命周期
查看>>
javascript高级程序设计---js事件思维导图
查看>>
sprint计划会议
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>
.net 分布式架构之分布式锁实现(转)
查看>>
吴恩达机器学习笔记 —— 3 线性回归回顾
查看>>
Bouncy Castle内存溢出
查看>>
多线程_java多线程环境下栈信息分析思路
查看>>
机器学习数学【1】
查看>>
Problem E: Automatic Editing
查看>>
Java数组排序
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>