/** * * @file FITKVec3D.h * @brief 声明三维节点与向量 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 * */ #ifndef _FITKVEC3D_H__ #define _FITKVEC3D_H__ #include "FITKAbstractObject.hpp" namespace Core { /** * @brief 三维点类 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ class FITKCoreAPI FITKPoint : public FITKAbstractObject { public: /** * @brief Construct a new FITKPoint object * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ FITKPoint(); /** * @brief Construct a new FITKPoint object * @param[i] x x坐标 * @param[i] y y坐标 * @param[i] z z坐标 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ FITKPoint(double x, double y, double z); /** * @brief Construct a new FITKPoint object * @param[i] c 坐标值,3个值 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ FITKPoint(double* c); /** * @brief Construct a new FITKPoint object * @param[i] point 拷贝对象 * @author LiBaojun (libaojunqd@ifoxmail.com) * @date 2024-02-27 */ FITKPoint(const FITKPoint& point); /** * @brief 获取X坐标 * @return double * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ double x() const; /** * @brief 获取y坐标 * @return double * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ double y() const; /** * @brief 获取z坐标 * @return double * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ double z() const; /** * @brief 获取坐标 * @param[o] c 输出坐标值,3个分量 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ void getCoor(double* c) const; /** * @brief 设置坐标 * @param[i] x x坐标 * @param[i] y y坐标 * @param[i] z z坐标 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-05-25 */ void setCoor(double x, double y, double z); /** * @brief 运算符重载 * @author LiBaojun(libaojunqd@foxmail.com) * @date 2024 - 05 - 25 */ void operator = (const FITKPoint & p); /** * @brief 运算符重载 * @author LiBaojun(libaojunqd@foxmail.com) * @date 2024 - 05 - 25 */ double operator [] (const int & index); protected: /** * @brief 坐标值 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ double _coor[3] = { 0,0,0 }; }; /** * @brief 节点类,带ID * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-07 */ class FITKCoreAPI FITKNode : public FITKPoint { public: using FITKPoint::FITKPoint; /** * @brief Construct a new FITKNode object * @param[i] id 节点id * @param[i] x 节点x坐标 * @param[i] y 节点y坐标 * @param[i] z 节点z坐标 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ FITKNode(const int id, const double x, const double y, const double z); /** * @brief Construct a new FITKNode objecti * @param[i] id 节点id * @param[i] coor 节点坐标 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ FITKNode(const int id, const double* coor); /** * @brief 设置节点ID * @param[i] id 节点ID * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ void setNodeID(const int id); /** * @brief 获取节点ID * @return int * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-27 */ int getNodeID() const; private: /** * @brief 节点ID号 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-02-29 */ int _nodeID{ -1 }; }; /** * @brief 向量 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-07 */ class FITKCoreAPI FITKVec3D : public FITKPoint { public: using FITKPoint::FITKPoint; /** * @brief Construct a new FITKPoint object * @param[i] point 拷贝对象 * @author LiBaojun (libaojunqd@ifoxmail.com) * @date 2024-02-27 */ FITKVec3D(const FITKPoint& point); FITKVec3D(const FITKPoint& endPt, const FITKPoint& startPt); /** * @brief 获取向量的模 * @return double * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-05-25 */ double getNorm() const; /** * @brief 向量归一化 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-05-25 */ void normalize(); }; } #endif