Rectángulo redondeado en SDL solución propuesta por José Jorge Enríquez Rodríguez ----------------------------------------------------- Función: ------- rectRedondeado(SDL_Surface *surface, int x1, int y1, int x2, int y2, int radio, SDL_Color color); Parámetros: ---------- surface Superficie en la que se dibujará el rectángulo. x1,y1 Coordenadas de surface en donde se ubicará la esquina superior izquierda del rectángulo. x2,y2 Coordenadas de surface en donde se ubicará la esquina inferior derecha. radio Radio (en pixeles) del círculo cuyo segmento de arco será la esquina redondeada. color Color del rectángulo. Algoritmo: --------- - Se obtienen las longitudes de las líneas rectas (horizontales y verticales) que compondrán el rectángulo, a estas rectas se les resta el radio dos veces y se dibujan, se tendría algo así: -------- | | | | -------- - A continuación, se dibujan los arcos. Para ello, primero se obtiene la coordenada de origen del círculo, simplemente usando los valores del radio y sumándolos (o restándolos) a los puntos de las líneas rectas, dichos puntos se encuentran ubicados aproximadamente así: -------- | . . | | . . | -------- - Se obtienen los puntos x,y para cada punto del arco calculandolo mediante los ángulos de 0° a 90°, dichos puntos se obtienen mediante las sig. fórumlas: x = radio * sen A; y = radio * cos A; x,y es el punto en particular, radio el radio del círculo, A el ángulo en cuestión (se hace el cálculo para los ángulos de 1° a 89°, 0° y 90° son descartados). - Los valores x,y obtenidos, se suman o restan a los puntos de origen de acuerdo a la esquina de la que se trate. Comentarios: ----------- En el caso de las esquinas superior derecha e inferior izquierda, realicé una pequeña modificación, que es sumar 1 a la componente x en los ángulos menores a 45°, y sumar 1 a la componente y en los ángulos mayores a 45°. Para el ángulo de 45 °, se grafican dos puntos, uno agregando 1 a la componente x y el otro agregando 1 a la componente y. Esto porque no me agradaba del todo la apariencia de las esquinas con la primera aproximación. Luego veré si me quedo con esta "corrección" y la aplico también a las otras esquinas.