Triangle.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * Copyright (c) 2020, Shannon Booth <shannon.ml.booth@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Forward.h>
  8. #include <LibGfx/Point.h>
  9. namespace Gfx {
  10. class Triangle {
  11. public:
  12. Triangle(IntPoint a, IntPoint b, IntPoint c)
  13. : m_a(a)
  14. , m_b(b)
  15. , m_c(c)
  16. {
  17. m_det = (m_b.x() - m_a.x()) * (m_c.y() - m_a.y()) - (m_b.y() - m_a.y()) * (m_c.x() - m_a.x());
  18. }
  19. IntPoint a() const { return m_a; }
  20. IntPoint b() const { return m_b; }
  21. IntPoint c() const { return m_c; }
  22. bool contains(IntPoint p) const
  23. {
  24. int x = p.x();
  25. int y = p.y();
  26. int ax = m_a.x();
  27. int bx = m_b.x();
  28. int cx = m_c.x();
  29. int ay = m_a.y();
  30. int by = m_b.y();
  31. int cy = m_c.y();
  32. if (m_det * ((bx - ax) * (y - ay) - (by - ay) * (x - ax)) <= 0)
  33. return false;
  34. if (m_det * ((cx - bx) * (y - by) - (cy - by) * (x - bx)) <= 0)
  35. return false;
  36. if (m_det * ((ax - cx) * (y - cy) - (ay - cy) * (x - cx)) <= 0)
  37. return false;
  38. return true;
  39. }
  40. String to_string() const;
  41. private:
  42. int m_det;
  43. IntPoint m_a;
  44. IntPoint m_b;
  45. IntPoint m_c;
  46. };
  47. }