如何填充基于贝塞尔曲线和直线的多边形?

我已经在做一个图形库一段时间了,并且现在已经到了必须绘制贝塞尔和基于线条的字体的地步。到这个点为止我卡住了:

! [i](https://cdn.discordapp.com/attachments/132932473242910720/136193149239427073/unknown.png)

! [a](https://cdn.discordapp.com/attachments/132932473242910720/136196291146285056/unknown.png)

绿色线是贝塞尔路径,白色部分是所渲染的内容。

我用的贝塞尔代码在 [这里](http://pastebin.com/s8qDC4NH)。线条的源码在 [这里](http://pastebin.com/bKv55tch)。对于那些不知道的人,这是Lua。

路径渲染(线条):32-39 算法如下:

1.在某些间隔内迭代从0到1 2.使用此公式计算x和y:(1-索引)^ 2 * x1 + 2 *(1-索引)*索引* x2 +索引^ 2 * x3

到这个点为止一切都很顺利。使用路径方法生成了绿色线。

白色部分以完全不同的方式呈现:

1.我在特定Y处获取Bezier和线的x坐标,然后将它们放入表中。 2.我对表进行迭代,并每次遇到一个点时更改state的值。在同一个for循环中,我也检查状态是否为on。如果是,我会向屏幕绘制一个像素。

要查找y的x值,我使用getX方法(Bezier的第46行和Line的第31行)。

我用于绘图本身的代码是:

local xBuffer = {}
local state = false

for i=0,500 do
    for k,v in pairs(beziers) do
        a,b = v.getX(i)
        if a then
            xBuffer[round(a)] = 1
            if b then
                xBuffer[round(a)] = 1
            end
        end
    end
    for k,v in pairs(lines) do
        a = v.getX(i)
        if a then
            xBuffer[round(a)] = 1
        end
    end
    state = false
    for x=0,600 do
        if xBuffer[x] then
            state = not state
        end
        if state then
            love.graphics.points(x,i)
        end
    end
end

简要说明:对于i,v对,迭代给出作为pairs参数的表。love.graphics.points(x,y)设置点x,y。

提前感谢。

点赞