У меня есть следующий алгоритм для нахождения центра линии (средней точки).
public DoublePoint getMidPoint() {
return new DoublePoint((origin.x + endPoint.x) / 2, (origin.y + endPoint.y) / 2);
}
Кажется, работает для любых значений. Но я, кажется, помню гораздо более сложный алгоритм, включающий два круга, радиус которых равен длине линии, а центральные точки - это концы линии. Линия, проведенная от пересечения этих окружностей, будет пересекать отрезок, который вы тестируете, давая среднюю точку линии. Я точно знаю, что алгоритм работает 100% времени. Не уверен насчет моего более простого алгоритма, который кажется слишком простым.