Ejemplo n.º 1
0
void TestHalfspace2D(void) {
#define DO_TEST(res) \
    desc.Format("p = (%3.1f, %3.1f), n = (%3.1f, %3.1f), t = (%3.1f, %3.1f)", \
    planePt.X(), planePt.Y(), \
    normal.X(), normal.Y(), \
    testPt.X(), testPt.Y()); \
    AssertEqual(desc.PeekBuffer(), planePt.Halfspace(normal, testPt), vislib::math::res)
    
    using vislib::math::HalfSpace;
    vislib::StringA desc;
    Point2f planePt;
    Vector2f normal;
    Point2f testPt;
    
    planePt.Set(0.0f, 0.0f);
    normal.Set(1.0f, 0.0f);

    testPt.Set(0.0f, 0.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetY(1.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetY(-1.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetX(1.0f);
    DO_TEST(HALFSPACE_POSITIVE);

    testPt.SetX(-1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);

    testPt.Set(0.5f, 0.5f);
    DO_TEST(HALFSPACE_POSITIVE);

    testPt.SetX(-1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);
    

    normal.Set(0.0f, 1.0f);

    testPt.Set(0.0f, 0.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetX(1.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetX(-1.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetY(1.0f);
    DO_TEST(HALFSPACE_POSITIVE);

    testPt.SetY(-1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);


    normal.Set(0.5f, 0.5f);

    testPt.Set(0.0f, 0.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.Set(0.5f, -0.5f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.Set(-0.5f, 0.5f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.Set(1.0f, 1.0f);
    DO_TEST(HALFSPACE_POSITIVE);

    testPt.Set(-1.0f, -1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);

    testPt.Set(1.0f, 0.0f);
    DO_TEST(HALFSPACE_POSITIVE);

    testPt.Set(-1.0f, 0.0f);
    DO_TEST(HALFSPACE_NEGATIVE);


    planePt.Set(1.0f, 0.0f);
    normal.Set(1.0f, 0.0f);

    testPt.Set(0.0f, 0.0f);
    DO_TEST(HALFSPACE_NEGATIVE);

    testPt.SetY(1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);

    testPt.SetY(-1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);

    testPt.SetX(1.0f);
    DO_TEST(HALFSPACE_IN_PLANE);

    testPt.SetX(-1.0f);
    DO_TEST(HALFSPACE_NEGATIVE);

    testPt.SetX(2.0f);
    DO_TEST(HALFSPACE_POSITIVE);

#undef DO_TEST
}