天天看點

Java判斷兩條直線,JAVA版判斷兩條線是否相交

public int segIntersect(Point A, Point B, Point C, Point D) {

Point intersection = new Point();

if (Math.abs(B.getY() - A.getY()) + Math.abs(B.getX() - A.getX()) + Math.abs(D.getY() - C.getY())

+ Math.abs(D.getX() - C.getX()) == 0) {

if ((C.getX() - A.getX()) + (C.getY() - A.getY()) == 0) {

System.out.println("ABCD是同一個點!");

} else {

System.out.println("AB是一個點,CD是一個點,且AC不同!");

}

return 0;

}

if (Math.abs(B.getY() - A.getY()) + Math.abs(B.getX() - A.getX()) == 0) {

if ((A.getX() - D.getX()) * (C.getY() - D.getY()) - (A.getY() - D.getY()) * (C.getX() - D.getX()) == 0) {

System.out.println("A、B是一個點,且在CD線段上!");

} else {

System.out.println("A、B是一個點,且不在CD線段上!");

}

return 0;

}

if (Math.abs(D.getY() - C.getY()) + Math.abs(D.getX() - C.getX()) == 0) {

if ((D.getX() - B.getX()) * (A.getY() - B.getY()) - (D.getY() - B.getY()) * (A.getX() - B.getX()) == 0) {

System.out.println("C、D是一個點,且在AB線段上!");

} else {

System.out.println("C、D是一個點,且不在AB線段上!");

}

return 0;

}

if ((B.getY() - A.getY()) * (C.getX() - D.getX()) - (B.getX() - A.getX()) * (C.getY() - D.getY()) == 0) {

//   System.out.println("線段平行,無交點!");

return 0;

}

intersection

.setX(((B.getX() - A.getX()) * (C.getX() - D.getX())

* (C.getY() - A.getY()) - C.getX()

* (B.getX() - A.getX()) * (C.getY() - D.getY()) + A

.getX() * (B.getY() - A.getY()) * (C.getX() - D.getX()))

/ ((B.getY() - A.getY()) * (C.getX() - D.getX()) - (B

.getX() - A.getX()) * (C.getY() - D.getY())));

intersection

.setY(((B.getY() - A.getY()) * (C.getY() - D.getY())

* (C.getX() - A.getX()) - C.getY()

* (B.getY() - A.getY()) * (C.getX() - D.getX()) + A

.getY() * (B.getX() - A.getX()) * (C.getY() - D.getY()))

/ ((B.getX() - A.getX()) * (C.getY() - D.getY()) - (B

.getY() - A.getY()) * (C.getX() - D.getX())));

if ((intersection.getX() - A.getX()) * (intersection.getX() - B.getX()) <= 0

&& (intersection.getX() - C.getX())

* (intersection.getX() - D.getX()) <= 0

&& (intersection.getY() - A.getY())

* (intersection.getY() - B.getY()) <= 0

&& (intersection.getY() - C.getY())

* (intersection.getY() - D.getY()) <= 0) {

if(  (A.getX() == C.getX() && A.getY() == C.getY() ) || ( A.getX() == D.getX() && A.getY() == D.getY() )

|| (B.getX() == C.getX() && B.getY() == C.getY() ) || ( B.getX() == D.getX() && B.getY() == D.getY() )){

System.out.println("線段相交于端點上");

return 2;

}else {

System.out.println("線段相交于點(" + intersection.getX() + ","

+ intersection.getY() + ")!");

return 1; // '相交

}

} else {

//   System.out.println("線段相交于虛交點(" + intersection.getX() + ","

//     + intersection.getY() + ")!");

return -1; // '相交但不線上段上

}

}