问题标签 [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.
c++ - 在 OpenGL 中用一些颜色填充 Bresenham 圆
我正在使用这个 Bresenham 的算法来画圆。此代码有效,但我需要实心圆圈,而不仅仅是边框。
这是我的代码:
有什么办法吗?
algorithm - Bresenham 的线条绘制算法
我做了这个代码。此代码处理 dx 和 dy 大于 0 的情况。但是,当其中一个小于 0 时该怎么办。算法说 m 应该被视为绝对值,x 和 y 应该递减。但是如何在第二个 for 循环中减少 i(x) 呢?
java - 绘制边和角相等的多边形
我正在使用 Bresenham 线算法来绘制一条简单的线。我需要帮助来使用此算法创建具有相等边和角度的多边形。边将是 Bresenham 算法创建的线,但是我如何使用创建的线来绘制具有 X 个边和相等角度的多边形?
这是我正在使用的线算法:
提前致谢。
java - Java坐标系
我正在研究 Java 中的 Bresenham 画线算法,我已经能够画线,但我的坐标有问题。我的行从屏幕的左上角开始,我希望它从左下角开始。我试过仿射变换但失败了。这是我的代码示例。
谢谢你的帮助!!
c - 这个画线算法可以优化吗?- SDL
对于我一直在从事的项目,使用渐变绘制线条的能力(即它们在绘制的间隔内改变颜色)将非常有用。我有一个算法,我将在下面粘贴,但结果非常慢。我正在使用 Bresenham 算法找到每个点,但我担心我已经达到了软件渲染的极限。到目前为止,我一直在使用 SDL2,我的画线算法看起来比SDL_RenderDrawLine
. 这是一个估计值,是通过比较两个函数绘制 10,000 条线的时间得出的。我的功能将花费近 500 毫秒,并且SDL_RenderDrawLine
在我的机器上在 2-3 毫秒内完成。我什至用水平线测试了这些函数,以确保它不仅仅是一个拙劣的 Bresenham 算法,并且类似的缓慢孵化。不幸的是,SDL 没有用于绘制渐变线的 API(或者如果有,我是盲人)。我知道任何软件渲染都会比硬件慢得多,但是速度的剪切幅度让我感到惊讶。有没有一种方法可以用来加快速度?我是不是把绘图系统搞砸了?我考虑过保存我希望绘制的像素数组,然后将它们一次全部推送到屏幕上,但我不知道如何使用 SDL2 执行此操作,而且我似乎无法在 wiki 中找到 API或允许这样做的文档。那会更快吗?
感谢您的考虑!
边注:
我不愿意继续使用 OpenGL 3.0+(我听说 SDL2 支持),因为我不知道如何使用它。我发现的大多数教程都解释了使用 SDL 设置上下文然后将屏幕着色为纯色的过程,但在解释如何绘制形状等之前就停止了。如果有人可以提供一个开始学习这方面的好地方,那也将非常有帮助。
algorithm - 精确的亚像素画线算法(光栅化算法)
我需要一种算法,它可以(有点)比Bresenham 画线算法慢,但必须更精确。我的意思是“精确”:每个触摸的像素都应该被打印出来。不多,但也不少!这意味着不能选择使用更粗的线或类似的线,因为会涉及太多像素。另外,我不需要像以前问 过的图形框架或类似的东西,我需要算法!该应用程序实际上并不在“图形”中,而是在像素为“图块”的地理区域中。
对我来说主要的问题是我需要亚像素精度,这意味着一条线可以从 0.75/0.33 开始,而不仅仅是像整数值那样从 0/0 开始。我试图在过去几个小时内创建一个可行的解决方案,但无法使其正常工作 - 边缘情况太多。
首先,我认为应该使用像Wu的算法这样的抗锯齿版本,但是它打印的像素太多(尤其是起点和终点),并且在某些情况下它仍然会丢失一些像素,例如非常短的线条。
然后我试图让 Bresenham 工作,在这里我用 'else if' 替换了第二个 'if' ,正如这里指出的那样,它更接近但仍然不存在。然后我尝试将 Bresenham 从整数精度移动到浮点精度,这导致了无限循环(因为 x,y 值跳过了完成条件if (y1 == y2 && x1 == x2)
)。
我可以使用简单的线条绘制解决方案,但delta
我应该使用哪个?例如,如果我使用 0.1,我仍然会丢失一些像素,而使用较小的值可能会花费太长时间(并且仍然会丢失像素)。
C/Java/... 中的工作解决方案将不胜感激。至少它应该适用于 octant 1,但一个完整的解决方案会更好。
更新:我想出了以下想法:使用简单的线光栅化,您可以为每个点计算 4 个像素候选。然后检查这 4 个像素,如果线真的穿过它们。但我不确定线/框相交是否足够快。
algorithm - Bresenham 整数方程(不仅仅是算法)
我正在寻找一个基本版本的 bresenham 线算法的方程,如果 X 值已知,我可以计算 Y 值的位置。
X 始终为正且始终大于 Y。循环只是将 X 加 1 直到到达终点。
这是我的代码:
我正在寻找的是一种在不运行算法且仅使用整数数学的情况下确定步长(Y 轴)的值在特定 X 值处的方法。
这样做的原因是我有一个可以暂停的系统,但只返回当前的 X 值(不是 Y),当这种情况发生时我需要计算出 Y 值。
戴夫
java - 从带有空格的文本文件中读取,然后放入 arrayList
上周我一直在试图弄清楚如何让这个愚蠢的代码工作。除了从我的文本文件中读取之外,我已经设法让一切正常工作。它可以读取一行上的单个整数,但是当给定一行包含多个用空格分隔的整数时,它就吓坏了。现在我已经去尝试修复它,代码甚至不再编译了。只有一条线引起了问题。我不擅长编码,所以我不知道从哪里开始。是的,我在网上查过这个。是的,我已经检查了论坛。是的,我已经尝试了多种不同的方法来完成这项工作......我该如何解决这个问题?:(
感谢您的帮助!我确定我只是错过了一些非常简单的东西......
raytracing - 光线追踪:Bresenham 与 Siddon 算法
我正在开发一种基于铅笔束方法的放射治疗逆向规划工具。这些方法中的一个重要步骤(特别是在剂量计算中)是来自许多来源的光线追踪,最常用的算法之一是 Siddon 的算法(这里有一个很好的简短描述http://on-demand.gputechconf.com/ gtc/2014/poster/pdf/P4218_CT_reconstruction_iterative_algebraic.pdf)。现在,我将尝试简化我的问题:
输入数据是 CT 图像(带有值的 3D 矩阵)和图像周围的一些源位置。你可以想象一个立方体和周围的许多点,它们都在相同的距离但不同的方向角,辐射线来自哪里。每条射线都将穿过体积,并根据与源的距离为每个体素分配一个值。Siddon 算法的优点是在光线追踪的迭代过程中按时计算长度。但是,我知道 Bresenham 的算法是评估矩阵中从一个点到另一个点的路径的有效方法。因此,即使在 Bresenham 的迭代过程中,从源到特定体素的长度也可以很容易地计算为欧几里德距离两个点。
那么,既然知道这两种方法都已经很老了,而且很有效,那么使用 Siddon 代替 Bresenham 有明确的优势吗?也许我在这里遗漏了一个重要的细节,但对我来说很奇怪的是,在这些剂量计算程序中,布雷森汉姆并不是一个真正的选择,而西登总是作为黄金标准出现。
感谢您的任何评论或回复!
再会。
algorithm - 在 MIPS 中使用 Bresenham 算法,字节序如何影响 BMP 文件中的绘图像素?
我想在 MIPS 程序集中创建一个程序,它制作并保存一个 1 bpp BMP 文件,其中将使用 Bresenham 算法绘制一个不同半径长度的圆(由用户在控制台上提供)。
目前,我有一个定义明确的 BMP 文件,用于直径的整数值,但是我正在努力解决另外两件事:
- 在位图的右地址绘制像素
- 实施正确的Bresenham 算法一次应用 8 个点
这是我在文本段中负责在正确地址位置绘制像素的代码的一部分:
下面的部分是一个简单的示例,用于测试目的,显示像素未显示在指定位置:
虽然,我的程序绘制像素,但它们以某种相反的顺序排列。我想知道这是否与 MIPS 程序集中的不同大/小端序有关,如果是,我该如何解决?
非常感谢您的帮助,也许如果您设法在这部分指导我,则不需要关于 Bresenham 算法的第二个问题。