He estado trabajando en una biblioteca de gráficos durante algún tiempo y he llegado al punto en que tengo que dibujar Bezier y fuentes basadas en líneas. Hasta este punto, estoy atrapado con esto:
Las líneas verdes son los caminos de Bezier, y la parte blanca es lo que se representa.
El código que uso para Beziers está aquí . El de las líneas está aquí . Para aquellos que no saben que es Lua.
Representación de ruta (líneas): 32 - 39 El algoritmo es el siguiente:
- Iterando de 0 a 1 a ciertos intervalos
- calculando x e y con esta fórmula:
(1-index)^2*x1+2*(1-index)*index*x2+index^2*x3
Hasta este punto, todo funciona bien. Las líneas verdes se generan utilizando el método de ruta.
La parte blanca se representa de una manera completamente diferente:
- Obtengo las coordenadas x de los Béziers y las líneas en una Y particular, y las pongo en una tabla.
- Repito en la tabla y cada vez que encuentro un punto cambio el valor del estado. En el mismo bucle for también se verifica si el estado está activado. Si es así, dibujo un píxel en la pantalla.
Para encontrar los valores x de ay, utilizo el método getX (línea 46 en Bezier y línea 31 en Línea).
El código que uso para el dibujo en sí es este:
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
Explicación rápida: para i, v en pares itera a través de la tabla dada como argumento para los pares. love.graphics.points (x, y) establece un punto en x, y.
Gracias por adelantado.