您可以使用Coordinate
(您的Node)和LineString
(您的Segment)对象来解决问题:
// origin point
Coordinate origin = new Coordinate(5, 0);
// segments
ArrayList<LineString> segmentList = new ArrayList();
LineString segmentA = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(0, 5), new Coordinate(5, 5)});
segmentList.add(segmentA);
LineString segmentB = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(4, 3), new Coordinate(6, 3)});
segmentList.add(segmentB);
LineString segmentC = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(7, 4), new Coordinate(10, 4)});
segmentList.add(segmentC);
// result list
ArrayList<Boolean> resultList = new ArrayList();
for(int i = 0; i < segmentList.size(); i++){
// flag to indicate intersection
boolean intersectionResult = false;
// get current segment
LineString currentSegment = segmentList.get(i);
// get segments from segment pooints to origin
LineString startSegment = new GeometryFactory().createLineString(new Coordinate[]{origin, currentSegment.getStartPoint().getCoordinate()});
LineString endSegment = new GeometryFactory().createLineString(new Coordinate[]{origin, currentSegment.getEndPoint().getCoordinate()});
// iterate over sections
for(int j = 0; j < segmentList.size(); j++){
// ignore same section
if(i != j){
// check for intersections between segments
if(startSegment.intersects(segmentList.get(j)) || endSegment.intersects(segmentList.get(j))){
intersectionResult = true;
continue;
}
}
}
// no intersection found
resultList.add(intersectionResult);
}
// print results
for(Boolean b : resultList){
System.out.println("intersection of segment -> " + b.booleanValue());
}