源文件vectorcals.cpp
包含一些矢量操作,用于starx类中member function的一些矢量运算
starx.cpp:https://blog.csdn.net/qq_33904382/article/details/102789576
/*vectorcals.cpp*/
#include "vectorcals.h"
///求所有元素的和 <矢量表中所有矢量(平面)的和>
///返回和向量
template<typename Tx>
vector<Tx> vecAdd(const vector<vector<Tx>>& vec)
{
vector<double> res(2);
Tx resx=0,resy=0;
for(auto elem : vec){
resx+=elem[0];//第一坐标和
resy+=elem[1];//第二坐标和
} //写-和向量
res.push_back(resx);
res.push_back(resy);
return res;
}
///求矢量的模 返回模
template<typename T>
T vecLen(const vector<T> vec)
{
T res(0);
for(auto elem : vec){
res+=elem*elem;//平方和
}res = sqrt(res);//开平方
return res;
}
///两点距离<平面欧式距离>
template<typename T>
T pondis(const vector<T> locA,const vector<T> locB)
{
T dx = locB[0]-locA[0];//x坐标差
T dy = locB[1]-locA[1];//y坐标差
return sqrt(dx*dx+dy*dy);//返回距离
}
///两点距离平方<平面坐标系>
template<typename T>
T pondis2(const vector<T> locA,const vector<T> locB)
{
T dx = locB[0]-locA[0];//x坐标差
T dy = locB[1]-locA[1];//y坐标差
return dx*dx+dy*dy;//返回距离
}
///求向量的单位方向向量
template<typename T>
T vecdir(const vector<T>& vec)
{
vector<T> dirvec;
T len = vecLen(vec);
dirvec.push_back(vec[0]/len);
dirvec.push_back(vec[1]/len);
return dirvec;
}
vector<double> vecdirx(const vector<double>& vec)
{
vector<double> dirvec;
double len = vecLen(vec);
dirvec.push_back(vec[0]/len);
dirvec.push_back(vec[1]/len);
return dirvec;
}