2010-11-16 32 views

Respuesta

2

Graphics.drawArc espera los siguientes parámetros:

  • x
  • Y
  • anchura
  • altura
  • startAngle
  • arcAngle

Dado el inicio y el final de su arco, es posible calcular un cuadro delimitador donde se dibujará el arco. Esto le proporciona suficiente información para proporcionar los parámetros: x, y, ancho y alto.

No ha especificado el ángulo deseado, así que supongo que puede elegir uno arbitrariamente.

21

Puede utilizar Canvas.drawArc, pero hay que calcular los argumentos que necesita:

permite decir que el centro del círculo es (x0, y0) y que contiene el arco de su dos puntos (x1, y1) y (x2, y2). Entonces el radio es: r = sqrt ((x1-x0) (x1-x0) + (y1-y0) (y1-y0)). Entonces:

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

¡Buena suerte!

+0

FYI: Este código funcionaría un poco mejor si usas variables 'float' en lugar de' int'. PI = 3.14, Square Roots, etc. Podrías estar creando muchos ceros si te quedas con los tipos 'int'. – jp2code

+4

en teoría sí. sin embargo, drawArc() tiene parámetros int. – botismarius

+0

Esto funciona perfectamente en C# para mí ... ¡Gracias! – Abhishek

Cuestiones relacionadas