天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 49|回复: 0

objectarx向量的用法

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式


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


 

 

 

 

objectarx向量的用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 15:27 , Processed in 0.125158 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表