segmentSet.add(new LineSegment2d(vertices.get(i), vertices.get(i + 1))); vertices = hole.getPoints(); for (int i = 0, n = vertices.size() - 1; i < n; i++) { segmentSet.add(new LineSegment2d(vertices.get(i), vertices.get(i + 1))); if ((crossing = l1.intersectEpsilon(l2, 10E9)) != null) { segmentSet.remove(l2); segmentSet.add(new LineSegment2d(crossing, l1.getBegin())); segmentSet.add(new LineSegment2d(crossing, l1.getEnd())); segmentSet.add(new LineSegment2d(crossing, l2.getBegin())); segmentSet.add(new LineSegment2d(crossing, l2.getEnd()));
private void removeDuplicateSegments() { for (int i = 0, size = segmentSet.size(); i < size - 1; i++) { LineSegment2d l1 = segmentSet.get(i); for (int j = i + 1; j < size; j++) { LineSegment2d l2 = segmentSet.get(j); if (l1.getBegin().equals(l2.getBegin()) && l1.getEnd().equals(l2.getEnd()) || l1.getBegin().equals(l2.getEnd()) && l1.getEnd().equals(l2.getBegin())) { // System.out.println("remove dup " + l1 + " " + l2); segmentSet.remove(j); size--; } } } }
innerSegments.add(new LineSegment2d(points[i-1], points[i])); innerSegments.add(new LineSegment2d(points[i-1], points[i]));
private static List<LineSegment3d> createEdgesDebug(Collection<LineSegment2d> segments, Map<Point2d, Double> heights) { List<LineSegment3d> ret = new ArrayList<LineSegment3d>(); if (segments == null) { return ret; } for (LineSegment2d line : segments) { double heightBegin = RoofLinesBuildier.getHeight(heights, line.getBegin()); double heightEnd = RoofLinesBuildier.getHeight(heights, line.getEnd()); Point3d begin = new Point3d(line.getBegin().x, heightBegin, -line.getBegin().y); Point3d end = new Point3d(line.getEnd().x, heightEnd, -line.getEnd().y); ret.add(new LineSegment3d(begin, end)); } return ret; }
@Override public void prepareTriangulation(TriangulationContext<?> tcx) { triangles.clear(); for (LineSegment2d l : segmentSet) { TriangulationPoint tp1, tp2; if (!pointSet.containsKey(l.getBegin())) { tp1 = new TPoint(l.getBegin().x, l.getBegin().y); pointSet.put(l.getBegin(), tp1); points.add(tp1); } else { tp1 = pointSet.get(l.getBegin()); } if (!pointSet.containsKey(l.getEnd())) { tp2 = new TPoint(l.getEnd().x, l.getEnd().y); pointSet.put(l.getEnd(), tp2); points.add(tp2); } else { tp2 = pointSet.get(l.getEnd()); } tcx.newConstraint(tp1, tp2); } segmentSet.clear(); pointSet.clear(); tcx.addPoints(points); } }
private static double calcDistance(Point2d pIntersect, LineSegment2d edgeLine) { Vector2d edge = new Vector2d(edgeLine.getEnd()); edge.sub(edgeLine.getBegin()); Point2d intersect = new Point2d(pIntersect); intersect.sub(edgeLine.getBegin()); Vector2d pointOnVector = Algebra.orthogonalProjection(edge, intersect); return Tuple2dUtil.distance(intersect, pointOnVector); }
private Vector3d calcFaceNormal(LineSegment2d edge, double heightFactor) { Vector2d edgeVector = Vector2dUtil.fromTo(edge.getBegin(), edge.getEnd()); edgeVector.normalize(); Vector2d edgeOrthogonal = Vector2dUtil.orthogonalLeft(edgeVector); Vector3d v1 = new Vector3d(edgeVector.x, 0, -edgeVector.y); Vector3d v2 = new Vector3d(edgeOrthogonal.x, heightFactor, -edgeOrthogonal.y); v1.cross(v1, v2); v1.normalize(); return v1; }