You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGL中点画线算法绘制负斜率直线的实现异常求助

中点画线算法负斜率场景代码修复方案

现存代码错误点

  • 初始值逻辑错误:当前将判定值d和起始y坐标y的初始化放在了dy>=0的else分支中,当dy为负时,这两个变量没有得到正确的初始赋值,直接导致绘制逻辑失效。
  • 测试用例适配问题:你提供的测试坐标中dy绝对值为200,dx绝对值为150,斜率绝对值大于1,默认按x递增迭代的逻辑本身会出现精度缺失问题,需要额外适配。

修复后基础版代码(适配|斜率| ≤ 1的正负斜率场景)

x1=200
y1=400
x2=350
y2=200
dx = x2 - x1
dy = y2 - y1
# 初始化y步进方向和y初始值
y_step = 1
y = y1
# 处理dy符号,统一转为正值计算判定值
if dy < 0:
    y_step = -1
    dy = -dy
# 统一初始化判定值d,无论dy正负都要执行
d = 2 * dy - dx

for x in range(x1, x2):
    glVertex2d(x, y)
    if d > 0:
        y += y_step
        d += 2 * (dy - dx)
    else:
        d += 2 * dy

全斜率适配说明

如果需要覆盖斜率绝对值大于1的场景,需要增加对dx、dy绝对值大小的判断:当|dy|>|dx|时,交换x和y的计算逻辑,按y递增/递减的方向迭代,同步修改判定值的计算方式即可。

内容的提问来源于stack exchange,提问作者Nur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:30:01