基于sqrt的填充椭圆像素绘制函数

我正在尝试在 Lua 或 VB 的代码中编写一个函数来绘制/绘制一个填充的椭圆形。我对这个数学知识了解不多,需要一些帮助。

我在谷歌上搜索了所有与使用代码绘制椭圆形相关的内容,但我找不到一个好的简单有效的 VB 或 Lua 示例来绘制填充的椭圆形。

在这个网站之前的一篇文章中,我得到了如何绘制普通椭圆的答案,但是对于填充的椭圆,没有任何结果,这就是我为什么要新开一个主题。

以下是我访问过的一些网站,但我找不到一种方法来绘制填充的椭圆形,而不重绘已经绘制的像素...

https://sites.google.com/site/ruslancray/lab/projects/bresenhamscircleellipsedrawingalgorithm/bresenham-s-circle-ellipse-drawing-algorithm

http://groups.csail.mit.edu/graphics/classes/6.837/F98/Lecture6/circle.html

http://www.blitzbasic.com/codearcs/codearcs.php?code=2817

http://hackipedia.org/Algorithms/Graphics/pdf/A%20Fast%20Bresenham%20Type%20Algorithm%20For%20Drawing%20Ellipses%20by%20John%20Kennedy.pdf

https://scratch.mit.edu/projects/49873666/

http://www.sourcecodesworld.com/source/show.asp?ScriptID=112

这是我对普通椭圆形的代码(感谢“Johnny Strings”提供的 VB 版本):

点赞
用户3159048
用户3159048

下面是我过去用于 CPU 渲染器的代码,它非常高效也非常简单。

它依赖于椭圆的数学定义,因此椭圆在 x、y 中心绘制,并且宽度和高度从中心定义,而不是从另一侧定义。

绘制点函数在指定的 x、y 点处绘制像素。

local function drawaxisalignedellipse(x,y,w,h)
    --n 定义填充椭圆的水平线的边界。
    local n=w
    local w2=w*w
    local h2=h*h

    --绘制中心水平线。
    for i=x-w,x+w do
        drawpoint(i,y)
    end

    for j=1,h do
        --当前顶部和底部行。
        local ra,rb=y+j,y-j

        --此循环从 n 中减去 1,直到它在形状内。
        while w2*(h2-j*j)<h2*n*n and n~=0 do n=n-1 end

        --从 -n 绘制横线至 n 横跨椭圆
        for i=x-n,x+n do
            drawpoint(i,ra)
            drawpoint(i,rb)
        end
    end
end
2015-05-26 21:05:38