问题标签 [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 回答
2957 浏览

performance - 为什么 Bresenham 的线算法比 Naive 算法更有效

在我的图形课程中,我们学习了 Naive 线光栅化算法,然后是 Bresenham 的线条绘制算法。我们被告知计算机是整数机器,这就是我们应该使用后者的原因。

  1. 如果我们假设没有软件级别的优化,那么对于具有 mmx 和其他指令集的现代 cpu 来说是否如此?正如我查看了英特尔的 64-ia-32-architectures-optimization-manual.pdf 并且与 mmx 的 int 相比,float 的加减乘法延迟相同或更好。

  2. 如果算法在 gpu 中执行,这应该重要吗?已检查NVIDIA CUDA Programming Guide 1.0 (pdf),第 41 页,int 和 float 的时钟周期是相同的。

  3. 将 float 转换为 int 的效率低下是什么?load-hit-store 失速对我们来说是一个真正的问题吗?

  4. 向上/向下舍入数字的函数的效率如何?(我们可以想到c++ stl中的实现)

  5. Bresenham 算法的效率是由于加法而不是内循环中使用的乘法吗?

0 投票
3 回答
2617 浏览

php - 没有对角线运动的布雷森汉姆线

是否有改进的 Bresenham 算法,其中从一个像素到下一个像素的步长不允许是对角线,只是水平或垂直?或者任何其他算法可以做到这一点?(PHP 优先)

0 投票
1 回答
1372 浏览

geometry - 栅格化和填充超球面的算法?

我正在尝试栅格化并填充超球面。本质上,我有一个固定大小的 d 维网格和一个球体(中心、半径),并且想要找出网格的哪些单元格与球体重叠并存储它们的坐标。

我知道中点圆算法利用 8 向镜像并产生圆的外部单元格(边界)。我还更改了链接的维基百科代码以填充圆圈(即生成边界内所有单元格的坐标)。

但是我不知道任何更高维度的算法。例如在 4d 中,我一直在考虑通过生成所有可能的圆圈来实现,如下面的伪代码。基本思想是,由于 4d 球体是 (x-x0) 2 + (y-y0)**2 + (z-z0)**2 + (k-k0)**2 = r 2,所以等于到 (x-x0) 2 + (y-y0)**2 = r 2 - (z-z0)**2 - (k-k0)**2。因为我知道如何画一个圆圈,所以我只需要为 z 和 k 的所有可能值生成所有圆圈。

这个问题似乎很相关,但我不明白答案。

0 投票
1 回答
1890 浏览

opengl - OpenGL线条绘制工件

我正在使用 OpenGL/GLUT 来实现 Bresenham 的线条绘制算法,并且出现了一些看似随意的伪影的问题。这是一个例子:

这应该是一行

这是一些我认为可能相关的代码。我没有包含填充顶点缓冲区的代码,因为我 99% 确定它是正确的并且已经重写了它。问题出现了,我开始使用 GLUT 鼠标回调。

这个想法是你点击一个点,这条线从那个点到你释放的点。在我与调用一起添加该功能之前glutPostRedisplay(),线条图似乎工作正常。

在上图中,要画的线是左边的那条线。它起作用了,但出现了其他工件。我已经检查过了,它们也不在顶点缓冲区中。

他们来自哪里的任何想法?

0 投票
2 回答
313 浏览

javascript - Bresenham 算法失败——不断超出范围

我正在使用 Bresenham 算法为玩家运动制作游戏原型。我在这里使用了“编辑”下的实现,但我没有存储要点:Bresenham algorithm in Javascript

我数学很弱(而且我不是开发人员!),所以这可能阻碍了我找出问题所在的能力。我发现了一篇很棒的文章,它在更高的层次上解释了该算法:简化的 Bresenham 线算法:它*究竟*做什么?

这是我的代码的一些输出。每次循环迭代时,我都会检查我们是否超出了合理的区域。这种情况始终如一地发生。我的错误计算和查找点存在问题,但我没有数学能力知道如何解决它。

在下面的代码中,currentX 和 currentY 应该不断变化以接近 targetX 和 targetY。您会看到当前坐标和目标坐标中的一个是相同的,但另一个会非常不同。这没有任何意义,因为根据算法,到那时 currentX 和 currentY 都应该非常接近目标坐标。

编辑 3:新输出

编辑:下面发布的代码。

EDIT2:下面发布了更多相关代码。

hermes.js - 描述玩家的角色 (Hermes) 以及他与 2d 游戏平面的关系

game.js - 高级游戏逻辑。重点关注的是click事件处理程序,否则这里还没有太多

0 投票
3 回答
47222 浏览

c++ - 使用 Bresenham 线算法绘制线条

我的计算机图形作业是仅使用绘制点的能力来实现 OpenGL 算法。

所以很明显,我需要先开始drawLine()工作,然后才能画出其他任何东西。 drawLine()只能使用整数来完成。没有浮点数。

这是我被教导的。基本上,线条可以分为 4 种不同的类别,正陡、正浅、负陡和负浅。这是我应该画的图:

预期结果

这是我的程序正在绘制的图片:

实际结果

颜色是为我们完成的。给定顶点,我们需要使用 Bresenham 的线算法根据起点和终点绘制线。

这是我到目前为止所拥有的:

我知道我的错误会很愚蠢,但老实说,我无法弄清楚我做错了什么。为什么有些线条画错如上图?

0 投票
1 回答
329 浏览

algorithm - 将 Bresenham 生成的圆存储为多边形?

我正在使用Midpoint circle algorithm生成圆圈。我不想画这些圆圈。相反,我想将它们存储为多边形。显然,坐标的顺序是错误的,所以如果我使用Graphics.DrawPolygon来绘制这些圆,那么圆将变成线网。

问:如何修改算法以生成正确定义的多边形?或者,如何从一组点(在这种情况下属于一个圆)创建一个有效的多边形?

更新:这成功了。

0 投票
1 回答
960 浏览

algorithm - Cornu螺旋/样条的高速绘图算法?

有没有人见过角螺旋线(又名回旋曲线)或样条线的不错的绘图算法?对于弧线和直线,我们有 Bresenham 算法之类的东西。这适用于回旋曲线吗?

维基百科页面有这个 Sage 代码:

是否有可用的参数图示例代码?我的网络搜索看不到太多内容。

0 投票
1 回答
91 浏览

plot - 像素:获取特定图中的像素

我想知道是否有一种算法可以在某个“像素化”区域内获取像素?

因此,如果我们有一个未填充的 3 x 3 像素正方形,则未填充的图将是: 2,2 网格为:

谢谢!

0 投票
1 回答
20705 浏览

c# - 所有案例都涵盖了 Bresenham 的线算法

我需要检查一行中的所有像素,所以我使用 Bresenham 算法来访问其中的每个像素。特别是我需要检查所有像素是否都位于位图的有效像素上。这是代码:

Check_Pixel 用于检查行像素是否在有效位图上。我将创建的像素添加到 aList<Point>以逐点渲染他的元素,并确保Bresenham检查正确的像素(确实如此)。问题是我的算法并没有涵盖所有情况,而是涵盖了大约 50% 的情况。

PS:我的坐标系原点在左上角(x从左到右,y从上到下)