|
ACGEVector3d必须写作AcGeVector3d,是空间向量的抽象类,它可以执行的操作:
angleOnPlane 向量在平面上的投影所成的角
angleTo 向量间的夹角
operator AcGeMatrix3d 转换为矩阵
crossProduct 叉乘另一个向量
largestElement x,y,z中最大的元素
operator [] x,y,z中某一个元素,[0],[1],[2]
isCodirectionalTo 判断是否同向,可设置判断的误差
isParallelTo 判断是否平行,可设置判断的误差
isPerpendicularTo 判断是否垂直,可设置判断的误差
dotProduct 点乘另一个向量
isEqualTo 判断是否相等,可设置判断的误差
operator != 判断是否不相等
operator == 判断是否相等
rotateTo 返回旋转到指定向量所需要的矩阵
perpVector 返回AcGeContext::gOrthoVector决定的垂直向量
negate 返回反向量
isUnitLength 判断是否是单位向量
isZeroLength 判断是否是零向量
length 向量长度
lengthSqrd 向量长度的平方
normal 向量的方向向量
normalize 单位化向量
orthoProject 平行投影
project 正交投影
operator * 标乘
operator *= 标称赋值
operator / 标除
operator /= 标除赋值
set 设置
mirror 镜像
rotateBy 旋转
setToProduct 设为矩阵和向量的乘积
transformBy 矩阵变换
operator + 向量加
operator +=
operator - 向量减
operator -=
setToSum 置为和
常量有:
kIdentity=zero vector
kXAxis=vector (1, 0, 0)
kYAxis=vector (0, 1, 0)
kZAxis=vector (0, 0, 1)
成员有:
double x,y,z
另外,可以由AcGePoint3d::asVector()得到,是从原点指向该点的向量,还可以与AcGePoint3d相加得到和,可以由两个AcGePoint3d相减得到差。
求一圆的外切正方形的四个顶点坐标。
// cad x轴正方向为零度方向,逆时针为正
// centerPt为圆心坐标,radius为圆的半径,angle为正方形的第一个点的偏移角度
AcGePoint3dArray GetCalculateVertexZfx(const AcGePoint3d& centerPt, double radius,double angle)
{
AcGePoint3d ptA;
ptA.x = centerPt.x + radius*sqrt((double)2) * cos(angle);
ptA.y = centerPt.y + radius*sqrt((double)2) * sin(angle);
ptA.z = centerPt.z;
AcGeVector3d vec(centerPt.x-ptA.x, centerPt.y-ptA.y, 0);
//// 单位向量
AcGeVector3d unitVec = vec.normalize();
//// 绕Z轴旋转
// 以单位向量为基准,先偏移至最近计算的边
// 求出一条边后,继续偏移,计算另一条
unitVec.rotateBy( 45*PI/180, AcGeVector3d::kZAxis);
//// B点坐标 = A点坐标 + AB间的向量
AcGePoint3d ptB;
ptB = ptA + unitVec*2*radius;
//C点坐标是和A点对称的,可以通过圆心算
AcGePoint3d ptC;
ptC.x = centerPt.x - radius*sqrt((double)2) * cos(angle);
ptC.y = centerPt.y - radius*sqrt((double)2) * sin(angle);
ptC.z = centerPt.z;
//D点坐标可以通过向量 AB来旋转计算
AcGePoint3d ptD;
unitVec.rotateBy(-90*PI/180, AcGeVector3d::kZAxis);
ptD = ptA+ unitVec*2*radius;
AcGePoint3dArray array1;
array1.append(ptA);
array1.append(ptB);
array1.append(ptC);
array1.append(ptD);
return array1;
}
1、向量如何确定方向?向量就是一个坐标量的数值,向量本身与坐标系无关
2、normalize的作用
将向量正规化为单位向量
单位向量(unit vector): 范数为1的向量,若 v 为一非零向量,则
为一方向与 v 相同之单位向量,这种对一已知向量建构与其同向之单位元向量的程序称为向量正规化(normalization of a vector)
举例来说,如果一个向量A取了normalize之后(设为A'),点B+A'=点C,则点C和点B的距离为1
3、向量与距离的区别
两点间的向量不是两点间的距离,简单理解就是:A点坐标 + AB间的向量 = B点坐标,但是 A点坐标 + A~B点距离 ! = B点坐标,但可以有
AB间的向量=A~B点距离 * AB间的向量的单位向量
|
|