我想知道是否有人知道任何算法来绘制具有特定厚度的线,基于 Bresenham 的线算法或任何类似的算法。
再想一想,我一直想知道对于每个 setPixel(x,y) 我只画一个圆圈,例如:
填充圆(x,y,厚度);对于每个 x,y 但这当然会非常慢。我也尝试使用字典,但这会很快填满记忆。检查我将要绘制的像素是否具有相同的颜色,但这对于大型画笔也不够有效。
也许我可以根据角度以某种方式画半圈?
任何输入将不胜感激。
谢谢。
我想知道是否有人知道任何算法来绘制具有特定厚度的线,基于 Bresenham 的线算法或任何类似的算法。
再想一想,我一直想知道对于每个 setPixel(x,y) 我只画一个圆圈,例如:
填充圆(x,y,厚度);对于每个 x,y 但这当然会非常慢。我也尝试使用字典,但这会很快填满记忆。检查我将要绘制的像素是否具有相同的颜色,但这对于大型画笔也不够有效。
也许我可以根据角度以某种方式画半圈?
任何输入将不胜感激。
谢谢。
您实际上无法沿线绘制圆圈。这种方法已获得专利。:) 您仍然可以阅读专利以获取灵感。
我不知道常用的是什么,但在我看来,您可以将 Bresenham 用于 1 像素宽的线,但将其垂直或水平扩展一定数量的像素。例如,假设您的线距水平线大约 30 度,并且您希望它是 4 个像素宽。您计算出线条的垂直粗细应该是五个像素。您运行 Bresenham,但对于每个像素 (x,y),您实际上绘制 (x,y)、(x,y+1)、... (x,y+4)。如果你想让线条的末端变圆,请在每一端画一个圆圈。
为了矫枉过正,制作手写笔的像素图(圆形或对角笔尖,或其他),然后绘制一组平行的 Bresenham 线,为手写笔中的每个像素绘制一条线。
Bresenhams 有一些计算像素覆盖率的变体,例如反晶粒几何库中使用的那些;无论您想要那种质量的东西 - 您都没有说输出介质是什么,而且大多数系统都比开关 LCDS 更强大,无论如何都支持有厚度的笔。