向量和点的运算是立体几何中最基本也是最常用的运算,有时候我们可以把向量想象成点,并且运用相同的公式,通过向量的运算可以把一些很复杂的事情变的很简单,其中的神奇之处还要自己体会。
点和向量的加法运算
向量加的几何意义
//点和向量相加
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);
}
向量和点的基础运算函数就这么多,通过这些基础函数能延伸出一些复杂的运算,在后面的文章中将会一一讲解