From 64e9e52b11dc656e9eb03729f7f030992d0d685c Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Wed, 1 Oct 2014 19:20:19 -0700 Subject: [PATCH] not use square functions for perpendicular & parallel constraints --- src/cad/gcs/constr/Parallel.java | 24 +++++++++++++++++------- src/cad/gcs/constr/Perpendicular.java | 25 ++++++++++++++++++------- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/cad/gcs/constr/Parallel.java b/src/cad/gcs/constr/Parallel.java index 818dc6a8..3fd1b5e2 100644 --- a/src/cad/gcs/constr/Parallel.java +++ b/src/cad/gcs/constr/Parallel.java @@ -55,13 +55,12 @@ public class Parallel implements Constraint { @Override public double error() { - double dx1 = (params[l1p2x].get() - params[l1p1x].get()); - double dy1 = (params[l1p2y].get() - params[l1p1y].get()); - double dx2 = -(params[l2p2y].get() - params[l2p1y].get()); - double dy2 = (params[l2p2x].get() - params[l2p1x].get()); + double dx1 = (params[l1p1x].get() - params[l1p2x].get()); + double dy1 = (params[l1p1y].get() - params[l1p2y].get()); + double dx2 = -(params[l2p1x].get() - params[l2p2x].get()); + double dy2 = (params[l2p1y].get() - params[l2p2y].get()); //dot product shows how the lines off to be perpendicular - double off = dx1 * dx2 + dy1 * dy2; - return off * off; + return (dx1 * dy2 - dy1 * dx2); } @@ -75,8 +74,19 @@ public class Parallel implements Constraint { return -2*a2*(a1*a2 - a2*x+a3); } - @Override + public void gradient(double[] out) { + out[l1p1x] = (params[l2p1y].get() - params[l2p2y].get()); // = dy2 + out[l1p2x] = -(params[l2p1y].get() - params[l2p2y].get()); // = -dy2 + out[l1p1y] = -(params[l2p1x].get() - params[l2p2x].get()); // = -dx2 + out[l1p2y] = (params[l2p1x].get() - params[l2p2x].get()); // = dx2 + out[l2p1x] = -(params[l1p1y].get() - params[l1p2y].get()); // = -dy1 + out[l2p2x] = (params[l1p1y].get() - params[l1p2y].get()); // = dy1 + out[l2p1y] = (params[l1p1x].get() - params[l1p2x].get()); // = dx1 + out[l2p2y] = -(params[l1p1x].get() - params[l1p2x].get()); // = -dx1 + } + + public void gradient2(double[] out) { double x1 = params[l1p1x].get(); double x2 = params[l1p1y].get(); diff --git a/src/cad/gcs/constr/Perpendicular.java b/src/cad/gcs/constr/Perpendicular.java index 1c40a546..280ecdea 100644 --- a/src/cad/gcs/constr/Perpendicular.java +++ b/src/cad/gcs/constr/Perpendicular.java @@ -55,13 +55,12 @@ public class Perpendicular implements Constraint { @Override public double error() { - double dx1 = (params[l1p2x].get() - params[l1p1x].get()); - double dy1 = (params[l1p2y].get() - params[l1p1y].get()); - double dx2 = (params[l2p2x].get() - params[l2p1x].get()); - double dy2 = (params[l2p2y].get() - params[l2p1y].get()); + double dx1 = (params[l1p1x].get() - params[l1p2x].get()); + double dy1 = (params[l1p1y].get() - params[l1p2y].get()); + double dx2 = (params[l2p1x].get() - params[l2p2x].get()); + double dy2 = (params[l2p1y].get() - params[l2p2y].get()); //dot product shows how the lines off to be perpendicular - double off = dx1 * dx2 + dy1 * dy2; - return off * off; + return (dx1 * dx2 + dy1 * dy2); } //derivative of ((x-a1)*a2 + a3)^2 @@ -74,9 +73,21 @@ public class Perpendicular implements Constraint { return -2*a2*(a1*a2 - a2*x+a3); } - @Override public void gradient(double[] out) { + out[l1p1x] = (params[l2p1x].get() - params[l2p2x].get()); // = dx2 + out[l1p2x] = -(params[l2p1x].get() - params[l2p2x].get()); // = -dx2 + out[l1p1y] = (params[l2p1y].get() - params[l2p2y].get()); // = dy2 + out[l1p2y] = -(params[l2p1y].get() - params[l2p2y].get()); // = -dy2 + out[l2p1x] = (params[l1p1x].get() - params[l1p2x].get()); // = dx1 + out[l2p2x] = -(params[l1p1x].get() - params[l1p2x].get()); // = -dx1 + out[l2p1y] = (params[l1p1y].get() - params[l1p2y].get()); // = dy1 + out[l2p2y] = -(params[l1p1y].get() - params[l1p2y].get()); // = -dy1 + + } + + public void gradient3(double[] out) { + double x1 = params[l1p1x].get(); double x2 = params[l1p1y].get(); double x3 = params[l1p2x].get();