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

algorithm - 绘制圆弧的有效算法?

我正在使用中点圆算法(bresenham circle)来有效地绘制整个圆。有没有类似画圆弧的东西?我想指定一个开始角度和结束角度,并且只绘制圆的那一部分。

提前致谢!

编辑:我也想画实心圆弧,即饼片。:)

0 投票
5 回答
3496 浏览

c# - C# 中的小行星游戏运动

我正在尝试制作游戏小行星。我现在遇到的问题是,如果您按向上箭头键,它会将“船”向上移动 10 个像素。如果你按下左箭头键,它会将“船”向左转 5 度,当你向左或向右转时,我遇到的问题就会发挥作用。然后尝试向上移动。它不会向转向的方向移动。它只会将转动的“船”沿 Y 方向移动 10 度。

我想做的是有一个名为方向的变量,把这个变量想象成一个 360 度的圆。我想要做的是每次我击中左箭头时,它会从方向中减去 5,它从 0 开始并从 360 向后退,因此将其设置为 355。然后我将 355 除以 10 并得到 35.5。然后我将 10 除以 35.5 得到 0.355。然后我会从 10 中减去 0.355(在 Y 轴上向上移动)。并从 0 中减去它(在 X 中向左移动)。所以我会在 Y 线向上移动 9.645,在 X 线向左移动 0.355。

我遇到的问题是我拥有的 Asteroids 中的“船”是 Graphics.FillPie,它需要 Ints 用作起始角和扫角,但是如您所见,我必须使用双精度或浮点数。我很确定我把它复杂化了,而且我很确定有些东西要简单 100 倍,我在想一些类似于 Bresenham 线算法的东西。如果有人可以通过建议更简单的方法或解决我的问题来提供帮助,将不胜感激。提前致谢。

0 投票
2 回答
1904 浏览

python - 对于某些角度的线,我对 Bresenham 算法的实现失败了

我已经在 Python 中编写了 Bresenham 算法的实现(在Wikipedia 文章之后),它可以正常工作,除了某些角度的线。所有应该在 45 到 90 度之间或 135 到 270 度之间延伸的线都将沿着 y = x 线延伸。

这是我的代码:

有人看到我在搞砸什么吗?


编辑:

我在函数中添加了一些打印代码。

(0,0) 位于显示屏的左上角。

我的测试框架非常简单。这是一个独立的函数,所以我只传递两点给它:

原点 = (416, 384)
目的地 = (440, 347)
布雷森汉姆(原点, 目的地)
(416, 384)
(440, 347)
x0 = 384
x1 = 347
y0 = 416
y1 = 440
[]

0 投票
2 回答
1173 浏览

c - 寻找一种快速的轮廓线渲染算法

我正在寻找一种快速算法来绘制轮廓线。对于这个应用程序,轮廓只需要 1 个像素宽。无论是默认情况下还是通过选项,都应该可以使两条线无缝连接在一起,如果它们共享一个公共点。

请原谅 ASCII 艺术,但这可能是展示它的最佳方式。

正常线:

“概述”行:

我正在研究 dsPIC33FJ128GP802。它是一个小型微控制器/数字信号处理器,能够处理 40 MIPS(每秒百万条指令)。它只能进行整数数学运算(加法、减法和乘法:它可以进行除法,但需要大约 19 个周期。)它正在被使用同时处理一个 OSD 层,只有 3-4 MIPS 的处理时间可用于计算,因此速度至关重要。像素占据三种状态:黑色、白色和透明;视频场为 192x128 像素。这是针对 Super OSD,一个开源项目:http ://code.google.com/p/super-osd/

我想到的第一个解决方案是在第一遍绘制带有轮廓像素的 3x3 矩形,在第二遍绘制普通像素,但这可能会很慢,因为每个像素至少有 3 个像素被覆盖,并且浪费了绘制它们的时间. 所以我正在寻找一种更快的方法。每个像素大约需要 30 个周期。目标是 <50, 000 个周期来绘制一条 100 像素长度的线。

