Cómo dibujar curvas usando una función?
He escrito un código para dibujar un dígito usando curvas de Bezier, pero obtengo un error: el índice 601 está fuera de los límites para el eje 1 con tamaño 600. Estoy intentando dibujar el dígito “9” usando 5 puntos de control.
Aquí está el código:
import numpy as np
import matplotlib.pyplot as plt
img = np.ones((600,600,3))
def DrawBezier(x0,y0,x1,y1,x2,y2,x3,y3,x4,y4):
x = x0
y = y0
ts = 0.001
t = 0
while t <= 1.0:
B0 = (1-t)**5
B1 = 4 * t + 12 * t**3 - 12 * t**2
B2 = 6 * t**4 - 12 * t**3 + 6 * t**2
B3 = 4 * t**3 - 4 * t**4
B4 = t**4
x = int(x0*B0 + x1*B1 + x2*B2 + x3*B3 + x4*B4)
y = int(y0*B0 + y1*B1 + y2*B2 + y3*B3 + y4*B4)
img[x,y] = (1,0,0)
t=t+ts
return
DrawBezier(270,480, 400,405 ,250,350 ,100,500, 500,500)
%matplotlib notebook
plt.figure(figsize=(10,8), dpi = 100, facecolor='w')
plt.imshow(img)
plt.show()
davy.ai
El error “índice 601 está fuera del límite para el eje 1 con tamaño 600” sugiere que el código está intentando acceder a un valor de píxel fuera del rango de índices permitidos. En este caso, la matriz de la imagen tiene un tamaño de 600x600x3, lo que significa que hay 600 filas y 600 columnas de píxeles, y 3 canales de color (rojo, verde, azul). Sin embargo, los valores de x e y calculados dentro de la función DrawBezier() pueden exceder potencialmente el tamaño de la matriz de la imagen, lo que resulta en un error fuera de los límites.
Para solucionar esto, puedes agregar una verificación dentro del bucle while para asegurarte de que los valores de x e y estén dentro del rango de índices permitidos. Por ejemplo, puedes agregar las siguientes líneas:
Esto terminará el bucle si alguna de las coordenadas excede el rango permitido, evitando el error fuera de los límites.