Algorithm 椭圆厚度算法

Algorithm 椭圆厚度算法,algorithm,graphics,ellipse,Algorithm,Graphics,Ellipse,有人知道画有厚度的椭圆的算法吗? 我在谷歌上搜索过,但我只找到了绘制1像素宽椭圆的算法,如下所示: 谢谢 您需要精确到什么程度 是否希望实际椭圆点位于“x”像素宽度边框的近似中心?真正的消失点是内侧边缘吗?外缘 我问b/c你发现的绅士算法在可能的情况下努力坚持整数数学,所以我也会在他的算法后面加上整数运算 内侧边缘:更改Plot4EllipsePoints子例程以绘制x像素,而不是绘制一个,因为新的x像素距离椭圆中心更远。2像素eg: 程序图4椭圆点(X,Y:纵向) 摘自: 外边缘:与内边缘

有人知道画有厚度的椭圆的算法吗? 我在谷歌上搜索过,但我只找到了绘制1像素宽椭圆的算法,如下所示:


谢谢

您需要精确到什么程度

是否希望实际椭圆点位于“x”像素宽度边框的近似中心?真正的消失点是内侧边缘吗?外缘

我问b/c你发现的绅士算法在可能的情况下努力坚持整数数学,所以我也会在他的算法后面加上整数运算

  • 内侧边缘:更改Plot4EllipsePoints子例程以绘制x像素,而不是绘制一个,因为新的x像素距离椭圆中心更远。2像素eg:

    程序图4椭圆点(X,Y:纵向)

    摘自:

  • 外边缘:与内边缘相同,但更靠近椭圆中心
  • 居中:执行内部边缘+ 外缘都有。这将只有奇数厚度,1像素,3像素,5像素
设E1为半径r+厚度/2的椭圆,E2为半径r-厚度/2的椭圆


调整以填充E1而不填充E2。

通过一个厚度为1/2的椭圆填充。您是指两个椭圆之间的差异,一个是两个轴延长了1/2厚度,另一个是两个轴缩短了1/2厚度

如果是这样,则可以将链接算法调整为扫描线填充算法。你要做的一件事是只沿着较短的轴工作。(沿较长的轴工作也可行,但涉及冗余计算)

让我们说它比它的高宽。(如果是另一种情况,在绘制时只需翻转轴即可。)在这种情况下,将为每个y位置绘制一条或两条水平线段

  • 对于从外椭圆顶部到椭圆中心的每个y值:
    • 如果y在内椭圆上方:
      • 从外椭圆上的左上象限点到外椭圆上的右上象限点绘制一条水平线段
    • 否则(y不在内椭圆上方):
      • 绘制两条水平线段:
        • 一个从外椭圆的左上象限点到内椭圆的左上象限点
        • 另一个从内椭圆的右上象限点到外椭圆的右上象限点
    • 无论哪种方式,都要在椭圆的x轴上镜像所有图形以 渲染底部的两个象限
begin
   PutPixel(CX+X, CY+Y);          {point in quadrant 1}
   PutPixel(CX+X+1, CY+Y+1);          {point in quadrant 1}
   PutPixel(CX-X, CY+Y);          {point in quadrant 2}
   PutPixel(CX-X-1, CY+Y+1);          {point in quadrant 2}
   PutPixel(CX-X, CY-Y);          {point in quadrant 3}
   PutPixel(CX-X-1, CY-Y-1);          {point in quadrant 3}
   PutPixel(CX+X, CY-Y)           {point in quadrant 4}
   PutPixel(CX+X+1, CY-Y-1)           {point in quadrant 4}
end;