Как рассчитать координаты конечной точки в дуге, если центр и начальные координаты известны вместе с углом наклона в Android ..?

Я работаю над круговой диаграммой, на которой я нарисовал дуги с известными углами поворота. Теперь я хочу отображать метки в центре каждой дуги или, скажем, нарисовать линию из центра каждой дуги.

Учитывая, что я знаю координаты центра, начальные координаты, угол развертки и радиус, я хочу вычислить конечные координаты.

Я также пробовал это, нарисовав треугольник, соответствующий всем координатам, и также использовал формулу расстояния, но я не знаю, как решать уравнения в java.

Пожалуйста, предоставьте мне подходящее решение.


person Amritpal Singh    schedule 05.11.2012    source источник


Ответы (2)


Работа в векторах. Пусть A будет вектором от центра круга до начала дуги. Рассчитайте это по

A = start_point - centre

Пусть theta будет углом стреловидности (работать в радианах). Используйте матрицу вращения, чтобы повернуть начало дуги вокруг центра круга. http://en.wikipedia.org/wiki/Rotation_matrix

Ясно,

newpoint_x = cos(theta)*A_x + sin(theta)*A_y
newpoint_y = -sin(theta)*A_x + cos(theta)*A_y

где A_x - x-компонент A (и аналогично для A_y). потом

newpoint = centre + (newpoint_x,newpoint_y)

это то, что вам нужно. Возможно, точка повернута неправильно (против часовой стрелки), и если это так, просто используйте

theta = -theta

вместо. Это должно сработать для вас.

Если вы хотите оценить середину дуги, просто используйте

theta = theta / 2
person mathematician1975    schedule 05.11.2012
comment
спасибо за твой ответ. я почти понял идею, но не знаю, как использовать векторы (математические) в java .. - person Amritpal Singh; 16.11.2012

StartAngle = atan2(StartY-CenterY, StartX - CenterX) 
EndX = CenterX + Radius * Cos(StartAngle + SweepAngle)
EndY = CenterY + Radius * Sin(StartAngle + SweepAngle)

Другой способ: составить матричный продукт из

shift by (Center - Start)
rotation by SweepAngle
back shift

и примените эту матрицу к начальной точке (умножьте матрицу и вектор)

person MBo    schedule 05.11.2012
comment
спасибо за вашу поддержку .. вышеупомянутый метод вычисляет конечные точки, если SweepAngle ‹90. так что в одном случае он работает, а в других - нет ... - person Amritpal Singh; 16.11.2012