Нарисуйте дугу с 2 точками и центром окружности

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


person CarolusPl    schedule 16.11.2010    source источник
comment
Это домашнее задание? Если это так, пожалуйста, отметьте это как таковое.   -  person javamonkey79    schedule 16.11.2010
comment
Я знаю, что существует множество функций для рисования дуги, но я не могу найти подходящую.   -  person CarolusPl    schedule 16.11.2010


Ответы (2)


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

Предположим, что центр окружности равен (x0, y0) и что дуга содержит две ваши точки (x1, y1) и (x2, y2). Тогда радиус равен: 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);

Удачи!

person botismarius    schedule 22.11.2010
comment
К вашему сведению: этот код работал бы немного лучше, если бы вы использовали float вместо int переменных. PI = 3,14, квадратные корни и т. д. Вы можете создать много нулей, если будете придерживаться типов int. - person jp2code; 19.12.2012
comment
в теории да. однако функция drawArc() имеет параметры типа int. - person botismarius; 20.12.2012
comment
Обратите внимание, что r = Math.hypot(x1-x0, y1 - 0) - person vdolez; 01.11.2016
comment
В настоящее время этот canvas.drawArc() имеет еще 2 параметра и предназначен для API 21. Используйте переопределенную версию, если вам нужна ‹ 21. - person CoolMind; 14.05.2020

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

  • x
  • y
  • ширина
  • высота
  • startAngle
  • угол дуги

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

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

person Adamski    schedule 16.11.2010