2010-11-16 4 views
12

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

+0

Это домашнее задание? Если это так, пометьте его как таковой. – javamonkey79

+0

Я знаю, что существует множество функций для рисования дуги, но я не могу использовать подходящий – CarolusPl

ответ

2

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

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

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

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

21

Вы можете использовать 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); 

Удачи вам!

+0

FYI: Этот код будет работать немного лучше, если вы использовали 'float' вместо' int' переменных. PI = 3.14, Square Roots и т. Д. Вы можете создать много нулей, если будете придерживаться типов 'int'. – jp2code

+4

в теории да. однако drawArc() имеет параметры int. – botismarius

+0

Это отлично работает на C# для меня ... Спасибо! – Abhishek

 Смежные вопросы

  • Нет связанных вопросов^_^