Disegno Ellisse da un riquadro di delimitazione?

3

Qualcuno conosce un buon algoritmo per disegnare un'ellisse da un riquadro di delimitazione?

draw_ellipse(int s1, int s2, int s3, int s4, color c); 

Non ho bisogno di qualcosa di ottimizzato per un'efficienza incomprensibile e illeggibile. Solo qualcosa di buono da usare per un semplice disegno api. Puoi fornire l'algoritmo nella tua risposta in tutti i linguaggi di programmazione o persino in pseudocodice, ma lo preferirei se usi la sintassi C ++ o simile a C ++.

    
posta ApprenticeHacker 26.01.2012 - 13:55
fonte

2 risposte

7

Uno pseudo-codice molto semplice e completamente non testato per disegnare un'ellisse usando un'equazione polare parametrica è qui sotto:

Function draw_ellipse(int X1, int Y1, int X2, int Y2)
     RX = (X2 - X1) / 2
     RY = (Y2 - Y1) / 2
     CX = (X2 + X1) / 2
     CY = (Y2 + Y1) / 2

     for Angle = 0 to 360
          X = CX + cos(Angle) * RX
          Y = CY + sin(Angle) * RY

          if (Angle > 0) DrawLine(LastX, LastY, X, Y)

          LastX = X
          LastY = Y
     Next Angle
End Function

Note / Commenti:

  • Presume un'ellisse non ruotata.
  • Passa ai radianti (da 0 a 2 pi) se il tuo linguaggio cos / sin prende angoli in radianti (come fa C / C +).
  • Puoi utilizzare la simmetria per ridurre la dimensione del ciclo a 0 - 90 gradi.
  • Modifica la precisione del disegno secondo necessità modificando la quantità del passo del ciclo (è 1 grado come mostrato).
risposta data 26.01.2012 - 18:54
fonte
2

Normalmente ho definito un'ellisse con il punto centrale, semi-maggiore, semi-minore e l'angolo di rotazione.

Quello che hai descritto è un'ellisse che il punto centrale deve essere determinato, e non viene ruotato L'algoritmo più utilizzato nella grafica per un cerchio è di Bresenham, Kennedy l'ha adattato per un'ellisse.

    
risposta data 26.01.2012 - 14:32
fonte

Leggi altre domande sui tag