void test23D() { Point3D pt(1.0, 0.0, 0.0); Point3D tpt = pt; Transform3D trans; trans.SetRotation(M_PI / 2., X_Axis); trans.TransformPoint(pt); CHECK_INVARIANT(ptEq(tpt, pt), ""); Point3D pt2(0.0, 1.0, 0.0); Point3D tpt2(0.0, 0.0, 1.0); trans.TransformPoint(pt2); CHECK_INVARIANT(ptEq(tpt2, pt2), ""); Point3D pt3(0.0, 0.0, 1.0); Point3D tpt3(0.0, -1.0, 0.0); trans.TransformPoint(pt3); CHECK_INVARIANT(ptEq(tpt3, pt3), ""); // rotate around y-axis Transform3D transy; transy.SetRotation(M_PI / 2., Y_Axis); transy.TransformPoint(pt); Point3D tpt4(0.0, 0.0, -1.0); CHECK_INVARIANT(ptEq(tpt4, pt), ""); Point3D pt5(0.0, 1.0, 0.0); Point3D tpt5(0.0, 1.0, 0.0); transy.TransformPoint(pt5); CHECK_INVARIANT(ptEq(tpt5, pt5), ""); Point3D pt6(0.0, 0.0, 1.0); Point3D tpt6(1.0, 0.0, 0.0); transy.TransformPoint(pt6); CHECK_INVARIANT(ptEq(tpt6, pt6), ""); // z-axis Transform3D transz; transz.SetRotation(M_PI / 2., Z_Axis); Point3D pt7(1.0, 0.0, 0.0); Point3D tpt7(0.0, 1.0, 0.0); transz.TransformPoint(pt7); CHECK_INVARIANT(ptEq(tpt7, pt7), ""); Point3D pt8(0.0, 1.0, 0.0); Point3D tpt8(-1.0, 0.0, 0.0); transz.TransformPoint(pt8); CHECK_INVARIANT(ptEq(tpt8, pt8), ""); Point3D pt9(0.0, 0.0, 1.0); Point3D tpt9(0.0, 0.0, 1.0); transz.TransformPoint(pt9); CHECK_INVARIANT(ptEq(tpt9, pt9), ""); }
void testFromQuaternion() { double qt[4]; qt[0] = cos(M_PI / 6); qt[1] = -sin(M_PI / 6); qt[2] = 0.0; qt[3] = 0.0; Transform3D trans; trans.SetRotationFromQuaternion(qt); Transform3D ntrans; ntrans.SetRotation(M_PI / 3, Point3D(1.0, 0.0, 0.0)); unsigned int i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { CHECK_INVARIANT(RDKit::feq(trans.getVal(i, j), ntrans.getVal(i, j)), ""); } } }