diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/.ratings index c2c5235bd3b9deb31fdbf82757057360aa46d36b..b0919970948f955eebfde4f8f242ca98603d22aa 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/.ratings @@ -3,5 +3,5 @@ CircularContentVisualBase.java cc3caea328e36e90069b915e413c8e7e9522a939 YELLOW CircularDiagramAnchorageVisualBase.java 7a3b92fb1b135c218b9a5e16506acfc74a6b5468 YELLOW CurveLinkVisualBase.java 0b8706214320d715966c86a5242ad21c8bf5a315 YELLOW CurveSegment.java 445bc2607cb70ae1c788c27ba9fc637dd7df4956 YELLOW -EllipticBorderLocation.java 1e9b3d42c7fcd5495004fb30b0c499096a839967 YELLOW +EllipticBorderLocation.java 6775dd54c01f8d76ecf1721185b60b63f1eec6c2 YELLOW EllipticContentVisualBase.java dc2fddc9cfe5605bc8a5d09dd862845e360b23f5 YELLOW diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/EllipticBorderLocation.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/EllipticBorderLocation.java index 1e9b3d42c7fcd5495004fb30b0c499096a839967..6775dd54c01f8d76ecf1721185b60b63f1eec6c2 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/EllipticBorderLocation.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/visual/elliptic/EllipticBorderLocation.java @@ -10,8 +10,6 @@ package org.fortiss.tooling.common.ui.javafx.lwfxef.visual.elliptic; import static java.lang.Math.atan2; -import static java.lang.Math.cos; -import static java.lang.Math.sin; import static java.util.Objects.requireNonNull; import org.fortiss.tooling.common.ui.javafx.lwfxef.DiagramCoordinate; @@ -55,12 +53,19 @@ public final class EllipticBorderLocation { * ellipse center. */ public DiagramCoordinate getLocation() { - double rw = radiuses.getWidth(); - double rh = radiuses.getHeight(); double angle = Math.PI * angleInDegree / 180; - double x = rw - correction.getWidth() / 2 + rw * cos(angle); - double y = rh - correction.getHeight() / 2 - rh * sin(angle); - return new DiagramCoordinate(x, y); + double rh = radiuses.getWidth(); + double rv = radiuses.getHeight(); + DiagramCoordinate middle = new DiagramCoordinate(rh, rv); + double cos = Math.cos(angle); + double sin = Math.sin(angle); + double tan = (sin / cos); + // Division by zero will result in tan being Infinity, + // which gives the right results for x and y. + double x = rh * rv / Math.sqrt(rv * rv + rh * rh * tan * tan); + double y = rh * rv * Math.signum(tan) / Math.sqrt(rv * rv / (tan * tan) + rh * rh); + return middle.add(x * Math.signum(cos), -y * Math.signum(cos)) + .subtract(correction.getWidth() / 2.0, correction.getHeight() / 2.0); } /**