protected List<Polygon> computePolygons(List<Coord3d> coordinates) { // Append all input Jzy3d coordinates in JDT triangulator DelaunayTriangulation triangulator = new DelaunayTriangulation(); for (Coord3d coord: coordinates) { triangulator.insertPoint(JDTConverter.toJdtPoint(coord)); } // Retrieve triangles computed by JDT List<Polygon> polygons = new ArrayList<Polygon>(triangulator.trianglesSize()); Iterator<Triangle> it = triangulator.trianglesIterator(); while (it.hasNext()) { Triangle triangle = it.next(); // isHalfplane indicates a degenerated triangle if (triangle.isHalfplane()) continue; polygons.add(JDTConverter.toJzyPolygon(triangle)); } return polygons; }
/** * returns an iterator object involved in the last update. * * @return iterator to all triangles involved in the last update of the * triangulation NOTE: works ONLY if the are triangles (it there is * only a half plane - returns an empty iterator */ public Iterator<Triangle> getLastUpdatedTriangles() { Vector<Triangle> tmp = new Vector<Triangle>(); if (this.trianglesSize() > 1) { Triangle t = currT; allTriangles(t, tmp, this.modCount); } return tmp.iterator(); }
/** * * @param x * - X cordination of the query point * @param y * - Y cordination of the query point * @return true iff (x,y) falls inside this triangulation (in its 2D convex * hull). */ public boolean contains(double x, double y) { return contains(new Point(x, y)); }
private Triangle insertPointSimple(Point p) { Triangle t = find(startTriangle, p); if (t.isHalfplane()) startTriangle = extendOutside(t, p); else startTriangle = extendInside(t, p); return startTriangle; startTriangulation(firstP, p); return null; startTriangle = extendOutside(firstT.getAbTriangle(), p); allCollinear = false; break; case Point.RIGHT: startTriangle = extendOutside(firstT, p); allCollinear = false; break; case Point.ONSEGMENT: insertCollinear(p, Point.ONSEGMENT); break; case Point.INFRONTOFA: insertCollinear(p, Point.INFRONTOFA); break; case Point.BEHINDB: insertCollinear(p, Point.BEHINDB); break;
Vector<Point> pointsVec = findConnectedVertices(pointToDelete, true); if (pointsVec == null) { return; Triangle triangle = findTriangle(pointsVec, pointToDelete); addedTriangles.add(triangle); Point p = findDiagonal(triangle, pointToDelete); deleteUpdate(pointToDelete); for (Triangle t : deletedTriangles) { if (t == startTriangle) {
public void insertPoints(Collection<Point> points) { for (Point p : points) { insertPoint(p); } }
private Triangle extendOutside(Triangle t, Point p) { if (p.pointLineTest(t.getA(), t.getB()) == Point.ONSEGMENT) { Triangle dg = new Triangle(t.getA(), t.getB(), p); Triangle hp = new Triangle(p, t.getB()); t.setB(p); dg.setAbTriangle(t.getAbTriangle()); dg.getAbTriangle().switchneighbors(t, dg); dg.setBcTriangle(hp); hp.setAbTriangle(dg); dg.setCanext(t); t.setAbTriangle(dg); hp.setBcTriangle(t.getBcTriangle()); hp.getBcTriangle().setCanext(hp); hp.setCanext(t); t.setBcTriangle(hp); return dg; } Triangle ccT = extendcounterclock(t, p); Triangle cT = extendclock(t, p); ccT.setBcTriangle(cT); cT.setCanext(ccT); startTriangleHull = cT; return cT.getAbTriangle(); }
private void allTriangles(Triangle curr, Vector<Triangle> front, int mc) { if (curr != null && curr.getMc() == mc && !front.contains(curr)) { front.add(curr); allTriangles(curr.getAbTriangle(), front, mc); allTriangles(curr.getBcTriangle(), front, mc); allTriangles(curr.getCaTriangle(), front, mc); } }
private Triangle treatDegeneracyInside(Triangle t, Point p) { if (t.getAbTriangle().isHalfplane() && p.pointLineTest(t.getB(), t.getA()) == Point.ONSEGMENT) return extendOutside(t.getAbTriangle(), p); if (t.getBcTriangle().isHalfplane() && p.pointLineTest(t.getC(), t.getB()) == Point.ONSEGMENT) return extendOutside(t.getBcTriangle(), p); if (t.getCaTriangle().isHalfplane() && p.pointLineTest(t.getA(), t.getC()) == Point.ONSEGMENT) return extendOutside(t.getCaTriangle(), p); return null; }
private Triangle extendclock(Triangle t, Point p) { t.setHalfplane(false); t.setC(p); t.circumcircle(); Triangle tbc = t.getBcTriangle(); if (p.pointLineTest(tbc.getA(), tbc.getB()) >= Point.RIGHT) { Triangle nT = new Triangle(p, t.getB()); nT.setAbTriangle(t); t.setBcTriangle(nT); nT.setBcTriangle(tbc); tbc.setCanext(nT); return nT; } return extendclock(tbc, p); }