75 const unsigned dx_abs = (p1.x > p0.x) ? (p1.x - p0.x) : (p0.x - p1.x);
76 const unsigned dy_abs = (p1.y > p0.y) ? (p1.y - p0.y) : (p0.y - p1.y);
77 if (dx_abs > 1 || dy_abs > 1)
80 const int dx = (p1.x > p0.x) ? 1 : ((p1.x < p0.x) ? -1 : 0);
81 const int dy = (p1.y > p0.y) ? 1 : ((p1.y < p0.y) ? -1 : 0);
84 constexpr Dir8 DIR8_XY[3][3] = {
89 return DIR8_XY[dy + 1][dx + 1];
121 return ((
int)dir + 2) % 8;
146template<
typename T,
typename F>
207template<IsSigned T, std::
size_t N>
211 for (std::size_t i = 0; i <
N; ++i)
213 ret[i] = (size[i] /
static_cast<T>(2)) * ((
int)dir[i] + 1);
222template<IsSigned T, std::
size_t N>
229 for (std::size_t i = 0; i <
N; ++i)
231 ret[i] = ((size[i] - size_self[i]) /
static_cast<T>(2)) * ((
int)dir[i] + 1);
238template<IsSigned T, std::
size_t N>
248 return { -size.w, -size.h };
250 return { size.h, 0 };
338 return rect[3] - rect[1];
348 return rect[2] - rect[0];
388 rect.left += offset.x;
389 rect.right += offset.x;
390 rect.top += offset.y;
391 rect.bottom += offset.y;
constexpr void OffsetRect(Array< T, 4 > &rect, const Array< T, 2 > &offset)
偏移矩形
constexpr T & GetBottom(Array< T, 4 > &rect)
Point Anchor2Point(const Size &size, std::string_view anchor)
锚点(字符串)返回 偏移
constexpr Dir8 GetDir8R(Dir8 dir)
获取相反方向
Position Anchor2Position(const Position &size, std::string_view anchor)
int GetMask(const std::array< T, 4 > &arr, F func)
constexpr T & GetTop(Array< T, 4 > &rect)
Array< Direction, 2 > Direction2
constexpr Array< T, 2 > GetRT(const Array< T, 4 > &rect)
constexpr Array< T, 2 > GetRB(const Array< T, 4 > &rect)
constexpr Dir8 GetDir8(const PointU &p0, const PointU &p1)
constexpr T & GetLeft(Array< T, 4 > &rect)
constexpr Array< T, 2 > GetLB(const Array< T, 4 > &rect)
constexpr Array< T, 2 > GetSize(const Array< T, 4 > &rect)
计算返回 矩形 宽和高
constexpr T & GetRight(Array< T, 4 > &rect)
Direction2 Anchor2Direction(std::string_view anchor)
锚点(字符串)返回 对齐
constexpr Array< T, 2 > GetLT(const Array< T, 4 > &rect)
constexpr Array< T, N > Dir2Offset(const Array< T, N > &size, Dir4 dir)
根据大小和朝向,计算偏移
constexpr void Shrink(Array< T, 4 > &rect, const T &v)
拓展矩形
constexpr T GetWidth(const Array< T, 4 > &rect)
计算返回 矩形 右下角坐标x 减去 左上角坐标x
constexpr int Dir8ToMir2(Dir8 dir)
constexpr size_t Mask2Index(int mask)
float Dir2Rotate(Dir4 dir)
方向对应的旋转角度(弧度)
constexpr Array< T, N > Size2Anchor(const Array< T, N > &size, const Array< Direction, N > &dir)
根据大小和对齐,计算锚点
constexpr T GetHeight(const Array< T, 4 > &rect)
计算返回 矩形 右下角坐标y 减去 左上角坐标y
constexpr int MASK_J
平滑地图 四方向掩码
constexpr float PIF(unsigned n=1, unsigned d=1)