PlaneTest.cpp 6.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 
  2. #include "../testTools.h"
  3. #include "../../DFPSR/math/FPlane3D.h"
  4. START_TEST(Plane)
  5. // Signed distance with zero offset.
  6. ASSERT_NEAR(FPlane3D(FVector3D( 1.4f, 0.0f , 0.0f), 0.0f).signedDistance(FVector3D( 0.0f, 245.7f, -357.2f)), 0.0f);
  7. ASSERT_NEAR(FPlane3D(FVector3D(-1.2f, 0.0f , 0.0f), 0.0f).signedDistance(FVector3D( 0.0f, -73.6f, 864.1f)), 0.0f);
  8. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.01f, 0.0f), 0.0f).signedDistance(FVector3D(245.7f, 0.0f, -357.2f)), 0.0f);
  9. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, -4.5f , 0.0f), 0.0f).signedDistance(FVector3D(-73.6f, 0.0f, 864.1f)), 0.0f);
  10. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.0f , 1.4f), 0.0f).signedDistance(FVector3D(245.7f, -357.2f, 0.0f)), 0.0f);
  11. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.0f , -2.7f), 0.0f).signedDistance(FVector3D(-73.6f, 864.1f, 0.0f)), 0.0f);
  12. ASSERT_NEAR(FPlane3D(FVector3D( 1.4f, 0.0f , 0.0f), 0.0f).signedDistance(FVector3D( 1.0f, 245.7f, -357.2f)), 1.0f);
  13. ASSERT_NEAR(FPlane3D(FVector3D(-1.2f, 0.0f , 0.0f), 0.0f).signedDistance(FVector3D( 1.0f, -73.6f, 864.1f)), -1.0f);
  14. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.01f, 0.0f), 0.0f).signedDistance(FVector3D(245.7f, 1.0f, -357.2f)), 1.0f);
  15. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, -9.3f , 0.0f), 0.0f).signedDistance(FVector3D(-73.6f, 1.0f, 864.1f)), -1.0f);
  16. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.0f , 1.5f), 0.0f).signedDistance(FVector3D(245.7f, -357.2f, 1.0f)), 1.0f);
  17. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.0f , -2.3f), 0.0f).signedDistance(FVector3D(-73.6f, 864.1f, 1.0f)), -1.0f);
  18. ASSERT_NEAR(FPlane3D(FVector3D( 1.4f, 0.0f , 0.0f), 0.0f).signedDistance(FVector3D( -1.0f, 245.7f, -357.2f)), -1.0f);
  19. ASSERT_NEAR(FPlane3D(FVector3D(-1.2f, 0.0f , 0.0f), 0.0f).signedDistance(FVector3D( -1.0f, -73.6f, 864.1f)), 1.0f);
  20. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.01f, 0.0f), 0.0f).signedDistance(FVector3D(245.7f, -1.0f, -357.2f)), -1.0f);
  21. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, -4.2f , 0.0f), 0.0f).signedDistance(FVector3D(-73.6f, -1.0f, 864.1f)), 1.0f);
  22. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.0f , 1.5f), 0.0f).signedDistance(FVector3D(245.7f, -357.2f, -1.0f)), -1.0f);
  23. ASSERT_NEAR(FPlane3D(FVector3D( 0.0f, 0.0f , -2.3f), 0.0f).signedDistance(FVector3D(-73.6f, 864.1f, -1.0f)), 1.0f);
  24. // Signed distance with offset along X.
  25. ASSERT_NEAR(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 74.0f).signedDistance(FVector3D(75.0f, 745.1f, 135.2f)), 1.0f);
  26. ASSERT_NEAR(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 74.0f).signedDistance(FVector3D(74.0f, 246.5f, 294.6f)), 0.0f);
  27. ASSERT_NEAR(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 74.0f).signedDistance(FVector3D(73.0f, 865.7f, 625.3f)), -1.0f);
  28. ASSERT_NEAR(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 74.0f).signedDistance(FVector3D(-75.0f, 745.1f, 135.2f)), 1.0f);
  29. ASSERT_NEAR(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 74.0f).signedDistance(FVector3D(-74.0f, 246.5f, 294.6f)), 0.0f);
  30. ASSERT_NEAR(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 74.0f).signedDistance(FVector3D(-73.0f, 865.7f, 625.3f)), -1.0f);
  31. // Signed distance with offset along Y.
  32. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 1.0f, 0.0f), 74.0f).signedDistance(FVector3D(745.1f, 75.0f, 135.2f)), 1.0f);
  33. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 1.0f, 0.0f), 74.0f).signedDistance(FVector3D(246.5f, 74.0f, 294.6f)), 0.0f);
  34. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 1.0f, 0.0f), 74.0f).signedDistance(FVector3D(865.7f, 73.0f, 625.3f)), -1.0f);
  35. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, -1.0f, 0.0f), 74.0f).signedDistance(FVector3D(745.1f, -75.0f, 135.2f)), 1.0f);
  36. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, -1.0f, 0.0f), 74.0f).signedDistance(FVector3D(246.5f, -74.0f, 294.6f)), 0.0f);
  37. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, -1.0f, 0.0f), 74.0f).signedDistance(FVector3D(865.7f, -73.0f, 625.3f)), -1.0f);
  38. // Signed distance with offset along Z.
  39. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, 1.0f), 74.0f).signedDistance(FVector3D(745.1f, 135.2f, 75.0f)), 1.0f);
  40. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, 1.0f), 74.0f).signedDistance(FVector3D(246.5f, 294.6f, 74.0f)), 0.0f);
  41. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, 1.0f), 74.0f).signedDistance(FVector3D(865.7f, 625.3f, 73.0f)), -1.0f);
  42. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, -1.0f), 74.0f).signedDistance(FVector3D(745.1f, 135.2f, -75.0f)), 1.0f);
  43. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, -1.0f), 74.0f).signedDistance(FVector3D(246.5f, 294.6f, -74.0f)), 0.0f);
  44. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, -1.0f), 74.0f).signedDistance(FVector3D(865.7f, 625.3f, -73.0f)), -1.0f);
  45. // Inside or outside.
  46. ASSERT_EQUAL(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 0.0f).inside(FVector3D( 0.01f, 0.0f, 0.0f)), false);
  47. ASSERT_EQUAL(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 0.0f).inside(FVector3D(-0.01f, 0.0f, 0.0f)), true);
  48. ASSERT_EQUAL(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 0.0f).inside(FVector3D( 0.01f, 0.0f, 0.0f)), true);
  49. ASSERT_EQUAL(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 0.0f).inside(FVector3D(-0.01f, 0.0f, 0.0f)), false);
  50. ASSERT_EQUAL(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 45.0f).inside(FVector3D( 45.01f, 0.0f, 0.0f)), false);
  51. ASSERT_EQUAL(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), 45.0f).inside(FVector3D( 44.99f, 0.0f, 0.0f)), true);
  52. ASSERT_EQUAL(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 45.0f).inside(FVector3D(-44.99f, 0.0f, 0.0f)), true);
  53. ASSERT_EQUAL(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), 45.0f).inside(FVector3D(-45.01f, 0.0f, 0.0f)), false);
  54. ASSERT_EQUAL(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), -45.0f).inside(FVector3D(-44.99f, 0.0f, 0.0f)), false);
  55. ASSERT_EQUAL(FPlane3D(FVector3D( 1.0f, 0.0f, 0.0f), -45.0f).inside(FVector3D(-45.01f, 0.0f, 0.0f)), true);
  56. ASSERT_EQUAL(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), -45.0f).inside(FVector3D( 45.01f, 0.0f, 0.0f)), true);
  57. ASSERT_EQUAL(FPlane3D(FVector3D(-1.0f, 0.0f, 0.0f), -45.0f).inside(FVector3D( 44.99f, 0.0f, 0.0f)), false);
  58. // Ray intersection.
  59. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, 1.8f), 123.45f).rayIntersect(FVector3D(12.3f, 45.6f, -26.0f), FVector3D(0.0f, 0.0f, 1.2f)), FVector3D(12.3f, 45.6f, 123.45f));
  60. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, 1.2f), 123.45f).rayIntersect(FVector3D(22.5f, 74.8f, 42.0f), FVector3D(0.0f, 0.0f, -1.4f)), FVector3D(22.5f, 74.8f, 123.45f));
  61. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, -0.3f), 123.45f).rayIntersect(FVector3D(82.6f, 27.4f, 83.0f), FVector3D(0.0f, 0.0f, 0.1f)), FVector3D(82.6f, 27.4f, -123.45f));
  62. ASSERT_NEAR(FPlane3D(FVector3D(0.0f, 0.0f, -9.6f), 123.45f).rayIntersect(FVector3D(-6.3f, 53.0f, -45.0f), FVector3D(0.0f, 0.0f, -1.6f)), FVector3D(-6.3f, 53.0f, -123.45f));
  63. END_TEST