计算机图形学 之 中点画线算法

简介: 计算机图形学 之 中点画线算法

之前我们使用DDA来画线, 这种算法每步只进行一个加法运算,那么加法运算李里边有浮点数, 我们是否还可以再提高效率 也就是把浮点运算变成整数加法, 或者改变直线方程类型


中点画线算法

利用直线的一般方程 Ax + By + C = 0

对于一般直线方程,

对于直线上的点, 那么 Ax + By + C = 0

对于直线上方的点, 那么 Ax + By + C > 0

对于直线下方的点, 那么 Ax + By + C < 0


每次在最大位移方向走一步, 另一个方向走还是不走,取决于中点误差的判断


假设 0 <= |k| <= 1. 因此,每次在x方向+1, y方向 是否加一需要作出判断

对于该直线, xi的位置则是 取pi, 因为交点在 yi 到y (i+1) 的中点的下方, 下一个点则是取 pu 这个点, 因为交点在中点上方


至于如何判断中点是在直线的上方还是下方

我们就把中点坐标带入到直线方程判断是否大于零, 假设中点坐标是m, 那么就是判断

di = Amx + Bmy +C 的大小, 也就是


di = A(xi + 1) + B (yi + 0.5) + C


中点画线算法需要 四个加法,两个乘法,似乎效率也并没有多高


增量计算

1. d < 0



推导可得, d1 = d0 + A + B


2. d >= 0

推导 d1 = d0 + A


3. 计算初始值d0


d0 = A + 0.5B

由于这里还是有0.5这个计算, 而且我们只需要判断d的正负号, 所以我们可以用2d来代替d计算

也就是2d0 = 2A + B这样就全都是整数了.


相关文章
|
4月前
|
算法 图形学
【计算机图形学】实验一 DDA算法、Bresenham算法
【计算机图形学】实验一 DDA算法、Bresenham算法
111 3
|
4月前
|
算法 图形学
【计算机图形学】实验三 用Cohen-Sutherland裁剪算法实现直线段裁剪
【计算机图形学】实验三 用Cohen-Sutherland裁剪算法实现直线段裁剪
301 2
|
4月前
|
存储 算法 图形学
【计算机图形学】实验二 用扫描线算法实现多边形填充
【计算机图形学】实验二 用扫描线算法实现多边形填充
124 2
|
4月前
|
算法 图形学
【头歌 计算机图形学 练习】多边形填充v1.0 (第1关:扫描线填充算法(活动边表AET法) 第2关:边缘填充法 第3关:区域四连通种子填充算法 第4关:区域扫描线种子填充算法)
【头歌 计算机图形学 练习】多边形填充v1.0 (第1关:扫描线填充算法(活动边表AET法) 第2关:边缘填充法 第3关:区域四连通种子填充算法 第4关:区域扫描线种子填充算法)
305 0
|
算法 图形学
计算机图形学 之 DDA直线算法(数值微分法)
计算机图形学 之 DDA直线算法(数值微分法)
341 0
|
算法 图形学
计算机图形学——实验五 基本图形学算法及着色器初步编程
实验五 基本图形学算法及着色器初步编程 1、 理解基本图形元素光栅化的基本原理,理解直线裁剪算法的原理; 2、 掌握直线的光栅化算法:DDA和Bresenham算法; 3、 掌握直线裁剪算法:Cohen-Surtherland算法; 1、 编程实现DDA算法和Bresenham算法生成直线。 2、 实现Cohen-Surtherland直线裁剪算法,调试、编译、修改程序。 要求: 根据所给的直线光栅化的示范源程序,在计算机上编译运行,输出正确结果(示范代码有错误,指出并改正)。
300 0
计算机图形学——实验五 基本图形学算法及着色器初步编程
|
编解码 算法 编译器
计算机图形学直线段的生成算法
计算机图形学直线段的生成算法
计算机图形学直线段的生成算法
|
23天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。