2015-10-02 2 views
0

Я ищу алгоритм, который может отображать пересекающиеся линии и дуги. Для линии у меня есть начальная и конечная точки, а для дуги у меня есть начальная, конечная и центральная точки. У меня также есть начальный и конечный угол ARC.Проверка линии и дуги пересекаются или нет

enter image description here

Как вы можете видеть на картинке выше меня нарисовать дугу и линию, где и как пересекаются. Как рассчитать это пересечение или нет?

Я нашел одну ссылку, которая может показывать пересечение между линией и кругом Circle Line Intersection points, но в моем случае у меня есть линия и дуга. Даже у меня также есть другой вопрос, что лучше всего вычислить пересечение между двумя ARC?

Любое предложение?

+0

http://stackoverflow.com/questions/30006155/calculate-intersect-point-between-arc-andlineline Я предполагаю, что если решение существует, то они пересекаются – user2707389

ответ

0

Приравнивая параметрические уравнения прямой и окружности,

X = Sx + t SEx = Cx + R cos(u) 
Y = Sy + t SEy = Cy + R sin(u) 

, которые могут быть записаны

t SEx + CSx = R cos(u) 
t SEy + CSy = R sin(u) 

вы избавляетесь u, добавив квадраты

(SEx² + SEy²) t² + 2 (SEx.CSx + SEy.CSy) t + CSx² + CSy² - R² = 0 

Решить квадратное уравнение для t и проверьте 0<t<1 (могут быть два решения).

Затем вычислить X и Y и из них

tan(u) = (Y - Cy)/(X - Cx) 

(использовать atan2). Затем проверьте, что u находится в допустимом диапазоне.


В течение двух дуг,

C0x + R0 cos(u) = C1x + R1 cos(v) 
C0y + R0 sin(u) = C1y + R1 sin(v) 

или

Dx + R0 cos(u) = R1 cos(v) 
Dy + R0 sin(u) = R1 sin(v) 

Суммируя квадраты,

2R.Dx cos(u) + 2R.Dy sin(u) + Dx² + Dy² + R0² = R1² 

Деление на 2R√(Dx²+Dy²) положить в виде

c cos(u) + s sin(u) = e 

, который может быть записан в виде

cos(u-w) = e, where tan(w) = s/c 

Тогда

u = w ± arcos(e) 

дает потенциальные перекрестки.

+0

Можете ли вы перевести код линии - arc в java? –

+0

@ShiladittyaChakraborty: Я бы предпочел, чтобы вы это сделали и опубликовали. SO не является бесплатной фабрикой кода. –

+0

Не могли бы вы объяснить переменную, которая используется так, чтобы она была легко реализована для меня? –

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