diff --git a/src/main/java/de/neemann/digital/draw/graphics/GraphicSwing.java b/src/main/java/de/neemann/digital/draw/graphics/GraphicSwing.java index 0c4fc6609..9bf48ce61 100644 --- a/src/main/java/de/neemann/digital/draw/graphics/GraphicSwing.java +++ b/src/main/java/de/neemann/digital/draw/graphics/GraphicSwing.java @@ -145,9 +145,9 @@ public class GraphicSwing extends Graphic { static int getMirrorYOrientation(Orientation orientation, VectorInterface p1, VectorInterface p2, VectorInterface p3) { int oy = orientation.getY(); - VectorInterface d0 = p2.sub(p1).toFloat().getOrthogonal(); + VectorInterface d0 = p2.sub(p1).getOrthogonal(); VectorInterface d1 = p3.sub(p1); - if (d1.getX() * d0.getX() + d1.getY() * d0.getY() < 0) oy = 2 - oy; + if (d0.scalar(d1) < 0) oy = 2 - oy; return oy; } diff --git a/src/main/java/de/neemann/digital/draw/graphics/Vector.java b/src/main/java/de/neemann/digital/draw/graphics/Vector.java index 98fcbe89d..f7af05321 100644 --- a/src/main/java/de/neemann/digital/draw/graphics/Vector.java +++ b/src/main/java/de/neemann/digital/draw/graphics/Vector.java @@ -256,4 +256,10 @@ public class Vector implements VectorInterface { public VectorFloat toFloat() { return new VectorFloat(x, y); } + + @Override + public Vector getOrthogonal() { + return new Vector(y, -x); + } + } diff --git a/src/main/java/de/neemann/digital/draw/graphics/VectorFloat.java b/src/main/java/de/neemann/digital/draw/graphics/VectorFloat.java index cd583a770..28d3ffcf2 100644 --- a/src/main/java/de/neemann/digital/draw/graphics/VectorFloat.java +++ b/src/main/java/de/neemann/digital/draw/graphics/VectorFloat.java @@ -164,11 +164,7 @@ public class VectorFloat implements VectorInterface { return this; } - /** - * Creates vector which is orthogonal to this one. - * - * @return the orthogonal vector - */ + @Override public VectorFloat getOrthogonal() { return new VectorFloat(y, -x); } diff --git a/src/main/java/de/neemann/digital/draw/graphics/VectorInterface.java b/src/main/java/de/neemann/digital/draw/graphics/VectorInterface.java index 7b78cfd60..6d4a45dad 100644 --- a/src/main/java/de/neemann/digital/draw/graphics/VectorInterface.java +++ b/src/main/java/de/neemann/digital/draw/graphics/VectorInterface.java @@ -91,4 +91,17 @@ public interface VectorInterface { * @return the length of the vector */ float len(); + + /** + * @return a vector which is orthogonal to this one + */ + VectorInterface getOrthogonal(); + + /** + * @return the scalar product + */ + default float scalar(VectorInterface v) { + return getXFloat() * v.getXFloat() + getYFloat() * v.getYFloat(); + } + }