objectarx向量的用法

求一圆的外切正方形的四个顶点坐标。

 // 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间的向量的单位向量 

 

你可能感兴趣的:(ObjectArx)