summaryrefslogtreecommitdiff
path: root/src/net/sourceforge/plantuml/geom/Singularity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/sourceforge/plantuml/geom/Singularity.java')
-rw-r--r--src/net/sourceforge/plantuml/geom/Singularity.java154
1 files changed, 0 insertions, 154 deletions
diff --git a/src/net/sourceforge/plantuml/geom/Singularity.java b/src/net/sourceforge/plantuml/geom/Singularity.java
deleted file mode 100644
index e3c54e7..0000000
--- a/src/net/sourceforge/plantuml/geom/Singularity.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ========================================================================
- * PlantUML : a free UML diagram generator
- * ========================================================================
- *
- * (C) Copyright 2009-2017, Arnaud Roques
- *
- * Project Info: http://plantuml.com
- *
- * If you like this project or if you find it useful, you can support us at:
- *
- * http://plantuml.com/patreon (only 1$ per month!)
- * http://plantuml.com/paypal
- *
- * This file is part of PlantUML.
- *
- * PlantUML is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * PlantUML distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
- * License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- *
- *
- * Original Author: Arnaud Roques
- *
- *
- */
-package net.sourceforge.plantuml.geom;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.TreeSet;
-
-public class Singularity {
-
- private final TreeSet<Double> angles = new TreeSet<Double>();
-
- final private Point2DInt center;
-
- public Singularity(Point2DInt center) {
- this.center = center;
- }
-
- @Override
- public String toString() {
- final StringBuilder sb = new StringBuilder(center.toString());
- for (Double a : angles) {
- final int degree = (int) (a * 180 / Math.PI);
- sb.append(' ');
- sb.append(degree);
- }
- return sb.toString();
- }
-
- public void addLineSegment(LineSegmentInt seg) {
- if (seg.getP1().equals(center)) {
- angles.add(convertAngle(seg.getAngle()));
- } else if (seg.getP2().equals(center)) {
- angles.add(convertAngle(seg.getOppositeAngle()));
- } else {
- assert seg.side(center) == 0 : "side=" + seg.side(center) + " center=" + center + " seg=" + seg;
- assert LineSegmentInt.isBetween(center, seg.getP1(), seg.getP2());
- addLineSegment(new LineSegmentInt(center, seg.getP1()));
- addLineSegment(new LineSegmentInt(center, seg.getP2()));
- }
- assert betweenZeroAndTwoPi();
-
- }
-
- static double convertAngle(double a) {
- if (a < 0) {
- return a + 2 * Math.PI;
- }
- return a;
- }
-
- private boolean betweenZeroAndTwoPi() {
- for (Double d : angles) {
- assert d >= 0;
- assert d < 2 * Math.PI;
- }
- return true;
- }
-
- List<Double> getAngles() {
- return new ArrayList<Double>(angles);
- }
-
- public boolean crossing(Point2DInt direction1, Point2DInt direction2) {
- final boolean result = crossingInternal(direction1, direction2);
- assert result == crossingInternal(direction2, direction1);
- return result;
- }
-
- private boolean crossingInternal(Point2DInt direction1, Point2DInt direction2) {
- if (angles.size() < 2) {
- return false;
- }
- final double angle1 = convertAngle(new LineSegmentInt(center, direction1).getAngle());
- final double angle2 = convertAngle(new LineSegmentInt(center, direction2).getAngle());
-
- Double last = null;
- for (Double current : angles) {
- if (last != null) {
- assert last < current;
- if (isBetween(angle1, last, current) && isBetween(angle2, last, current)) {
- return false;
- }
- }
- last = current;
- }
- final double first = angles.first();
- if ((angle1 <= first || angle1 >= last) && (angle2 <= first || angle2 >= last)) {
- return false;
- }
- return true;
- }
-
- private boolean isBetween(double test, double v1, double v2) {
- assert v1 < v2;
- return test >= v1 && test <= v2;
- }
-
- protected final Point2DInt getCenter() {
- return center;
- }
-
- public void merge(Singularity other) {
- this.angles.addAll(other.angles);
- }
-
- public List<Neighborhood> getNeighborhoods() {
- if (angles.size() == 0) {
- return Collections.singletonList(new Neighborhood(center));
- }
- final List<Neighborhood> result = new ArrayList<Neighborhood>();
- double last = angles.last();
- for (Double currentAngle : angles) {
- result.add(new Neighborhood(center, last, currentAngle));
- last = currentAngle;
- }
- return Collections.unmodifiableList(result);
- }
-
-}