Geometry-Based Edge Clustering
 All Classes Functions
Edge.java
1 import java.util.ArrayList;
2 
3 import org.jdelaunay.delaunay.geometries.DEdge;
4 
5 import com.vividsolutions.jts.geom.Coordinate;
6 import com.vividsolutions.jts.geom.LineSegment;
7 
14 public class Edge {
15 
16  private ArrayList<Node> subNodes;
17  private Node endNode;
18  private Node startNode;
19 
25  public Edge(Node startNode, Node endNode){
26  if(startNode.getX() <= endNode.getX()){
27  this.startNode = startNode;
28  this.endNode = endNode;
29  } else{
30  this.endNode = startNode;
31  this.startNode = endNode;
32  }
33  subNodes = new ArrayList<Node>();
34  }
35 
41  public Edge(Node startNode, double angleXAxis){
42  this.startNode = startNode;
43  double x = Math.cos(Math.toRadians(angleXAxis));
44  double y = -Math.sin(Math.toRadians(angleXAxis));
45  endNode = new Node(startNode.getX()+x, startNode.getY()+y);
46  subNodes = new ArrayList<Node>();
47  }
48 
53  public Edge(DEdge dEdge){
54  this(new Node(dEdge.getStartPoint()), new Node(dEdge.getEndPoint()));
55  subNodes = new ArrayList<Node>();
56  }
57 
62  public Node getEndNode() {
63  return endNode;
64  }
65 
70  public void setEndNode(Node endNode) {
71  this.endNode = endNode;
72  }
73 
78  public Node getStartNode() {
79  return startNode;
80  }
81 
86  public void setStartNode(Node startNode) {
87  this.startNode = startNode;
88  }
89 
94  public ArrayList<Node> getSubNodes(){
95  return subNodes;
96  }
97 
102  public void addSubNode(Node node){
103  subNodes.add(node);
104  }
105 
111  public boolean isIncident(Node node){
112  return (node.equals(startNode) || node.equals(endNode));
113  }
114 
119  public double angleXAxis(){
120  double angle = Math.toDegrees(Math.acos(dx()/magnitude()));
121  while(angle >= 180)
122  angle -= 180;
123  return angle;
124  }
125 
130  public double dx(){
131  return endNode.getX()-startNode.getX();
132  }
133 
138  public double dy(){
139  return endNode.getY()-startNode.getY();
140  }
141 
146  public double magnitude(){
147  return Math.sqrt(dx()*dx()+dy()*dy());
148  }
149 
154  public int[] subNodesXInt(){
155  int[] subX = new int[subNodes.size()];
156  for(int i=0; i < subNodes.size(); i++){
157  subX[i] = subNodes.get(i).getXInt();
158  }
159  return subX;
160  }
161 
166  public int[] subNodesYInt(){
167  int[] subY = new int[subNodes.size()];
168  for(int i=0; i < subNodes.size(); i++){
169  subY[i] = subNodes.get(i).getYInt();
170  }
171  return subY;
172  }
173 
178  public DEdge toDEdge(){
179  return new DEdge(startNode.toDPoint(), endNode.toDPoint());
180  }
181 
186  public LineSegment toLineSegment(){
187  return new LineSegment(startNode.toCoordinate(), endNode.toCoordinate());
188  }
189 
195  public Node intersection(Edge other){
196  Coordinate s = toLineSegment().intersection(other.toLineSegment());
197  if(s != null)
198  return new Node(toLineSegment().intersection(other.toLineSegment()));
199  else
200  return null;
201  }
202 
206  public void deleteSubNodes(){
207  subNodes.clear();
208  }
209 }