1 #ifndef CHANPROJECT_VECTOR2D_H
2 #define CHANPROJECT_VECTOR2D_H
3 #include "ChanGlobal.h"
4
5 namespace Common{
6 template <typename T>
7 class Vector2D{
8 public:
9 Vector2D() = default;
10 virtual ~Vector2D() = default;
11 /**
12 * @brief 构造函数
13 * @param x x的值
14 * @param y y的值
15 * @since 1.0.0
16 */
17 Vector2D(const T& x, const T& y){
18 this->m_X = x;
19 this->m_Y = y;
20 }
21 /**
22 * @brief 返回点的x值
23 * @return 该点的x值
24 * @since 1.0.0
25 */
26 ChanNodiscard T x() const{
27 return m_X;
28 }
29 /**
30 * @brief 设置点的x值
31 * @param x 要赋值给x的值
32 * @since 1.0.0
33 */
34 void setX(const T& x){
35 m_X = x;
36 }
37 /**
38 * @brief 返回点的y值
39 * @return 该点的y值
40 * @since 1.0.0
41 */
42 ChanNodiscard T y() const{
43 return m_Y;
44 }
45 /**
46 * @brief 设置点的x值
47 * @param y 要赋值给y的值
48 * @since 1.0.0
49 */
50 void setY(const T& y){
51 m_Y = y;
52 }
53 /**
54 * @brief 比较两个对象是否相等
55 * @param p 要比较的对象
56 * @param sameWith 比较函数
57 * @note 如果比较函数‘sameWith’为nullptr,则使用“==”比较
58 * @return
59 */
60 bool sameWith(Vector2D<T> *p, bool (*sameWith)(T,T)) const{
61 if(sameWith == nullptr){
62 return (m_X == p->m_X) && (m_Y == p->m_Y);
63 }else if(sameWith(m_X, p->m_X) && sameWith(m_Y, p->m_Y)){
64 return true;
65 }else{
66 return false;
67 }
68 };
69
70 protected:
71 /**
72 * @brief [me]的x值
73 * @since 1.0.0
74 */
75 T m_X = 0.0;
76 /**
77 * @brief [me]的y值
78 * @since 1.0.0
79 */
80 T m_Y = 0.0;
81 };
82 }
83 #endif //CHANPROJECT_VECTOR2D_H