В качестве первого шага вы должны найти точку на ближайшем к курсору прямоугольнике, а расстояние между ними: расширение краев прямоугольника, вы разбиваете плоскость на 9 областей. В зависимости от региона, в котором находится курсор, искомое расстояние будет равным расстоянию до угла (формула расстояния по Евклидову) или расстоянию до края (разница абсцисс или ординат).
Вычесть радиус круга с этого расстояния. Это скажет вам, достаточно ли вы достаточно близко.
Если имеется возможность привязки, переместите курсор вдоль линии от текущей позиции курсора до ближайшей точки, пока не нажмете на угол или край. Вам нужно будет использовать параметрическое уравнение отрезка линии.
Полная дискуссия требует некоторой осторожности, но включает только простую математику.
Аналогичный подход можно привязать к сегменту линии. Вот трюк: если вы вращаете сегмент линии, чтобы сделать его горизонтальным, вы можете рассматривать сегмент линии как вырожденный прямоугольник и использовать тот же алгоритм привязки. Поверните сегмент линии и курсор, примените логику привязки и затем поверните обновленный курсор против часовой стрелки.
Не программирует ли это то, зачем программисты программируют? «Библиотеки» скучны. – Sinatr