0 投票
3 回答
3872 浏览

c - OpenGL中Bresenham椭圆绘制算法的实现

我正在寻找一个可以构建类似 MS-paint 的应用程序。

0 投票
1 回答
565 浏览

c - 为什么这条 bresenham 线没有出现在它应该出现的地方?

我正在编写一个类似 MS 油漆的应用程序(我不允许使用 opengl 原语)。到目前为止,它只绘制线和点。我不明白为什么在单击渲染单个点时,此代码会根据 renderPoint 函数的转换将其打印到应有的位置:

在 bresenham 函数内部调用时,它的绘图不正确(我相信这是正确的,因为我从wikipedia 的文章中逐行实现了它)。我在转换中做错了吗?

0 投票
1 回答
1116 浏览

python - 在pygame中绘制快速线条

我正在尝试使用不直接呈现到屏幕的 pygame 绘制快速线条。我有一个与所需分辨率的像素数一样大的 Python 列表,并存储与线算法命中该像素的次数相对应的整数值。使用它,建立了一个 2D 热图,因此不是绘制一个平面像素值,而是根据一条线穿过它的次数增加像素值,并且“热”像素获得更亮的颜色。

这样做的原因是我们事先不知道要绘制多少条线,以及任何给定像素将被击中的最大次数。由于我们希望缩放输出,以便每次渲染都具有正确的最大和最小 RGB 值,因此我们不能只绘制到屏幕上。

有没有比相对幼稚的 Bresenham 算法更好的方法来绘制这些线?这是 drawLine 函数的关键部分:

最终结果根据 f 内部的最大值进行缩放并绘制到屏幕上。例如,如果最大值为 1000,那么您可以假设每个像素的 RGB 值为 (f[i] * 255) / 1000。

配置文件信息表明运行时主要由对 f 的索引查找控制。我在这里使用了之前的问题来证明这些基本列表比 Python 中的 numpy 数组或数组更快,但是对于像这样绘制线条,似乎仍有改进的空间。

什么是在屏幕上绘制未知数量的线的好且快速的方法,知道您最终将缩放输出以渲染到屏幕上?有没有摆脱索引开销的好方法?

0 投票
2 回答
3211 浏览

bresenham - Bresenham Line 算法中的决策变量是如何计算出来的?

我研究的每一篇关于 Bresenham 线算法的文章,他们都在谈论一个决策变量

这个想法mathematical term从何而来?

dx * (d1 - d2)我的意思是,作为决策变量背后的想法是什么?

为什么没有d1 - d2被采取?

这是其中一篇文章。

0 投票
2 回答
21156 浏览

javascript - Javascript 中的 Bresenham 算法

我需要一种快速算法来计算两点之间直线的坐标。我试图找到好的 JavaScript Bresenham 实现,但是有太多而且相当混乱的出版物。在维基百科中——这里最快和最简单的形式(两个方向没有除法和错误计算)以伪代码呈现,如下所示:

你知道基于这个伪代码的简单而健壮的 JavaScript Bresenham 实现吗?

0 投票
1 回答
1714 浏览

algorithm - 使用 Bresenham 线算法的简单追逐游戏运动

我正在创建一个游戏,我试图使用 Bresenham 的线算法(http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)让敌人在 2D 地图上追逐玩家。游戏的概念类似于下面的概念。下面的伪代码来自http://herselfsai.com/2007/07/simple-predator-prey-chase-algorithms.html

敌人在地图上追逐玩家,但它是 0、45、90 等角度的以太,而不是直线。此外,在我的代码中,敌人也有随机速度(介于 0 和 5 之间),有时会过度射击玩家,然后一次又一次地尝试纠正和过度射击。这可能是一个单独的问题。

我肯定只是没有完全掌握算法的概念。实现这一点的正确方法是什么?

提前致谢。