Plane.cpp 616 B

123456789101112131415161718192021222324
  1. #include "core/Plane.hpp"
  2. #include <cstdio>
  3. using Core::Plane;
  4. Plane::Plane() : abc(), d(0) {
  5. }
  6. Plane::Plane(const Vector3& a, const Vector3& b, const Vector3& c) :
  7. abc(cross(b - a, c - a).normalize()), d(-abc.dot(b)) {
  8. }
  9. float Plane::signedDistance(const Vector3& v) const {
  10. return abc.dot(v) + d;
  11. }
  12. size_t Plane::toString(char* s, size_t n) const {
  13. int w = snprintf(
  14. s, n, "(%.3f x + %.3f y + %.3f z + %.3f)", static_cast<double>(abc[0]),
  15. static_cast<double>(abc[1]), static_cast<double>(abc[2]),
  16. static_cast<double>(d));
  17. return w >= 0 ? static_cast<size_t>(w) : 0;
  18. }