Opengl中的三维数学二(点和向量的简单运算)

向量和点的运算是立体几何中最基本也是最常用的运算,有时候我们可以把向量想象成点,并且运用相同的公式,通过向量的运算可以把一些很复杂的事情变的很简单,其中的神奇之处还要自己体会。

点和向量的加法运算


向量加的几何意义


//点和向量相加
void d3Plus(const float p1[3]/*(in)*/
,const float p2[3]/*(in)*/
,float p_out[3]/*(out)*/)
{
for (int i=0;i<3;i++)
{
p_out[i] = p1[i] + p2[i];
}
}

这个函数比较简单,将三个向对应相加即可


点和向量的减法运算

向量的减法运算其实就相当于加法运算,A-B=A+(-B)

//点相减
void d3Cut(const float p1[3]/*(in)*/
  ,const float p2[3]/*(in)*/
  ,float p_out[3]/*(out)*/)
{
for (int i=0;i<3;i++)
{
p_out[i] = p1[i] - p2[i];
}
}


向量的乘法运算

A*B=Cosα*|A|*|B| 

几何意义相当于A向量在B向量上的投影长度乘以B向量的投影长度,这个两个乘积其实没有什么意义,但当其中一个向量转换为单位向量之后就有他的意义了

通过变换可以获得

Cosα=A*B/(|A|*|B|)

这样可以求出两个向量夹角的余弦值,进而求出两个向量之间的夹角


float d3Multiple( const float p1[3]/*(in)*/,const float p2[3]/*(in)*/ )
{
return p1[0]*p2[0]+p1[1]*p2[1]+p1[2]*p2[2];
}


向量乘以一个数字

//点乘以一个数字
void d3MultiNum(float p1[3]/*(in)点*/
,float num/*(in)乘以的系数*/
,float p_out[3]/*(out)输出点*/)
{
for (int i=0;i<3;i++)
{
p_out[i] = p1[i] * num;
}
}


//点除以一个系数
void d3RemoveNum(float p1[3]/*(in)*/
 ,float num/*(in)*/
 ,float p_out[3]/*(out)*/)
{
for (int i=0;i<3;i++)
{
p_out[i] = p1[i]/num;
}
}


//向量的长度
float d3Length(const float p_in[3])
{
return sqrt(d3Multiple(p_in,p_in));
}


//得到两个点之间的距离
float Twod3Dist(const float p1[3],const float p2[3])
{
float vect[3];
d3Cut(p2,p1,vect);
return d3Length(vect);
}


//将一个向量转化为单位向量
void d3Unit(float p_in[3]/*(in)*/
  ,float p_out[3]/*(out)*/)
{
float length = d3Length(p_in);
d3RemoveNum(p_in,length,p_out);
}


向量和点的基础运算函数就这么多,通过这些基础函数能延伸出一些复杂的运算,在后面的文章中将会一一讲解

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值