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

c - 带厚度绘制算法的圆

目前我正在使用 Bresenham 的圆绘制算法,它可以很好地绘制圆,但是我想要一种相对快速有效的方法来绘制具有指定厚度的圆(因为 Bresenham 的方法只绘制单个像素厚度)。我意识到我可以简单地绘制多个具有不同半径的圆,但我相信这将是非常低效的(效率很重要,因为这将在每微秒都很宝贵的 Arduino 上运行)。我目前正在使用以下代码:

我该如何修改它以允许指定圆的厚度?PS我不想使用任何外部库,拜托!

0 投票
2 回答
261 浏览

opengl - 使用 opengl GL_POINTS 的 Bresenham 算法非常慢

有没有办法加快速度?我来学习了,访问 Frame Buffer 本身可以很快做到。但我不知道如何......有没有办法在opengl中做到这一点?

0 投票
2 回答
975 浏览

javascript - 比使用 Bresenham 算法更好的选线?

我在 HTML 画布上画线,并使用不太精确的二维数组(表示 10x10 像素的块),在其中我用 Bresenham 的算法“画”线来存储线 ID,所以我可以使用该数组来查看哪个线被选中。

这行得通,但我希望它更准确 - 不是我使用的 10x10 大小(我喜欢我不必完全点击线),但是当我在我的实际上绘制该数组的表示时画布,我看到有很多 10x10 块没有填充,即使线穿过它们:

在此处输入图像描述

有没有更好的解决方案?我想要的是捕获实际线通过的所有网格块。

0 投票
0 回答
66 浏览

algorithm - 来自多个像素的线性方程或梯度 (m) 预测

我开始学习 Bresenham 算法,它沿着线补丁绘制离散坐标点。

但是,有没有什么方法可以从许多像素中预测线性方程或梯度(m)?(反向布雷森汉姆算法)

0 投票
0 回答
1465 浏览

opengl - 使用 dda/bresenham 算法用 open gl 鼠标功能画一条线

所以我必须使用鼠标功能画一条线。当鼠标点击两点时,程序需要画一条连接它们的线。

我需要制作一个虚构的 10x10 数组并在其上映射点,然后连接这些点。窗口大小无关紧要。

我不知道如何处理假想数组以及如何保存鼠标坐标以便我可以使用它们。帮助

而且我不允许使用 GL_LINES

0 投票
3 回答
6453 浏览

java - Implementing Bresenham's circle drawing algorithm

I have written an implementation of Bresenham's circle drawing algorithm. This algorithms takes advantage of the highly symmetrical properties of a circle (it only computes points from the 1st octant and draws the other points by taking advantage of symmetry). Therefore I was expecting it to be very fast. The Graphics programming black book, chapter #35 was titled "Bresenham is fast, and fast is good", and though it was about the line drawing algorithm, I could reasonably expect the circle drawing algorithm to also be fast (since the principle is the same).

Here is my java, swing implementation

This method uses the following drawPointmethod:

The two methods getNativeX and getNativeY are used to switch coordinates from originating in the upper left corner of the screen to a system that has it origin in the center of the panel with a more classic axis orientation.

I have also created an implementation of a circle drawing algorithm based on trigonometrical formulaes (x=R*Math.cos(angle)and y= R*Math.sin(angle)) and a third implementation using a call to the standard drawArc method (available on the Graphics object). These additional implementations are for the sole purpose of comparing Bresenham's algorithm to them.

I then created methods to draw a bunch of circles in order to be able to get good measures of the spent time. Here is the method I use to draw a bunch of circles using Bresenham's algorithm

Finally I override the paint method of the JPanel I am using, to draw the bunch of circles and to measure the time it took each type to draw. Here is the paint method:

Here is the kind of rendering it would generate (drawing 1000 circles of each type)

Bresenham and other methods

Unfortunately my Bresenham's implementation is very slow. I took many comparatives measures, and the Bresenham's implementation is not only slower than the Graphics.drawArcbut also slower than the trigonometrical approach. Take a look at the following measures for a various number of circles drawn.

