a向量正交投影到b

1.连个向量 点 乘

//两个向量点乘
static double Dot(const double a[3],const double b[3]){
    return (a[0]*b[0] + a[1]*b[1] + a[2]*b[2]);
}

2.两个向量 x 乘

//向量x乘
void CrossVector(const double a[3],const double b[3],double normal[3]){
    normal[0] = a[1] * b[2] - a[2] * b[1];
    normal[1] = a[2] * b[0] - a[0] * b[2];
    normal[2] = a[0] * b[1] - a[1] * b[0];
}

3.对一个数值与一个向量相乘

//对一个向量进行乘积
static void MultiplyVector(double a[3],double scalar){
    for(unsigned int i=0; i<3; i++){
        a[i] *= scalar;
    }
}

4.a向量正交投影到b

//a向量正交投影到b
bool VectorProjection(const double a[3],const double b[3],double a1[3]){
    double bSq = Dot(b,b);
    //判断b是否为0
    if(0 == bSq){
        a1[0] = 0;
        a1[1] = 0;
        a1[2] = 0;
        return false;
    }

    float ratio = Dot(a,b)/bSq;
    for(unsigned int i=0; i<3; i++){
        a1[i] = b[i];
    }
    MultiplyVector(a1,ratio);
    return true;
}

向量投影详细解读https://www.cnblogs.com/graphics/archive/2010/08/03/1791626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值