проверить, не перекрываются ли/не пересекаются ли два сегмента одной окружности

Даны два сегмента одной и той же окружности :A=[a1, a2] и B=[b1, b2] с:

  • значения a1, a2, b1, b2 в градусах между -inf и +inf
  • а1 <= а2 ; b1 <= b2
  • а2 -а1<=360; b2 -b1<=360

Как я могу узнать, перекрываются ли эти два сегмента круга? (т.е. если они пересекаются или касаются хотя бы в одной точке)

Примеры:

A=[  -45°,    45°]; B=[   10°,   20°] ==> overlap
A=[  -45°,    45°]; B=[   90°,  180°] ==> no overlap
A=[  -45°,    45°]; B=[  180°,  360°] ==> overlap
A=[ -405°,  -315°]; B=[  180°,  360°] ==> overlap
A=[-3600°, -3601°]; B=[ 3601°, 3602°] ==> overlap (touching counts as overlap)
A=[ 3600°,  3601°]; B=[-3601°,-3602°] ==> overlap (touching counts as overlap)
A=[    -1°,    1°]; B=[ 3602°, 3603°] ==> no overlap 

Это выглядит как обманчиво простая проблема, но я не могу обдумать ее. В настоящее время у меня есть базовая идея решения, которое включает в себя разделение каждого сегмента на два, если он пересекает 0 °, но я не уверен, что это охватывает все случаи, и мне было интересно, есть ли элегантная формула.

5
задан HugoRune 3 August 2012 в 20:59
поделиться