2010-11-16 12 views
12

Ho due punti di cerchio e centro di questo cerchio. Voglio disegnare un arco tra questi punti. Il metodo drawArc è semplice e non adatto al mio scopo. Chiunque aiuto?Disegno arco con 2 punti e centro del cerchio

+0

È questo compito? Se è così, taggalo come tale. – javamonkey79

+0

So che esistono le funzioni di meny per disegnare Arc, ma non posso fint adatto – CarolusPl

risposta

2

Graphics.drawArc aspetta i seguenti parametri:

  • x
  • y
  • larghezza
  • altezza
  • startAngle
  • arcAngle

Dato il punto di partenza e di arrivo dell'arco, è possibile calcolare un riquadro di delimitazione in cui verrà disegnato l'arco. Questo ti dà abbastanza informazioni per fornire parametri: x, y, larghezza e altezza.

Non hai specificato l'angolo desiderato, quindi credo che potresti sceglierne uno arbitrariamente.

21

È possibile utilizzare Canvas.drawArc, ma è necessario calcolare gli argomenti di cui ha bisogno:

Diciamo che il centro del cerchio è (x0, y0) e che l'arco contiene il due punti (x1, y1) e (x2, y2). Quindi il raggio è: r = sqrt ((x1-x0) (x1-x0) + (y1-y0) (y1-y0)). Quindi:

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); 

Buona fortuna!

+0

FYI: Questo codice funzionerebbe un po 'meglio se si usassero le variabili 'float' invece di' int'. PI = 3.14, Radici quadrate, ecc. Potresti creare molti zeri se rimani con i tipi 'int'. – jp2code

+4

in teoria si. tuttavia, drawArc() ha parametri int. – botismarius

+0

Questo funziona perfettamente in C# per me..Grazie! – Abhishek