Я создал функцию для вычисления точки пересечения двух сегментов линии.Линии сегментов Пересечение (точка пересечения)
Unfortunantly код ниже dosen't работы, если один из сегмента вертикалы
public static Point intersection(Segment s1, Segment s2) {
double x1 = s1.getP1().getX();
double y1 = s1.getP1().getY() ;
double x2 = s1.getP2().getX();
double y2 = s1.getP2().getY() ;
double x3 = s2.getP1().getX();
double y3 = s2.getP1().getY();
double x4 = s2.getP2().getX();
double y4 = s2.getP2().getY();
double d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
if (d == 0) {
return null;
}
double xi = ((x3 - x4) * (x1 * y2 - y1 * x2) - (x1 - x2) * (x3 * y4 - y3 * x4))/d;
double yi = ((y3 - y4) * (x1 * y2 - y1 * x2) - (y1 - y2) * (x3 * y4 - y3 * x4))/d;
Point p = new Point(xi, yi);
if (xi < Math.min(x1, x2) || xi > Math.max(x1, x2)) {
return null;
}
if (xi < Math.min(x3, x4) || xi > Math.max(x3, x4)) {
return null;
}
return p;
}
проблема, когда я есть отрезок вертикальной линии, то эта формула
double d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
равно 0 и метод возвращает null.
Как я могу справиться с этим исключением.
Спасибо
Несмотря на то, что ваш вопрос читабельен и подлежит ответчивости, есть еще кое-что для улучшения, включая объяснение каждой неочевидной переменной и включение в нее того, что вы пробовали до сих пор. Вы получите ответ в конце концов, но, пожалуйста, см. Http://stackoverflow.com/help/how-to-ask, тем временем – snickers10m
Просто сначала проверьте вертикальный футляр и разберетесь с ним отдельно. –
есть еще одна формула для обработки этого случая? то, что я хочу сделать, это добавить некоторое микро значение к одной из координат, поэтому у меня не будет умножения на 0, тогда я получу точку пересечения, но с некоторой потерей точности – user3521250