【问题标题】:Find all pixels on a line in Java在Java中查找一行上的所有像素
【发布时间】:2016-10-08 15:25:51
【问题描述】:

正确的做法是:假设我有两个特定的像素 a 和 b,以及一个随机其他像素的列表。我现在想检查该列表中的所有像素是否在通过 a & b 的线上(但不限于将 a & b 作为端点!) 我查看了 Bresenham 的线算法,但这似乎只能找到 a & b 之间的点? 我也看过一般的线性方程,但我有点坚持如何将连续线正确离散化为像素......

(我正在尝试在 java 中实现一个随机采样算法,它会尝试找到像素最多的线,如果这很重要的话)。

非常感谢您对此的任何帮助:)

【问题讨论】:

    标签: java algorithm line pixel


    【解决方案1】:

    我强烈建议您计算点与线之间的距离

    如果您使用一个像素作为测量单位(如果您在像素坐标系中工作,您会这样做),您可以简单地检查从点到线的距离是否

    以下是计算点和线之间距离的方法:

    【讨论】:

    • Bresenham 的线算法要快得多,并且可以很容易地适应这种情况。
    【解决方案2】:

    您不能在 a 和 b 之间搜索,而是在同一条线上但在图像边界之外的点之间搜索。您只需将向量 (b-a) 必要的次数放在 a 侧和 b 侧,就可以得到它们。并使用您的 Bresenham 线算法。

    至于更具体的答案,请更好地定义问题。你认为像素是点、正方形还是圆形?用您的话来说,什么是“像素在线”?你的线有多宽?您正在寻找厘米长度或矩形边框上具有最大像素数的线?您在哪些行中搜索?

    【讨论】:

    • Bressenhams 线算法发现“所有像素形成一条线”。根据定义,该算法在长度中必须是线性的。我的理解正确吗?
    • AFAIK 和恕我直言,这是算法,通过 2d 图形函数从点到点绘制一条线。它应该是最快的。
    • 我相信你完全误解了 OPs 的问题。他有一组点,他想找出其中哪些点在线。为此,他显然不必查看沿线的每一个点。你不同意吗?
    • 嗯。是的。对不起。我只是猜测。但我的回答仍然有效。提问者知道并想使用一些算法。 (布雷森汉姆的一个)。但不知道如何在给定段之外的部分行上使用它。我告诉他该怎么做。任何其他算法都会花费他更多时间,因为据我所知,他已经编写了这个算法。
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 2014-04-24
    • 2021-02-17
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多