问题标签 [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 投票
2 回答
946 浏览

algorithm - 维基百科的 Bresenham 算法是否有错误?

Bresenham 的算法用于在正方形网格上绘制一条线,例如像素。

该算法部分基于将平面细分为称为八分圆的 8 个部分。

八分圆

诀窍是使用对称性来概括算法,而不管第二个点位于何处:首先我们将其“移动”到第一个八分圆,然后进行计算,最后将生成的点转换回其原始八分圆。

Wikipedia 提供了执行该技巧的基本功能。

此外,它写道,我们只需要:

翻转输入和输出的坐标系

这是基于这些换位实际上是对合的事实:f(f(x)) = x

没有太注意它,我首先认为它会起作用。

但是对于案例 3 和 7,它不起作用,因为它不是对合。

例如:

我们必须再次做到这一点:

那么,我是不是误会了什么?

或者实际上是在起草维基百科文章时缺乏精确性,是否应该有人改进它?

如果没有我需要使用两个函数switchToOctant_onInputswitchToOctant_onOutput(我现在看到的这个问题的明显解决方案),就没有更好的方法来进行这些转换吗?

0 投票
3 回答
636 浏览

c++ - 画线算法的实现不能正常工作

第一个问题,我试图计算di+1=di+2*Δy−2*Δx(yi+1−yi)四个象限的表达式。无论象限如何,都发现表达式是相同的,包括符号。我是对的,还是我的计算中有一些错误(因此,我错了)?

第二个问题,如果这个表达式只适用于第一个八位字节,我怎么能把它应用到其他八位字节?对我来说,没有办法确定我正在处理哪个八位字节。因为,m 的值总是代表两个相反的八位字节。例如,如果0<m<1,它代表第 1 个和第 5 个八位字节。正确的?

第三,我们如何确定 di 的初始值/起始值?

通过第二和第四象限的线没有出现。

如何通过对我的代码进行一些小的更改来解决这个问题?

0 投票
3 回答
3631 浏览

c++ - 请为我解释这个布雷森汉姆线图代码

我在整个互联网上进行了搜索,发现了数百个 Bresenham 画线算法的实现。但是,我觉得奇怪的一件事是,它们中只有两三个可以覆盖所有八个八位字节。尽管如此,它们仍在许多应用中使用。

例如,这位女士实现了 Bresenham 算法的这个版本(第 415 行)。但是,它并没有覆盖整个 360 度。这家伙似乎正在开发一个图书馆。但它仍然不能正常工作。

你能告诉我为什么吗?

这家伙的实现工作正常。但是,我想这不是布雷森纳姆算法。它与理论几乎没有相似之处。

最后,我发现以下版本的 Bresenham's Line Drawing Algorithm 可以正常工作。

原始代码很奇怪。所以,我需要你的帮助来理解这一点。

  • 为什么他将 dx 和 dy 左移,然后在计算之前再次右移它们?

  • 理论所说的 dt 和 ds 在哪里?

  • 根据理论,dt 和 ds 应该在 while 循环的每一步都经过测试。但是,这段代码没有这样做。为什么?

  • 该理论似乎没有任何错误值处理的迹象。error代码计算有什么用?他是怎么计算的error?他是如何error使用价值的?

  • 测试背后的逻辑是什么if(dx >= dy)

0 投票
1 回答
211 浏览

java - Bresenham 线算法错误

我正在尝试用星星(*)填充矩阵以绘制 Bresenham 的线,但是当我打印出矩阵仅填充一颗星星的东西时,我不知道出了什么问题。语言是Java

}

以下代码是当我尝试打印出矩阵时

}

0 投票
0 回答
193 浏览

drawing - 洪水填埋场和布雷森纳姆角

我正在尝试填充使用Bresenham 线算法渲染的形状。

不幸的是,我不能让洪水填充从形状内部到达狭窄的角落。有没有办法处理这种情况?

http://i.stack.imgur.com/XlZty.png

我能想出的唯一解决方案是使用更粗的线条并使用 8 个方向的洪水填充。这不是最佳的。并且填充洪水算法的起点不止一个,这会降低性能。

0 投票
1 回答
1392 浏览

java - 如何在 Java 中编写抗锯齿程序

我已经为 Simple line drwaing 类实现了 Bresenham 算法,现在我想在它上面设置一个抗锯齿,我使用 JavaFX 进行查看。

如何在不使用库的情况下实现抗锯齿?

0 投票
1 回答
1098 浏览

bresenham - Bresenham 画圆算法哪里出错了?

好吧,这听起来很荒谬,但现在十多次我试图看看我在这个例子中做错了什么。我在网上看过教程,示例如下:

在此处输入图像描述

在第3阶段:我们不应该减少Yi到 9 吗?我这样说是因为决策变量Pi=13满足if Pi>=0, Yi +1=Yi-1如下所示的条件:在此处输入图像描述

问题:我哪里错了?请有人给我解释一下。

PS:我感谢更多工作示例,谢谢。

0 投票
1 回答
734 浏览

c++ - 使用 bresenham 线算法循环二维数组

我目前尝试使用 bresenham 线算法绘制一些有角度的线,该算法可以循环一个 21x21 大小的二维数组,作为一条从 0 - 2pi 角度的线。

布雷森汉姆的线路

所以想法是程序必须输出线在网格中通过的值。

所以一个5x5的例子

等等..

这里的问题是它看起来不像我的程序那样做..端点位于给定的半径长度内..

我确定我搞砸了数学..所以我希望你们中的一些人能在这里帮助我..

这是输出。

我在做什么错?...我知道可能必须修改 bresenham 算法以克服大于 1 和小于 0 的斜率。

--更新澄清问题--

我正在尝试使用 bresenham line algorithm 以循环方式迭代二维数组。

该算法应该从二维阵列的中心开始,并以 0 - 2pi 之间的角度“射出”一束光束。光束必须从矩阵的中心开始并在矩阵的边缘结束,希望它更有意义..

0 投票
1 回答
3151 浏览

c++ - OpenGL 布雷森汉姆线

我有一个使用 opengl 绘制 Bresenham 线的基本代码。问题是最后它没有显示结果。只有一个窗口快速打开和关闭,没有任何其他错误。有谁能够帮我?

0 投票
0 回答
167 浏览

algorithm - 用于图形/树搜索的视线算法

我在 Python 中实现了 Bresenham 的线算法,用于识别网格世界的网格单元格列表之间的网格占用(比如 [(1,1), (3,2),(5,6),(8,4 )在一个 10X10 的网格世界中,有一些被占用的网格),然后应用视线算法检查我是否可以跳过任何顶点列表以减少总距离。

但是我怎样才能为基于图形的搜索做视线?我想知道如何表示树/图形节点,就像我以坐标形式 (x,y) 表示网格单元一样?任何建议/想法都将受到高度赞赏。