Нарисуйте дугу с 2 точками и центром круга - PullRequest
12 голосов
/ 16 ноября 2010

У меня есть две точки круга и центр этого круга. Я хочу нарисовать дугу между этими точками. Метод drawArc простой и не соответствует моей цели. Кто-нибудь поможет?

Ответы [ 2 ]

23 голосов
/ 22 ноября 2010

Вы можете использовать Canvas.drawArc, но вы должны вычислить необходимые аргументы:

Позволяет сказать, что центр круга (x0, y0) и что дуга содержит ваши две точки (x1у1) и (х2, у2).Тогда радиус равен: r = sqrt ((x1-x0) (x1-x0) + (y1-y0) (y1-y0)).Итак:

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

Удачи!

2 голосов
/ 16 ноября 2010

Graphics.drawArc ожидает следующие параметры:

  • х
  • у
  • ширина
  • высота
  • StartAngle
  • arcAngle

Учитывая начальную и конечную точки дуги, можно вычислить ограничивающую рамку , где будет нарисована дуга. Это дает вам достаточно информации для предоставления параметров: x, y, ширина и высота.

Вы не указали желаемый угол, поэтому я думаю, что вы можете выбрать один произвольно.

...