平面物理引擎(我们的星星)2.2--源文件vectorcals.cpp

源文件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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值