49 return a.
x == b.
x && a.
y == b.
y;
53bool operator!=(
const PointT<T>& a,
const PointT<T>& b)
64template <
typename T,
typename U>
67 return {a.x + b.x, a.y + b.y};
70template <
typename T,
typename U>
73 return {a.x - b.x, a.y - b.y};
76template <
typename T,
typename U>
79 return {a.x * b.x, a.y * b.y};
82template <
typename T,
typename U>
85 return {s * a.x, s * a.y};
88template <
typename T,
typename U>
91 return {a.x / d, a.y / d};
94template <
typename T,
typename U>
97 return a.x * b.x + a.y * b.y;
103 return a.x * b.y - b.x * a.y;
110 return std::abs(p.x) + std::abs(p.y);
115auto length(
PointT<T> p) ->
decltype(std::sqrt(dot(p, p)))
117 return std::sqrt(dot(p, p));
124 return std::max(std::abs(p.x), std::abs(p.y));
130 return length(a - b);
142 return d / maxAbsComponent(d);
148 return std::abs(d.x) > std::abs(d.y) ?
PointT<T>(d.x, 0) :
PointT<T>(0, d.y);
156 return p +
PointF(0.5f, 0.5f);
161 return {std::floor(p.x) + 0.5f, std::floor(p.y) + 0.5f};
169 return std::to_string(swap ? p.
y : p.
x) + delim + std::to_string(swap ? p.
x : p.
y);
PointT< double > PointF
Definition Point.h:42
PointT< int > PointI
Definition Point.h:41
std::string ToString(BarcodeFormat format)
A simple 2D point class template.
Definition Point.h:21
T value_t
Definition Point.h:22
int y
Definition Point.h:23
constexpr PointT(const PointT< U > &p)
Definition Point.h:29
PointT & operator+=(const PointT< U > &b)
Definition Point.h:33
constexpr PointT()=default
int x
Definition Point.h:23
constexpr PointT(T x, T y)
Definition Point.h:26