una tiene resolucion que profundidad megapixel mapa imagen fotografia color caracteristicas calidad alta algorithm graphics shapes ellipse

algorithm - tiene - ¿Cómo dibujo una elipse con orientación arbitraria píxel por píxel?



que profundidad tiene una fotografia de alta calidad (3)

Bresenham (famoso por su algoritmo de dibujo de líneas ) también tiene un algoritmo para dibujar una elipse. Puede intentar google bresenham ellipse .

Tengo que dibujar una elipse de tamaño arbitrario y orientación píxel por píxel. Parece bastante fácil dibujar una elipse cuyos ejes mayor y menor se alineen con los ejes xey, pero girar la elipse en un ángulo arbitrario parece más complicado. Inicialmente pensé que podría funcionar dibujar la elipse no girada y aplicar una matriz de rotación a cada punto, pero parece que eso podría causar errores al redondeo, y necesito una precisión bastante alta.

¿Es correcta mi sospecha sobre este método? ¿Cómo podría lograr esta tarea más precisamente?

Estoy programando en C ++ (aunque eso no debería importar ya que esta es una pregunta más orientada a algoritmos).

Edición: como señaló David, creo que realmente me pregunto cómo hacer la interpolación de píxeles.


Use el método de Bresenham para dibujar elipses alineadas en el eje, pero aplique una cizalladura a la elipse dibujada. También necesitará modificar las longitudes de los ejes. Una elipse esquilada también es una elipse. Este método preserva la ventaja de Bresenham de dibujar elipses llenas utilizando segmentos de líneas horizontales. Lo que necesita para hacer esto es la función que mapea una especificación de una elipse en términos de ejes y rotación en un conjunto diferente de ejes y un corte. Hay una solución disponible en línea en http://scratch.mit.edu/projects/50039326/ con una discusión sobre el método y una descripción de las matemáticas involucradas en http://scratch.mit.edu/discuss/topic/94194/

El mapeo fue descubierto por Nathan Dinsmore (usuario nXIII en el sitio MIT Scratch )


Utilizar:

x = X cos(a) - Y sin(a) y = Y cos(a) + X sin(a)

Donde a es el ángulo de rotación en sentido antihorario, (x, y) son las coordenadas nuevas, y (X, Y) son las antiguas.

Debe usar flotadores para preservar la precisión. Simplemente revise cada punto, aplique la transformación y voilà.

Editar: después de algunas búsquedas, aquí hay un código de Microsoft: http://research.microsoft.com/en-us/um/people/awf/graphics/bres-ellipse.html que dibuja secciones cónicas rasterizadas.