【问题标题】:Ellipse thickness algorithm椭圆厚度算法
【发布时间】:2011-01-10 19:27:58
【问题描述】:

有没有人知道绘制一个有厚度的椭圆的算法? 我用谷歌搜索,但我发现只有绘制 1 像素宽度椭圆的算法,如下所示: http://homepage.smc.edu/kennedy_john/belipse.pdf

谢谢。

【问题讨论】:

    标签: algorithm graphics ellipse


    【解决方案1】:

    你所说的有厚度的椭圆是指两个椭圆之间的差异,一个椭圆的两个轴被延长了 1/2 厚度,另一个椭圆被缩短了 1/2 厚度?

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

    假设它的宽度大于高度。 (如果是相反的方式,您只需在绘制时翻转轴。)在这种情况下,您将为每个 y 位置绘制一个或两个水平线段。

    • 对于从外椭圆顶部到椭圆中心的每个 y 值:
      • 如果 y 高于内椭圆:
        • 从外椭圆左上象限点到外椭圆右上象限点绘制一条水平线段。
      • Else(y 不高于内椭圆):
        • 画两条水平线段:
          • 从外椭圆的左上象​​限点到内椭圆的左上象​​限点。
          • 另一个从内椭圆的右上象限点到外椭圆的右上象限点。
      • 无论哪种方式,将所有绘图镜像到椭圆的 x 轴上 渲染底部的两个象限。

    【讨论】:

      【解决方案2】:

      你需要准确到什么程度?

      您想要真正的椭圆点位于“x”像素宽度边框的大致中心吗?真正的椭圆点是内边缘吗?外缘?

      我问 b/c,你发现的绅士算法尽可能地坚持使用整数数学,所以我也会将整数工作附加到他的算法中。

      • inside edge:更改 Plot4EllipsePoints 子例程以绘制 x 像素而不是 1,其中新的 x 像素离椭圆中心更远。 2 像素例如:

        过程 Plot4EllipsePoints(X,Y : longint);

        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;
        

        取自:http://homepage.smc.edu/kennedy_john/belipse.pdf

      • 外边缘:与内边缘相同,但更靠近椭圆中心。
      • 居中:执行内边缘 + 外缘都。这将只有奇数厚度,1 pix,3 pix,5 pix。

      【讨论】:

        【解决方案3】:

        令 E1 为半径为 r + 厚度 / 2 的椭圆,E2 为半径为 r - 厚度 / 2 的椭圆。

        调整 Scanline Fill Algorithm 以填充 E1 而不填充 E2。

        【讨论】:

          猜你喜欢
          • 2016-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多