2010-11-16 2 views
12

J'ai deux points de cercle et le centre de ce cercle. Je veux faire un arc entre ces points. La méthode drawArc est simple et ne correspond pas à mon objectif. Quelqu'un aide-t-il?Tracer l'arc avec 2 points et le centre du cercle

+0

Est-ce que ce sont les devoirs? Si oui, merci de le marquer comme tel. – javamonkey79

+0

Je sais qu'il existe des fonctions meny pour dessiner Arc, mais je ne peux pas finner – CarolusPl

Répondre

2

Graphics.drawArc attend les paramètres suivants:

  • x
  • y
  • largeur
  • hauteur
  • startAngle
  • arcAngle

Compte tenu de vos points de début et de fin d'arc, il est possible de calculer un cadre de délimitation où l'arc sera dessiné. Cela vous donne suffisamment d'informations pour fournir des paramètres: x, y, largeur et hauteur.

Vous n'avez pas spécifié l'angle désiré, donc je suppose que vous pouvez en choisir un arbitrairement.

21

Vous pouvez utiliser Canvas.drawArc, mais vous devez calculer les arguments dont il a besoin:

Disons que le centre du cercle est (x0, y0) et que l'arc contient vos deux points (x1, y1) et (x2, y2). Alors le rayon est: r = sqrt ((xl-xo) (xl-xo) + (y1-yO) (y1-y0)). Donc:

int r = (int)Math.sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); 
int x = x0-r; 
int y = y0-r; 
int width = 2*r; 
int height = 2*r; 
int startAngle = (int) (180/Math.PI*atan2(y1-y0, x1-x0)); 
int endAngle = (int) (180/Math.PI*atan2(y2-y0, x2-x0)); 
canvas.drawArc(x, y, width, height, startAngle, endAngle); 

Bonne chance!

+0

FYI: Ce code fonctionnerait un peu mieux si vous utilisiez des variables 'float' au lieu de' int'. PI = 3.14, Racines carrées, etc. Vous pourriez créer beaucoup de zéros si vous vous en tenez aux types 'int'. – jp2code

+4

en théorie oui. cependant, drawArc() a des paramètres int. – botismarius

+0

Cela fonctionne parfaitement en C# pour moi..Merci! – Abhishek

Questions connexes