es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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()
Tags:  , , ,

Answer

  1. Avatar for 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:

    if x < 0 or x >= 600 or y < 0 or y >= 600:
        break
    

    Esto terminará el bucle si alguna de las coordenadas excede el rango permitido, evitando el error fuera de los límites.

Comments are closed.