【十天自制软渲染器】DAY 02:画一条直线(DDA 算法 & Bresenham’s 算法)

本文介绍了DDA(Digital Differential Analyzer)和Bresenham's直线算法的原理,包括算法的简单实现、优化以及浮点运算的消除。内容涵盖直线算法的推导、代码实现,并展示了算法在不同斜率直线上的应用效果。此外,文章还提及了在图形学中绘制模型的基础知识。
摘要由CSDN通过智能技术生成

推荐关注公众号「卤蛋实验室」或直接阅读博客原文,更新更及时,阅读体验更佳


写文不易,恳求各位观众老爷 点赞 👍,收藏 📁,评论 💬 三连支持一下!!!谢谢你,这对我真的很重要!


第一天我们搭建了 C++ 的运行环境并画了一个点,根据 点 → 线 → 面 的顺序,今天我们讲讲如何画一条直线。

本文主要讲解直线绘制算法的推导和思路(莫担心,只涉及到一点点的中学数学知识),最后会给出代码实现,大家放心的看下去就好。

1.DDA 直线算法

1.1 简单实现

我们先来回顾一下中学的几何知识,如何在二维平面内表示一条直线?最常见的就是斜截式了:

y = k x + b y = kx + b y=kx+b

其中斜率是 k k k,直线在 y y y 轴上的截距是 b b b


斜截式在数学上是没啥问题的,但是在实际的工程项目中,因为硬件资源是有限的,我们不可能也没必要表示一条无限长度的直线,现实往往是已知一条线段的起点 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)终点 ( x 2 , y 2 (x_2, y_2 (x2,y2),然后把它画出来。

这时候用两点式表示一根直线是最方便的,其中 x 1 ≤ x ≤ x 2 x_1 \leq x \leq x_2 x1xx2 y 1 ≤ y ≤ y 2 y_1 \leq y \leq y_2 y1yy2

x − x 1 x 2 − x 1 = y − y 1 y 2 − y 1 \frac{x-x_{1}}{x_{2}-x_{1}}=\frac{y-y_{1}}{y_{2}-y_{1}} x2x1xx1=y2y1yy1

把上面的式子稍作变形,可以把 x x x y y y 用参数 λ \lambda λ 表示:

x = λ ( x 2 − x 1 ) + x 1 y = λ ( y 2 − y 1 ) + y 1 } 0 ≤ λ ≤ 1 \left.\begin{array}{l}x=\lambda\left(x_{2}-x_{1}\right)+x_{1} \\ y=\lambda\left(y_{2}-y_{1}\right)+y_{1}\end{array}\right\} 0 \leq \lambda \leq 1 x=λ(x2x1)+x1y=λ(y2y1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值