web-dev-qa-db-fra.com

Dessiner Ellipse d'une boîte à bornes?

Est-ce que quelqu'un connaît un bon algorithme pour dessiner une ellipse d'une boîte à bornes?

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

Je n'ai pas besoin de quelque chose d'optimisé pour une efficacité incompréhensible et illisible. Juste quelque chose d'assez bon pour utiliser une API de dessin simple. Vous pouvez fournir l'algorithme de votre réponse dans toutes les langages de programmation ou même pseudocode, mais je préférerais cela si vous utilisez C++ ou une syntaxe C++ - comme une syntaxe.

3
ApprenticeHacker

Un pseudo-code très basique et complètement non testé pour dessiner une ellipse à l'aide d'une équation polaire paramétrique est inférieure à:

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

Notes/Commentaires:

  • Suppose une ellipse sans prise.
  • Changement de radians (0 à 2 pi) si votre langue cos/péché prend des angles dans les radians (comme C/C + fait).
  • Vous pouvez utiliser la symétrie pour réduire la taille de la boucle à 0 à 90 degrés.
  • Modifiez la précision du dessin selon les besoins en modifiant le montant de la boucle (1 degrés comme indiqué).
7
uesp

Normalement, j'ai défini une ellipse avec le point central, semi-majeur, semi-mineur et l'angle de rotation.

Ce que vous avez décrit est une ellipse dont le point central doit être déterminé et n'est pas pivoté l'algorithme le plus largement utilisé dans les graphiques pour un cercle est de Bresenham, Kennedy l'a adapté pour une ellipse.

2
mhoran_psprep