问题标签 [bresenham]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
884 浏览

image - 在 Julia 中的灰度图像上的两个像素之间画一条线

我在 Julia 中有一张灰度图像,我想在图像上画一条直线。我有两对坐标。它们表示线条应该开始和结束的位置的开始 (x1,y1) 和结束 (x2,y2) 像素位置。我不确定如何找到位于需要着色的这两个点之间的像素位置,以便我的线出现在图像上。

例如,我不想使用交互式工具或注释来执行此操作,因为我需要根据为图像指定的确切坐标对许多图像执行此操作。

到目前为止,我的代码如下所示:

我已经尝试查看 Interpolation.jl 以及此处和博客等上的一些图像处理帖子,但我似乎无法使其正常工作。

我有什么(忽略颜色)我转换为灰度的图像 我想要什么(忽略颜色)这个的灰度版本

0 投票
1 回答
544 浏览

php - PHP 中的 Bresenham 线算法

我正在开发基于文本(控制台)的 WW2 策略游戏,设置在 2d 方形网格地图上。我想要一种方法来计算从地图上的一个图块到另一个图块的视线。我已经使用这个Java 示例来构建我的代码,这就是我所写的:

注意:getEmptyMap 只是用 0 填充多维数组。

使用 (0, 0, 4, 4, 4) 作为输入的测试结果:

我已经尝试了映射线的方法:一种是 Franz D. 使用的正常实现(目前在我上面的示例中已注释掉),另一种是 Franz D. 显示的修改后的实现。也没有给我我正在寻找的结果;一种“抗锯齿”。当焊料从 0,0 看 2,2 并且在 1,2 和 2,1 处有建筑物时,应将 2,2 处的任何东西挡在视线之外。注释掉的实施将完全忽略建筑物,修改确实“击中” 2,1 但不是 1,2。我将如何调整我的代码以“命中”在线下方和在线上方?

0 投票
0 回答
203 浏览

matlab - Matlab用两行之间的特定值填充矩阵(Bresenham)

对于学校项目,我们需要确定带有八个金属销的碳纤维板上的任何类型的损坏。为了确定损坏,我们使用多点之间的电阻率测量。

我们使用 Matlab 脚本来使点之间的电阻可见。我们在矩阵中绘制值并使用 Bresenham 函数创建一条线。

问题如下:

Bresenham 函数确实在矩阵中创建了线,但是我们正在寻找一个函数来填充两行之间的矩阵,并将这两行的平均值组合起来。的平均值S1_(1)S1_(2)需要填充行x1_1,y1_1和之间的矩阵x1_1,y1_2。最后的图是绘制所有点的地方,当线之间的所有区域都被填充时,这应该在圆的某处创建一个高顶:

最终情节

有人可以帮我解决这个问题吗?

更新:

我们终于让它工作了,我们调用一个函数来创建一个三角矩阵并将所有这些矩阵相加。

正确的情节

0 投票
2 回答
1897 浏览

algorithm - 如何在裁剪中使用 Bresenham 的线条绘制算法?

当使用Bresenham line drawing algorithm绘制一条线时,该线可能不在正在写入的位图的范围内 - 剪辑结果以使其适合正在写入的图像的轴对齐范围内是有用的。

虽然可以先将线条剪裁到矩形,然后再绘制线条。这并不理想,因为它经常给线带来稍微不同的倾斜(假设正在使用 int 坐标)

既然这是一个原始的操作,是否有既定的方法可以在保持相同形状的同时剪断线条?

如果有帮助,这里是该算法的参考实现- 它使用 int coords,避免在绘制线条时进行 int/float 转换。


我花了一些时间研究这个:

0 投票
3 回答
2828 浏览

algorithm - 如何使用具有亚像素偏差的 Bresenham 的线条绘制算法?

Bresenham 的线条绘制算法是众所周知的,而且实现起来非常简单。

虽然有更高级的方法来绘制抗锯齿线,但我有兴趣编写一个基于浮点坐标绘制单个像素宽度的非抗锯齿线的函数。

这意味着虽然第一个和最后一个像素将保持不变,但在它们之间绘制的像素将基于两个端点的子像素位置产生偏差。

原则上这不应该那么复杂,因为我假设它可以使用子像素偏移来计算error绘制线时使用的初始值,并且算法的所有其他部分保持不变。

无子像素偏移:

假设右手点有一个靠近顶部的亚像素位置,这条线可能如下所示:

以亚像素偏移为例:

是否有一种经过验证的方法来绘制一条考虑到亚像素坐标的线?


笔记:

  • 这似乎是一个常见的操作,例如,我已经看到 OpenGL 驱动程序考虑了这一点 - 使用GL_LINE,尽管通过快速搜索我没有在线找到任何答案 - 可能使用了错误的搜索词?
  • 乍一看,这个问题看起来可能与以下内容重复:
    精确的亚像素线绘制算法(光栅化算法)
    然而,这是关于绘制宽线的问题,这是关于偏移单个像素线的问题。
  • 如果没有一些标准方法,我会尝试将其写下来作为答案发布。
