问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在直线Bresenham生成算法中,确定y的值取yi+1,还是yi的依据是

发布网友 发布时间:2022-05-24 21:00

我来回答

1个回答

热心网友 时间:2023-11-01 23:10

假设我们需要由 (x0, y0) 这一点,绘画一直线至右下角的另一点(x1, y1), x,y分别代表其水平(horizontal)及垂直(vertical)座标.(这是一般电脑常用之设定.)

因此x及y之值分别向下及向右增加.而两点之水平距离分别为x1 − x0及y1-y0.由此得之,该线的斜率(slope)必定介附于 - 1至0之间.而此算法之目的,就是找出在x0与x1之间,第x行相对应的第y列,从而得出一映像点(pixel),而此点必须是最接近原本的线.

对于由(x0, y0)及(x1, y1)两点所组成之直线,公式如下:

y-y0 = [(y1-y0)/(x1-x0)](x-x0)

因此,对于每一点的x,其y的值是

[(y1-y0)/(x1-x0)](x-x0)+y0

因为x及y皆为整数,但并非每一点x所对应的y皆为整数,故此没有必要去计算每一点x所对应之y值.反之由于此线之斜率介附于 - 1至0之间,故此我们只需要找出当x到达那一个数值时,会使y上升1,若x尚未到此值,则y不变.至于如何找出相关的x值,则需依靠斜率.斜率之计算方法为m = (y1 − y0) / (x1 − x0).由于此值不变,故可于运算前预先计算,减少运算次数.

要实行此算法,我们需计算每一映像点与该线之间的误差(error).于上述例子中,误差应为每一点x中,其相对的映像点之y值与该线实际之y值的差距.每当x的值增加1,误差的值就会增加m.每当误差的值超出某一限额(如0.5),线就会比较靠近下一个映像点,因此y的值便会加1.反之若误差少于 0.5,y则减1.

The procere looks like this, assuming plot(x,y) plots a point and abs returns absolute value:

Expressed in pseudo code, the naive implementation below uses comparatively expensive floating point arithmetic, but it can be easily tweaked (see optimization section) to use integer math:

function line(x0, x1, y0, y1)
int deltax := abs(x1 - x0)
int deltay := abs(y1 - y0)
real error := 0
real deltaerr := deltay / deltax // 假设 deltax != 0(非垂直线)
int y := y0
for x from x0 to x1
plot(x,y)
error := error + deltaerr
if error ≥ 0.5 then
y := y + 1
error := error - 1.0

参考资料:http://zh.wikipedia.org/wiki/Bresenham%E7%9B%B4%E7%B7%9A%E6%BC%94%E7%AE%97%E6%B3%95

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
江西蓝天学院和赣江职业技术学院哪个好? 江西有什么好的中专学校 什么是单点登录(SSO),以及单点登录的实现流程 前端实现单点登录(SSO) 前端单点登录如何实现 面试官:来说说单点登录的三种实现方式 为什么很多人不买哈弗H9 座机如何开通国内长途 座机如何申请 辽宁省出租车手续怎么办? 如何用中点Bresenham算法完成直线扫描转换? 求计算机图形学中的直线绘制函数法、DDA算法、中点法和Bresenham算法的优缺点以及比较. 刚接触不太懂,请问各位我在mac上装了github for mac,还需要装git吗 lcd Bresenham算法画直线疑问代码e=dy-dx/2;是什么意思? Bresenham算法编写直线的程序怎么写啊!!Java学的不好…………这作业惨烈 关于Bresenham算法的求助 Bresenham直线演算法的最佳化 直线bresenham算法基于什么思路 Bresenham直线演算法的一般化 Bresenham直线演算法的介绍 Bresenham直线演算法的演算方法 共享充电宝成本怎么样 共享充电宝成本分析 共享充电宝财务怎么面试 深圳是谁开发的? 共享充电宝有没有税收这项要求 您好,公司购入一批共享充电宝,金额很大,靠这个收租金,请问一下购进的充电宝该如何入账比较好呢? 是不是深圳是靠香港发展? 改革开发33年了 ,有谁晓得 深圳是用什么打造起来的 ,深圳刚开始开发的时候是用什么模式打造的? 当年上海,深圳,天津的开发用的什么模式 深圳是如何开发的 写出直线段扫描转换的Bresenham算法,并生成从点P1(0,0)到点P2 (5,2)的直线段,要求写出每一步递推过程 我的华为荣耀30手机为啥没有HD开关。荣耀301。。荣耀30i设置里没有高清通话软件? 免费通话软件 那个通话清晰的 这个壁纸名字叫什么? 求这张壁纸原图及出处 最近我看新闻,看到说无代码平台,不用开发程序就能搭建系统,我想试试? 2厘亚克力板介刀能切吗 求这张壁纸的原图,图片我删了 请给我这个桌面壁纸的原图,非常感谢! 前置摄像头模糊不清 二进制负数补码转为十进制还有意义吗 青青子衿青青子佩采用了什么手法表达了什么感情? 青青子衿,悠悠我心。呦呦鹿鸣,食野之苹,我有嘉宾,鼓瑟吹笙。运用了哪些表现手法?表达了什么情感 青青子衿,悠悠我心诗句属于哪种类型,以及在表达作者思想情感上所起的作用? 在Excel中输入身份证号码为什么不能正确显示?后面的数字有三位变成0了? 为什么我老是被静电打到? 发卡要用什么洗‘ 洁净如新! 可以用食盐水浸泡吗? 小雏菊发卡怎么清洗 台风闭园,上海迪士尼竟然不退票!有哪些店大欺客的例子? 一个成年人还被父母教育没有家教,那么他是个什么样的人?