Я уже некоторое время работаю над графической библиотекой и дошел до того, что мне пришлось рисовать Безье и линейные шрифты. До этого момента я застрял с этим:
Зеленые линии - это пути Безье, а белая часть - это то, что визуализируется.
Код, который я использую для Безье, здесь . Один для строк здесь . Для тех, кто не знает, что это Луа.
Путь рендеринга (строк): 32 - 39 Алгоритм выглядит следующим образом:
- Итерация от 0 до 1 через определенные интервалы
- вычисление х и у по этой формуле:
(1-index)^2*x1+2*(1-index)*index*x2+index^2*x3
До этого момента все работало нормально. Зеленые линии создаются методом пути.
Белая часть отображается совершенно иначе:
- Я получаю координаты x Безье и линии в определенном Y, помещаю их в таблицу.
- Я перебираю таблицу и каждый раз, когда сталкиваюсь с точкой, я меняю значение состояния. В том же цикле for также проверяется, включено ли состояние. Если это так, я рисую пиксель на экране.
Чтобы найти значения x для y, я использую метод getX (строка 46 в Безье и строка 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 в парах перебирает таблицу, заданную в качестве аргумента для пар. love.graphics.points (x, y) устанавливает точку в x, y.
Заранее спасибо.