问题标签 [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.
algorithm - 维基百科的 Bresenham 算法是否有错误?
Bresenham 的算法用于在正方形网格上绘制一条线,例如像素。
该算法部分基于将平面细分为称为八分圆的 8 个部分。
诀窍是使用对称性来概括算法,而不管第二个点位于何处:首先我们将其“移动”到第一个八分圆,然后进行计算,最后将生成的点转换回其原始八分圆。
Wikipedia 提供了执行该技巧的基本功能。
此外,它写道,我们只需要:
翻转输入和输出的坐标系
这是基于这些换位实际上是对合的事实:f(f(x)) = x
没有太注意它,我首先认为它会起作用。
但是对于案例 3 和 7,它不起作用,因为它不是对合。
例如:
我们必须再次做到这一点:
那么,我是不是误会了什么?
或者实际上是在起草维基百科文章时缺乏精确性,是否应该有人改进它?
如果没有我需要使用两个函数switchToOctant_onInput
和switchToOctant_onOutput
(我现在看到的这个问题的明显解决方案),就没有更好的方法来进行这些转换吗?
c++ - 画线算法的实现不能正常工作
第一个问题,我试图计算di+1=di+2*Δy−2*Δx(yi+1−yi)
四个象限的表达式。无论象限如何,都发现表达式是相同的,包括符号。我是对的,还是我的计算中有一些错误(因此,我错了)?
第二个问题,如果这个表达式只适用于第一个八位字节,我怎么能把它应用到其他八位字节?对我来说,没有办法确定我正在处理哪个八位字节。因为,m 的值总是代表两个相反的八位字节。例如,如果0<m<1
,它代表第 1 个和第 5 个八位字节。正确的?
第三,我们如何确定 di 的初始值/起始值?
通过第二和第四象限的线没有出现。
如何通过对我的代码进行一些小的更改来解决这个问题?
c++ - 请为我解释这个布雷森汉姆线图代码
我在整个互联网上进行了搜索,发现了数百个 Bresenham 画线算法的实现。但是,我觉得奇怪的一件事是,它们中只有两三个可以覆盖所有八个八位字节。尽管如此,它们仍在许多应用中使用。
例如,这位女士实现了 Bresenham 算法的这个版本(第 415 行)。但是,它并没有覆盖整个 360 度。这家伙似乎正在开发一个图书馆。但它仍然不能正常工作。
你能告诉我为什么吗?
这家伙的实现工作正常。但是,我想这不是布雷森纳姆算法。它与理论几乎没有相似之处。
最后,我发现以下版本的 Bresenham's Line Drawing Algorithm 可以正常工作。
原始代码很奇怪。所以,我需要你的帮助来理解这一点。
为什么他将 dx 和 dy 左移,然后在计算之前再次右移它们?
理论所说的 dt 和 ds 在哪里?
根据理论,dt 和 ds 应该在 while 循环的每一步都经过测试。但是,这段代码没有这样做。为什么?
该理论似乎没有任何错误值处理的迹象。
error
代码计算有什么用?他是怎么计算的error
?他是如何error
使用价值的?测试背后的逻辑是什么
if(dx >= dy)
?
java - Bresenham 线算法错误
我正在尝试用星星(*)填充矩阵以绘制 Bresenham 的线,但是当我打印出矩阵仅填充一颗星星的东西时,我不知道出了什么问题。语言是Java
}
以下代码是当我尝试打印出矩阵时
}
drawing - 洪水填埋场和布雷森纳姆角
我正在尝试填充使用Bresenham 线算法渲染的形状。
不幸的是,我不能让洪水填充从形状内部到达狭窄的角落。有没有办法处理这种情况?
我能想出的唯一解决方案是使用更粗的线条并使用 8 个方向的洪水填充。这不是最佳的。并且填充洪水算法的起点不止一个,这会降低性能。
java - 如何在 Java 中编写抗锯齿程序
我已经为 Simple line drwaing 类实现了 Bresenham 算法,现在我想在它上面设置一个抗锯齿,我使用 JavaFX 进行查看。
如何在不使用库的情况下实现抗锯齿?
c++ - 使用 bresenham 线算法循环二维数组
我目前尝试使用 bresenham 线算法绘制一些有角度的线,该算法可以循环一个 21x21 大小的二维数组,作为一条从 0 - 2pi 角度的线。
所以想法是程序必须输出线在网格中通过的值。
所以一个5x5的例子
等等..
这里的问题是它看起来不像我的程序那样做..端点位于给定的半径长度内..
我确定我搞砸了数学..所以我希望你们中的一些人能在这里帮助我..
这是输出。
我在做什么错?...我知道可能必须修改 bresenham 算法以克服大于 1 和小于 0 的斜率。
--更新澄清问题--
我正在尝试使用 bresenham line algorithm 以循环方式迭代二维数组。
该算法应该从二维阵列的中心开始,并以 0 - 2pi 之间的角度“射出”一束光束。光束必须从矩阵的中心开始并在矩阵的边缘结束,希望它更有意义..
c++ - OpenGL 布雷森汉姆线
我有一个使用 opengl 绘制 Bresenham 线的基本代码。问题是最后它没有显示结果。只有一个窗口快速打开和关闭,没有任何其他错误。有谁能够帮我?
algorithm - 用于图形/树搜索的视线算法
我在 Python 中实现了 Bresenham 的线算法,用于识别网格世界的网格单元格列表之间的网格占用(比如 [(1,1), (3,2),(5,6),(8,4 )在一个 10X10 的网格世界中,有一些被占用的网格),然后应用视线算法检查我是否可以跳过任何顶点列表以减少总距离。
但是我怎样才能为基于图形的搜索做视线?我想知道如何表示树/图形节点,就像我以坐标形式 (x,y) 表示网格单元一样?任何建议/想法都将受到高度赞赏。