What part of my implementation is more time-consuming? Is there any workaround I could use to improve it? Thanks for helping.

Comparing Bresenham to other implementations

[EDITION]: as requested by @higuaro, here is my trigonometrical algorithm for drawing a circle

And the method used to draw a bunch of trigonometrical circles

0 投票
1 回答
76 浏览

javascript - 以通用方式从 ARC 中提取顶点

我想从 ARC 中获取所有顶点。我有用于绘制弧线的所有数据(例如:起点、终点、起点角度、终点角度、半径),但我需要从弧线数据中生成所有顶点。

我已经尝试过一种或两种算法,但我未能从弧数据中获得确切的顶点。

我使用了 Bresenham 的算法,但我失败了。

现在我正在使用下面的代码,但它不起作用..

请帮我。谢谢你。

0 投票
1 回答
1080 浏览

c++ - 抗锯齿 Bresenham 的生产线没有按预期工作

我正在尝试使用这篇文章实现 bresenham 的抗锯齿线条图:http: //members.chello.at/~easyfilter/bresenham.html

这是功能:

不知道它是否会改变任何东西,但我将所有 int 都更改为 float。只是为了确保除法是否适用于浮点数。无论如何,整数结果是相同的。

现在,示例调用:

结果如下: 在此处输入图像描述

如果我像这样将 y0 + sy 更改为 y0 - sy:

输出变成这样:

在此处输入图像描述

如果我像这样将 x2 + sx 更改为 x2 - sx:

现在的输出是:

在此处输入图像描述

所以最后一个配置都是负面的,它给出了:

在此处输入图像描述

几乎不错,但出现了一些漏洞。所以还是错了。我无法弄清楚,为什么它没有正确绘制。当我尝试没有抗锯齿的普通 bresenham 时,它可以正常工作。

同样重要的是,在我的例子中,我使用 cocos2d-x 纹理,所以 y 被翻转。这就是为什么我有这个方法:

也许问题是,正因为如此。我怎样才能解决这个问题?
问候

0 投票
1 回答
68 浏览

javascript - 在jQuery中调用函数返回错误的结果

如果在底部的 jQuery 函数之外调用,我有以下 javascript 代码运行良好。我不知道我做错了什么。

布雷森纳姆算法:

查询:

如果我输入:x0 = 1, y = 0 and x1 = 15, y2 = 9

它输出:["1,0", "11,01", "12,01", "13,011", "14,0111", "15,0111"]

0 投票
0 回答
179 浏览

c++ - 画粗线有洞

我做了简单的方法来绘制固定厚度的线。这是我的功能:

它应该用颜色 (r, g, b, a) 和厚度 wd 从 (x1, y1) 到 (x2, y2) 画线。我在屏幕上移动手指时使用此方法进行绘图,因此我还添加了额外的参数“began”,表示它是触摸开始还是触摸移动。data 是一个像素数组。区域数据无关紧要。

但它没有按预期工作,这是一个示例结果:

在此处输入图像描述

可能会有一点压缩,但是您可以看到 2 个点,它们绘制得很好,并且由许多带有孔的“粗”线构建了一条曲线。

如果“wd”不够大,则问题不存在。我几乎可以肯定这是精度方面的某种问题。

我试过: - 将 for 循环从 0 更改为 360(不是角度 90,角度 + 90)。- 使用圆形而不是地板 - 使用 sin 而不是 -sin(在我的情况下,y 无论如何都是倒置的) - 使用低于 1.0 的 _r,例如:0.05。

并且通过给定的固定厚度(在此示例中为 60 像素),无法设置诸如 _r 增量或角度之类的参数以不绘制没有孔。

我决定编写自己的函数来做到这一点,因为我在网上找到的其他方法并没有按预期工作(尤其是抗锯齿,这对我来说是完美的解决方案)。

这是从网站上获取的 drawLine 函数:http ://willperone.net/Code/codeline.php