0 投票
2 回答
508 浏览

algorithm - 具有一个点和一个角度的 Bresenham 算法

我有一个网格,其每个单元格都由其 x 和 y 坐标(整数)确定。此网格为 100x100 宽。

我得到一个单元格 (x0, y0) 和一个角度 A。

我的目标是能够在网格内获得线 ((x0, y0), A) 穿过的所有单元格的坐标。

我怎样才能做到这一点 ??问题是我没有线的长度...

我正在考虑找到第二个点,然后使用 Bresenham 的算法,但是计算它太长了,因为我找到的第二个点通常在我的网格之外。因此,我正在考虑修改 Bresenham 的算法(http://www.roguebasin.com/index.php?title=Bresenham%27s_Line_Algorithm#Python),但鉴于该算法是基于事实上,我们在输入上有两点!:/

预先感谢您的帮助。

0 投票
0 回答
284 浏览

c - 是否有用于在 3D 平面上栅格化 2D 圆的 DDA 风格算法?

我基本上对 Bresenham 的圆图的推论感到好奇,但在 3D 透视图中,最终结果是Y(垂直)平面上的平面圆。有没有一种神奇的 DDA 类型算法来处理这类事情?

请注意,DDA的意思是主要使用整数并避免尽可能多的乘法和除法,因为主要瓶颈是透视Z除法。

到目前为止,我想出的是以一些增量循环 360 度,并根据增量在投影坐标和下一个坐标之间画一条线。下图是使用 23 度增量的测试(我会使用 22.5,但这适用于整数查找,只有整数度精度):

使用增量为 23 度的线绘制的圆

伪代码类似于:

显然,对实际代码(查找表和预先计算的数量)有很多小的优化,但这就是它的本质。

干杯!

0 投票
1 回答
1147 浏览

graphics - Bresenham 算法在所有八分圆中绘制直线

我目前正在学习图形入门课程,并且正在学习使用 Bresenham 算法绘制直线。现在我必须承认,我的学习习惯涉及到谷歌搜索额外的笔记,因为有时课堂笔记是不够的。

我知道,使用一般的 Bresenham 算法,您通常可以绘制第一个八分圆,而为了绘制其他八分圆,您必须做一些花哨的技巧。

现在,我真正的问题涉及如何理解在七八分圆中画线背后的概念。根据这些注释

https://courses.engr.illinois.edu/ece390/lecture/potts/lecture17_6pps.pdf

我在网上找到的(请参阅第 14 页和第 15 页以获得更清晰的 pdf)如果你想在第七个八分圆中绘制,你必须交换 x1、y1 和 x2、y2;然后将 X 增加 -1,最后将像素设置为 set_pixel(y,x)。但是,这就是我困惑的地方,在第 14 页上,它显示了在第七个八分圆中绘制的示例,为什么 dx 等于正 6 而不是负 6?不是 dx x2 - x1 吗?

0 投票
0 回答
81 浏览

c++ - 我的一半椭圆画在错误的地方

这是我正在研究的椭圆绘图方法的代码。我正在应用 Bresenham 方法来绘制其坐标,并利用椭圆的对称属性在四个不同的位置绘制相同的像素。

这就是问题所在。在我的椭圆绘图函数上测试旋转矩阵时,我希望它从原始水平位置倾斜绘制一个椭圆,如“角度”所示。相反,它形成了一个心形。这很甜蜜,但不是我想要的结果。

结果

我已经设法让其他算法(如该代码示例的底部所示)成功运行,但是计算需要更多时间,并且不能很好地绘制线条。如果我不能让这个 Bresenham 工作,我只打算使用它。

任何人都可以帮忙吗?

0 投票
0 回答
694 浏览

c++ - 抗锯齿 - 未加权区域采样

我目前正在尝试将抗锯齿合并到我的线条绘制算法(DDA 和 Bresenham)中,教授指示我允许使用任何抗锯齿技术,所以我做了一些研究,似乎未加权区域采样是一个不错的选择要走的路线。

我通读了它如何工作的基础知识,我会说我理解了其中的 70-80%,但我不理解决定一个人应该在多远的距离内寻找潜在像素以消除锯齿的基本概念或者只是遮蔽以提供抗锯齿效果。

使用未加权区域采样,我们“想象”一个 1 像素宽的矩形围绕我们希望绘制的线,并且落在该虚构矩形内的任何像素都将使用与其覆盖区域成比例的颜色进行着色。

所以我的具体问题是:

1) 如果我当前在像素 (x1, y1) 上并且我决定要点亮 (x1+1, y) 处的像素,我如何“发现”应该抗锯齿的新像素周围的像素?

2)跟进问题1)我怎么知道一个像素是在我们想象的那个假想矩形的范围之内还是之外?

编辑:

我在某处读过用户暗示您可以结合 Bresenham 中使用的中点算法来执行此未加权采样,但我无法理解如何。