/** * * @param p * query point * @return true iff p is within this triangulation (in its 2D convex hull). */ public boolean contains(Point p) { Triangle tt = find(p); return !tt.isHalfplane(); }
private static Triangle find(Triangle curr, Point p) { if (p == null) return null; Triangle nextT; if (curr.isHalfplane()) { nextT = findnext2(p, curr); if (nextT == null || nextT.isHalfplane()) return curr; curr = nextT; } while (true) { nextT = findnext1(p, curr); if (nextT == null) return curr; if (nextT.isHalfplane()) return nextT; curr = nextT; } }
public Vector<Triangle> findTriangleNeighborhood(Triangle firstTriangle, Point point) { Vector<Triangle> triangles = new Vector<Triangle>(30); triangles.add(firstTriangle); Triangle prevTriangle = null; Triangle currentTriangle = firstTriangle; Triangle nextTriangle = currentTriangle.nextNeighbor(point, prevTriangle); while (nextTriangle != firstTriangle) { // the point is on the perimeter if (nextTriangle.isHalfplane()) { return null; } triangles.add(nextTriangle); prevTriangle = currentTriangle; currentTriangle = nextTriangle; nextTriangle = currentTriangle.nextNeighbor(point, prevTriangle); } return triangles; }
/** assumes v is an halfplane! - returns another (none halfplane) triangle */ private static Triangle findnext2(Point p, Triangle v) { if (v.getAbTriangle() != null && !v.getAbTriangle().isHalfplane()) return v.getAbTriangle(); if (v.getBcTriangle() != null && !v.getBcTriangle().isHalfplane()) return v.getBcTriangle(); if (v.getCaTriangle() != null && !v.getCaTriangle().isHalfplane()) return v.getCaTriangle(); return null; }
public static void exportSmf(List<Triangle> triangulation, Writer writer) { Set<Point> pointSet = new HashSet<Point>(); for (Triangle t : triangulation) { if (!t.isHalfplane()) { pointSet.add(t.getA()); pointSet.add(t.getB()); if (!t.isHalfplane()) { Integer i1 = pointMap.get(t.getA()); Integer i2 = pointMap.get(t.getB());
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; }
/** * insert the point to this Delaunay Triangulation. Note: if p is null or * already exist in this triangulation p is ignored. * * @param p * new vertex to be inserted the triangulation. */ public void insertPoint(Point p) { if (vertices.contains(p)) return; modCount++; updateBoundingBox(p); vertices.add(p); Triangle t = insertPointSimple(p); if (t == null) // return; Triangle tt = t; currT = t; // recall the last point for - fast (last) update iterator. do { flip(tt, modCount); tt = tt.getCaTriangle(); } while (tt != t && !tt.isHalfplane()); // Update index with changed triangles if (gridIndex != null) gridIndex.updateIndex(getLastUpdatedTriangles()); }
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; }
if (neighbor.equals(prevTriangle) || neighbor.isHalfplane()) { if (a.equals(p)) { neighbor = abTriangle;
/** * returns an iterator to the set of all the points on the XY-convex hull * * @return iterator to the set of all the points on the XY-convex hull. */ public Iterator<Point> getConvexHullVerticesIterator() { Vector<Point> ans = new Vector<Point>(); Triangle curr = this.startTriangleHull; boolean cont = true; double x0 = bbMin.getX(), x1 = bbMax.getX(); double y0 = bbMin.getY(), y1 = bbMax.getY(); boolean sx, sy; while (cont) { sx = curr.getA().getX() == x0 || curr.getA().getX() == x1; sy = curr.getA().getY() == y0 || curr.getA().getY() == y1; if ((sx && sy) || (!sx && !sy)) { ans.add(curr.getA()); } if (curr.getBcTriangle() != null && curr.getBcTriangle().isHalfplane()) curr = curr.getBcTriangle(); if (curr == this.startTriangleHull) cont = false; } return ans.iterator(); }
if (t.isHalfplane()) startTriangle = extendOutside(t, p); else
private static Triangle findnext1(Point p, Triangle v) { if (p.pointLineTest(v.getA(), v.getB()) == Point.RIGHT && !v.getAbTriangle().isHalfplane()) return v.getAbTriangle(); if (p.pointLineTest(v.getB(), v.getC()) == Point.RIGHT && !v.getBcTriangle().isHalfplane()) return v.getBcTriangle(); if (p.pointLineTest(v.getC(), v.getA()) == Point.RIGHT && !v.getCaTriangle().isHalfplane()) return v.getCaTriangle(); if (p.pointLineTest(v.getA(), v.getB()) == Point.RIGHT) return v.getAbTriangle(); if (p.pointLineTest(v.getB(), v.getC()) == Point.RIGHT) return v.getBcTriangle(); if (p.pointLineTest(v.getC(), v.getA()) == Point.RIGHT) return v.getCaTriangle(); return null; }
double d1 = p1.distance(pointToDelete); double d2 = p2.distance(pointToDelete); if (triangle.isHalfplane()) { if (d1 <= d2) { return p1;
if (!triangle.isHalfplane()) { if (!halfplane.getAbTriangle().isHalfplane()) { neighbor = halfplane.getAbTriangle(); } else if (!halfplane.getBcTriangle().isHalfplane()) { neighbor = halfplane.getBcTriangle(); } else if (!halfplane.getBcTriangle().isHalfplane()) { neighbor = halfplane.getCaTriangle();
Triangle v; t.setMc(mc); if (u.isHalfplane() || !u.circumcircleContains(t.getC())) return;