Size: 1623 bytes.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// cs/renderer/geo/point2.hh
#ifndef CS_RENDERER_GEO_POINT2_HH
#define CS_RENDERER_GEO_POINT2_HH

#include <cmath>
#include <iostream>

#include "cs/renderer/precision/floats.hh"

using ::cs::renderer::precision::FloatsNear;

namespace cs::renderer::geo {

class Point2 {
 public:
  Point2() : Point2(0, 0) {}

  Point2(float xy) : Point2(xy, xy) {}

  Point2(float x, float y) : x(x), y(y) {}

  Point2 unit() const {
    Point2 this_ = *this;
    return this_ /
           sqrtf(this_.x * this_.x + this_.y * this_.y);
  }

  Point2 operator+(const Point2& other) const {
    return Point2(x + other.x, y + other.y);
  }

  bool operator==(const Point2& other) const {
    return FloatsNear(x, other.x) && FloatsNear(y, other.y);
  }

  bool operator<(const Point2& other) const {
    return x < other.x && y < other.y;
  }

  bool operator<=(const Point2& other) const {
    return x <= other.x && y <= other.y;
  }

  Point2 operator-(Point2 other) const {
    return {x - other.x, y - other.y};
  }

  Point2 operator*(float scalar) const {
    return {x * scalar, y * scalar};
  }

  Point2 operator*(Point2 other) const {
    return {x * other.x, y * other.y};
  }

  Point2 operator/(float scalar) const {
    return {x / scalar, y / scalar};
  }

  Point2 operator/(Point2 other) const {
    return {x / other.x, y / other.y};
  }

  friend std::ostream& operator<<(std::ostream& os,
                                  const Point2& point) {
    return os << "Point2(" << point.x << ", " << point.y
              << ")";
  }

  float x, y;
};

}  // namespace cs::renderer::geo

#endif  // CS_RENDERER_GEO_POINT2_HH
v0 (commit) © 2025 @p13i.io | Load balancer proxied to: cs-code-viewer-1:8080 in 4ms.