С помощью @Alex мне удалось создать следующий код:
// Returns true if the lines intersect, false otherwise
public boolean isIntersecting(Line other) {
if (equals(other)){
return false;
}
double x11 = this.start.getX();
double y11 = this.start.getY();
double x12 = this.end.getX();
double y12 = this.end.getY();
double x21 = other.start.getX();
double y21 = other.start.getY();
double x22 = other.end.getX();
double y22 = other.end.getY();
// special handling may be needed when x11 == x12
double m1 = (y12 - y11) / (x12 - x11);
double b1 = (x11 * y12 - x12 * y11) / (x12 - x11);
// special handling may be needed when x21 == x22
double m2 = (y22 - y21) / (x22 - x21);
double b2 = (x21 * y22 - x22 * y21) / (x22 - x21);
if ((long) m1 == (long) m2) {
if (this.start == other.start)
return true;
if (other.start == other.end)
return true;
if (other.start == this.end)
return true;
if (other.start == this.start)
return true;
return false;
}
double x = (b2 - b1)/(m1 - m2);
double y = m1 * x + b1; // or m2 * x + b2
if (x>x11 && x<x12 && y<y11 && y>y12 && x>x21 && x<x22 && y<y21 && y>y22) {
Point.intersection = new Point(x, y);
return true;
}
return false;
}
// Returns the intersection point if the lines intersect,
// and null otherwise.
public Point intersectionWith(Line other) {
if (isIntersecting(other)) {
return Point.intersection;
}
return null;
}
Проблема в том, что я действительно не знаю, имеют ли линии только одно пересечение или более. Я не знаю, что еще нужно сделать, и какие условия проверить, чтобы убедиться, что они имеют ОДНО пересечение.
Я должен сказать, что линии не должны быть бесконечными. Это означает, что одна линия может начинаться там, где заканчивается вторая, и у них также будет одинаковый наклон ("m") и только одно пересечение.
Кроме того, я хочу узнать, как правильно отправлять точку пересечения потому что я думаю, что сделал это неправильно и неправильно отправил во вторую функцию.