@Test public void convert_general_norm() { PlaneGeneral3D_F64 general = new PlaneGeneral3D_F64(1, 2, 3, 4); PlaneNormal3D_F64 foundPlane = UtilPlane3D_F64.convert(general, null); List<Point3D_F64> points = randPointOnPlane(foundPlane, 10); for (Point3D_F64 p : points) { double found = UtilPlane3D_F64.evaluate(general, p); assertEquals(0, found, GrlConstants.DOUBLE_TEST_TOL); } }
@Test public void convert_norm_general() { PlaneNormal3D_F64 original = new PlaneNormal3D_F64(); original.n.set(1, 2, 3); original.n.normalize(); original.p.set(-2, 3, 5); PlaneGeneral3D_F64 test = UtilPlane3D_F64.convert(original, null); List<Point3D_F64> points = randPointOnPlane(original, 10); for (Point3D_F64 p : points) { double found = UtilPlane3D_F64.evaluate(test, p); assertEquals(0, found, GrlConstants.DOUBLE_TEST_TOL); } }
@Test public void convert_tangent_norm() { PlaneNormal3D_F64 original = new PlaneNormal3D_F64(); original.n.set(1, 0, 0); original.n.normalize(); original.p.set(-2, 3, 5); // create a bunch of points which are on the original plane List<Point3D_F64> points = randPointOnPlane(original, 10); // now manually construct the plane in tangent form PlaneTangent3D_F64 tangent = new PlaneTangent3D_F64(-2, 0, 0); // convert this back into normal form PlaneNormal3D_F64 conv = UtilPlane3D_F64.convert(tangent, (PlaneNormal3D_F64) null); // the points should still be on the plane for (Point3D_F64 p : points) { double found = UtilPlane3D_F64.evaluate(conv, p); assertEquals(0, found, GrlConstants.DOUBLE_TEST_TOL); } }
private void checkPlaneToWorld(PlaneNormal3D_F64 planeN) { planeN.getN().normalize(); PlaneGeneral3D_F64 planeG = UtilPlane3D_F64.convert(planeN, null); List<Point2D_F64> points2D = UtilPoint2D_F64.random(-2, 2, 100, rand); Se3_F64 planeToWorld = UtilPlane3D_F64.planeToWorld(planeG, null); Point3D_F64 p3 = new Point3D_F64(); Point3D_F64 l3 = new Point3D_F64(); Point3D_F64 k3 = new Point3D_F64(); for (Point2D_F64 p : points2D) { p3.set(p.x, p.y, 0); SePointOps_F64.transform(planeToWorld, p3, l3); // see if it created a valid transform SePointOps_F64.transformReverse(planeToWorld, l3, k3); assertEquals(0, k3.distance(p3), GrlConstants.DOUBLE_TEST_TOL); assertEquals(0, UtilPlane3D_F64.evaluate(planeG, l3), GrlConstants.DOUBLE_TEST_TOL); } }