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

Bresenham直线绘制代码异常:出现多余连线,求修复方案

问题解决方法

你的问题出在循环逻辑上:当前代码会遍历点列表里所有相邻的点对,所以[200, 300]和[500, 620]这对本不该相连的点也被用Bresenham算法连起来了。要画两条断开的直线,只需要让代码只处理你需要的两组点对就行,下面给两种简单的修改方式:

方法一:重新组织点列表结构

把要绘制的两条直线的点对单独分组,这样循环只会处理每组内的点对:

import numpy as np
import cv2

# 把两条直线的点分别放在子列表里
pnts = [
    [[100, 150], [200, 300]],
    [[500, 620], [700, 500]]
]

canvas = np.ones((800,800), np.uint8)
def setPixel(x, y):
    canvas[y, x] = 255

# 遍历每组直线的点对
for line in pnts:
    x0, y0 = line[0]
    x1, y1 = line[1]
    dx = abs(x1 - x0)
    dy = abs(y1 - y0)
    sx = 1 if x0 < x1 else -1
    sy = 1 if y0 < y1 else -1
    err = dx - dy
    while True:
        setPixel(x0, y0)
        if x0 == x1 and y0 == y1:
            break
        e2 = 2 * err
        if e2 > -dy:
            err = err - dy
            x0 = x0 + sx
        if e2 < dx:
            err = err + dx
            y0 = y0 + sy

cv2.imwrite('plot lines1.jpg', canvas)
cv2.imshow('image', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

方法二:在原循环中跳过不需要的点对

如果不想改动点列表的结构,直接在循环里跳过索引为1的那组点对(也就是[200,300]和[500,620]的组合):

import numpy as np
import cv2

pnts = [[100, 150],
[200, 300],   # 这两个点不该连线
[500, 620],
[700, 500]]

canvas = np.ones((800,800), np.uint8)
def setPixel(x, y):
    canvas[y, x] = 255

for i in range(0, len(pnts) - 1):
    # 跳过i=1的情况,即跳过[200,300]到[500,620]的连线
    if i == 1:
        continue
    x0 = pnts[i][0]
    y0 = pnts[i][1]
    x1 = pnts[i+1][0]
    y1 = pnts[i+1][1]
    dx = abs(x1 - x0)
    dy = abs(y1 - y0)
    sx = 1 if x0 < x1 else -1
    sy = 1 if y0 < y1 else -1
    err = dx - dy
    while True:
        setPixel(x0, y0)
        if x0 == x1 and y0 == y1:
            break
        e2 = 2 * err
        if e2 > -dy:
            err = err - dy
            x0 = x0 + sx
        if e2 < dx:
            err = err + dx
            y0 = y0 + sy

cv2.imwrite('plot lines1.jpg', canvas)
cv2.imshow('image', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

两种方法都能实现只画两条断开的直线,第一种更灵活,后续添加更多直线也方便;第二种改动最小,适合快速调整现有代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:20:51