|
|
|
|
#include "FITKVec3D.h"
|
|
|
|
|
#include <cmath>
|
|
|
|
|
|
|
|
|
|
namespace Core
|
|
|
|
|
{
|
|
|
|
|
FITKPoint::FITKPoint()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
FITKPoint::FITKPoint(double x, double y, double z)
|
|
|
|
|
{
|
|
|
|
|
_coor[0] = x;
|
|
|
|
|
_coor[1] = y;
|
|
|
|
|
_coor[2] = z;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FITKPoint::FITKPoint(double* c)
|
|
|
|
|
{
|
|
|
|
|
//c的长度必须大于等于3,超出3的截断
|
|
|
|
|
if (c == nullptr) return;
|
|
|
|
|
for (int i = 0; i < 3; ++i)
|
|
|
|
|
_coor[i] = c[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FITKPoint::FITKPoint(const FITKPoint& point)
|
|
|
|
|
{
|
|
|
|
|
//拷贝对象
|
|
|
|
|
_coor[0] = point.x();
|
|
|
|
|
_coor[1] = point.y();
|
|
|
|
|
_coor[2] = point.z();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double FITKPoint::x() const
|
|
|
|
|
{
|
|
|
|
|
//x坐标
|
|
|
|
|
return _coor[0];
|
|
|
|
|
}
|
|
|
|
|
double FITKPoint::y() const
|
|
|
|
|
{
|
|
|
|
|
//y坐标
|
|
|
|
|
return _coor[1];
|
|
|
|
|
}
|
|
|
|
|
double FITKPoint::z() const
|
|
|
|
|
{
|
|
|
|
|
//z坐标
|
|
|
|
|
return _coor[2];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FITKPoint::getCoor(double* c) const
|
|
|
|
|
{
|
|
|
|
|
//错误判断
|
|
|
|
|
if (c == nullptr) return;
|
|
|
|
|
//记录坐标
|
|
|
|
|
for (int i = 0; i < 3; ++i)
|
|
|
|
|
c[i] = _coor[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FITKPoint::setCoor(double x, double y, double z)
|
|
|
|
|
{
|
|
|
|
|
_coor[0] = x;
|
|
|
|
|
_coor[1] = y;
|
|
|
|
|
_coor[2] = z;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double FITKPoint::operator[](const int & index)
|
|
|
|
|
{
|
|
|
|
|
if (index < 0 || index > 2) return 0;
|
|
|
|
|
return _coor[index];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FITKPoint::operator=(const FITKPoint & p)
|
|
|
|
|
{
|
|
|
|
|
_coor[0] = p.x();
|
|
|
|
|
_coor[1] = p.y();
|
|
|
|
|
_coor[2] = p.z();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FITKNode::FITKNode(const int id, const double x, const double y, const double z)
|
|
|
|
|
{
|
|
|
|
|
//拷贝数据
|
|
|
|
|
_coor[0] = x;
|
|
|
|
|
_coor[1] = y;
|
|
|
|
|
_coor[2] = z;
|
|
|
|
|
_nodeID = id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FITKNode::FITKNode(const int id, const double* c)
|
|
|
|
|
{
|
|
|
|
|
//错误判断
|
|
|
|
|
if (c == nullptr) return;
|
|
|
|
|
//记录坐标
|
|
|
|
|
for (int i = 0; i < 3; ++i)
|
|
|
|
|
_coor[i] = c[i];
|
|
|
|
|
//记录ID
|
|
|
|
|
_nodeID = id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FITKNode::setNodeID(const int id)
|
|
|
|
|
{
|
|
|
|
|
_nodeID = id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int FITKNode::getNodeID() const
|
|
|
|
|
{
|
|
|
|
|
return _nodeID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FITKVec3D::FITKVec3D(const FITKPoint& p)
|
|
|
|
|
{
|
|
|
|
|
_coor[0] = p.x();
|
|
|
|
|
_coor[1] = p.y();
|
|
|
|
|
_coor[2] = p.z();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FITKVec3D::FITKVec3D(const FITKPoint& endPt, const FITKPoint& startPt)
|
|
|
|
|
{
|
|
|
|
|
_coor[0] = endPt.x() - startPt.x();
|
|
|
|
|
_coor[1] = endPt.y() - startPt.y();
|
|
|
|
|
_coor[2] = endPt.z() - startPt.z();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double FITKVec3D::getNorm() const
|
|
|
|
|
{
|
|
|
|
|
double m = 0;
|
|
|
|
|
for (int i = 0; i < 3; ++i)
|
|
|
|
|
m += _coor[i] * _coor[i];
|
|
|
|
|
return sqrt(m);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FITKVec3D::normalize()
|
|
|
|
|
{
|
|
|
|
|
double m = this->getNorm();
|
|
|
|
|
if (m < 1e-9) return;
|
|
|
|
|
for (int i = 0; i < 3; ++i)
|
|
|
|
|
_coor[i] /= m;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|