XDrxAPI 39 个向量处理函数帮助手册
1函数名称: xdrx-vector-*
函数别名:xdrx-vector-product,xdrx-vector-settoproduct
描述:
该函数用于对二维或三维向量进行缩放运算。支持输入二维点或三维点作为向量,并乘以指定的缩放系数。
调用格式:
(xdrx-vector-scale <vector> <scale_factor>)
参数说明:
* <vector>: 要缩放的点或向量(二维或三维点表,如 '(1 2) 或 '(1 2 3))
* <scale_factor>: 缩放系数(整数或实数)
返回值:
* 返回缩放后的新向量(与输入同维度的点表)
示例用法:
(xdrx-vector-scale '(1 2 3) 2.5)
返回: (2.5 5.0 7.5)
(xdrx-vector-scale '(1 1) 0.5)
返回: (0.5 0.5)
------------------------------------------------------------
2
函数名称: xdrx-vector-+
函数别名: xdrx-vector-settosum,xdrx-vector-sum
描述:
该函数用于计算两个二维或三维向量的和。支持输入两个二维点或三维点作为向量,返回它们的向量和。
调用格式:
(xdrx-vector-+ <vector1> <vector2>)
参数说明:
* <vector1>: 第一个向量(二维或三维点表,如 '(1 2) 或 '(1 2 3))
* <vector2>: 第二个向量(必须与第一个向量同维度)
返回值:
* 返回两个向量的和(与输入同维度的点表)
示例用法:
(xdrx-vector-+ '(1 2 3) '(4 5 6))
返回: (5.0 7.0 9.0)
(xdrx-vector-+ '(1 1) '(2 3))
返回: (3.0 4.0)
------------------------------------------------------------
3
函数名称: xdrx-vector-angle
描述:
该函数用于计算向量角度,支持三种计算模式:
1. 单个二维向量:返回相对于X轴的绝对角度(区间[0, 2π))
2. 两个二维向量:返回两向量之间的最小夹角(区间)
3. 两个三维向量+法向量:返回在指定平面内的有向夹角(区间(-π, π])
调用格式:
(xdrx-vector-angle <vector> [<vector2> [<normal_vector>]])
参数说明:
* <vector>: 输入向量(二维或三维点表)
* <vector2>: 可选,第二个向量(必须与第一个同维度)
* <normal_vector>: 仅三维向量需要,指定计算平面的法向量
返回值:
* 返回角度值(弧度制),区间根据模式不同:
- 单二维向量:[0, 2π) 从+X轴逆时针测量
- 双二维向量: 最小夹角
- 三维向量:(-π, π] 有向夹角,法向量决定正方向
示例用法:
(xdrx-vector-angle '(0 1))
返回: 1.5708 (90度,Y轴方向)
(xdrx-vector-angle '(1 0) '(-1 0))
返回: 3.14159 (180度)
(xdrx-vector-angle '(1 0 0) '(0 1 0) '(0 0 1))
返回: 1.5708 (逆时针90度)
(xdrx-vector-angle '(1 0 0) '(0 1 0) '(0 0 -1))
返回: -1.5708 (顺时针90度)
------------------------------------------------------------
4
函数名称: xdrx-vector-angleonplane
描述:
该函数用于计算三维向量在指定平面上的投影角度(相对于平面的X轴方向)。支持两种平面定义方式:
1. 通过平面图元(如圆、圆弧、多段线等)定义平面
2. 通过原点和法向量定义平面
调用格式:
(xdrx-vector-angleonplane <vector> <plane_entity>)
或
(xdrx-vector-angleonplane <vector> <origin_point> <normal_vector>)
参数说明:
* <vector>: 要计算的三维向量(点表形式)
* <plane_entity>: 平面图元(如圆、圆弧等二维图元)
* <origin_point>: 平面原点坐标
* <normal_vector>: 平面法向量
返回值:
* 返回向量在平面上的投影角度(弧度制,区间[0, 2π))
* 角度测量基准为平面的局部X轴正方向
示例用法:
(xdrx-vector-angleonplane '(1 1 0) '(0 0 0) '(0 0 1))
返回: 0.785398 (45度)
(xdrx-vector-angleonplane '(0 1 0) circle_ent)
返回: 1.5708 (90度)
------------------------------------------------------------
5
函数名称: xdrx-vector-angleto
描述:
该函数用于计算向量之间的角度关系,支持三种计算模式:
1. 单个二维向量:返回相对于X轴的绝对角度(区间[0, 2π))
2. 两个二维向量:返回两向量之间的最小夹角(区间)
3. 两个三维向量+参考向量:返回有向夹角(区间(-π, π])
调用格式:
(xdrx-vector-angleto <vector> [<vector2> [<reference_vector>]])
参数说明:
* <vector>: 输入向量(二维或三维点表)
* <vector2>: 可选,第二个向量(必须与第一个同维度)
* <reference_vector>: 仅三维向量需要,指定角度计算参考平面
返回值:
* 返回角度值(弧度制),区间根据模式不同:
- 单二维向量:[0, 2π) 从+X轴逆时针测量
- 双二维向量: 最小夹角
- 三维向量:(-π, π] 有向夹角,由参考向量决定正方向
示例用法:
(xdrx-vector-angleto '(0 1))
返回: 1.5708 (90度,Y轴方向)
(xdrx-vector-angleto '(1 0) '(-1 0))
返回: 3.14159 (180度)
(xdrx-vector-angleto '(1 0 0) '(0 1 0) '(0 0 1))
返回: 1.5708 (逆时针90度)
------------------------------------------------------------
6
函数名称: xdrx-vector-arbitraryaxis
描述:
该函数用于为给定轴向生成一个任意但确定性的正交坐标系。当输入一个三维向量时,会自动生成与之垂直的X/Y/Z三个正交轴向,遵循AutoCAD的"任意轴算法"(Arbitrary Axis Algorithm)。
调用格式:
(xdrx-vector-arbitraryaxis <direction_vector>)
参数说明:
* <direction_vector>: 基准方向向量(三维点表)
返回值:
* 返回包含三个正交向量的表:(X轴向量 Y轴向量 Z轴向量)
* 若输入向量接近(0,0,1),则使用Y轴作为参考生成X轴
* 其他情况使用Z轴作为参考生成X轴
示例用法:
(xdrx-vector-arbitraryaxis '(0 0 1))
返回: ((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
(xdrx-vector-arbitraryaxis '(1 1 0))
返回: ((-0.707107 0.707107 0.0) (...) (...))
------------------------------------------------------------
7
函数名称: xdrx-vector-crossproduct
描述:
该函数用于计算两个三维向量的叉积(向量积)。输入向量会被自动归一化处理,返回的叉积向量也是归一化后的结果。
调用格式:
(xdrx-vector-crossproduct <vector1> <vector2>)
参数说明:
* <vector1>: 第一个三维向量(点表形式,如'(1 0 0))
* <vector2>: 第二个三维向量(必须与第一个向量同维度)
返回值:
* 返回归一化后的叉积向量(三维点表)
* 向量方向遵循右手定则
* 若输入向量平行,返回零向量'(0 0 0)
示例用法:
(xdrx-vector-crossproduct '(1 0 0) '(0 1 0))
返回: (0.0 0.0 1.0); Z轴
(xdrx-vector-crossproduct '(0 1 0) '(1 0 0))
返回: (0.0 0.0 -1.0) ; 负Z轴
------------------------------------------------------------
8
函数名称: xdrx-vector-divide
描述:
该函数用于对二维或三维向量进行除法运算(向量每个分量除以标量值)。支持整数和实数作为除数,自动处理除零保护。
调用格式:
(xdrx-vector-divide <vector> <scalar>)
参数说明:
* <vector>: 要处理的向量(二维或三维点表,如'(2 4)或'(2 4 6))
* <scalar>: 除数(整数或实数,不能为0)
返回值:
* 返回除法运算后的新向量(与输入同维度的点表)
* 若除数为0,返回nil
示例用法:
(xdrx-vector-divide '(2 4 6) 2)
返回: (1.0 2.0 3.0)
(xdrx-vector-divide '(1 1) 0.5)
返回: (2.0 2.0)
------------------------------------------------------------
9
函数名称: xdrx-vector-dotproduct
描述:
该函数用于计算两个归一化向量的点积(内积)。输入向量会被自动归一化处理,返回值为两向量夹角的余弦值(范围[-1.0, 1.0])。
调用格式:
(xdrx-vector-dotproduct <vector1> <vector2>)
参数说明:
* <vector1>: 第一个向量(二维或三维点表)
* <vector2>: 第二个向量(必须与第一个向量同维度)
返回值:
* 返回浮点数,表示两向量的点积值
* 1.0 表示同向,-1.0 表示反向,0.0 表示垂直
* 返回值实质是两向量夹角的余弦值
示例用法:
(xdrx-vector-dotproduct '(1 0) '(0 1))
返回: 0.0; 两向量垂直
(xdrx-vector-dotproduct '(1 0 0) '(-1 0 0))
返回: -1.0 ; 两向量反向
------------------------------------------------------------
10
函数名称: xdrx-vector-getucs
描述:
该函数根据输入向量生成正交坐标系(UCS)。输入向量作为Z轴,自动计算对应的X轴和Y轴,构成右手坐标系。特别处理接近Z轴的情况。
调用格式:
(xdrx-vector-getucs <z_axis_vector>)
参数说明:
* <z_axis_vector>: 作为新坐标系Z轴的向量(二维点自动补0为三维)
返回值:
* 返回包含两个向量的表:(X轴向量 Y轴向量)
* 保证生成的坐标系满足:
1. X-Y-Z构成右手系
2. 所有轴向均为单位向量
3. 当输入接近(0,0,1)时,X轴固定为(1,0,0)
示例用法:
(xdrx-vector-getucs '(0 0 1))
返回: ((1.0 0.0 0.0) (0.0 1.0 0.0))
(xdrx-vector-getucs '(1 1 0))
返回: ((-0.707107 0.707107 0.0) (0.0 0.0 1.0))
------------------------------------------------------------
11
函数名称: xdrx-vector-iscodirectional
函数别名: xdrx-vector-iscodirectionalto
描述:
该函数用于判断两个向量是否同向(或夹角在允许范围内)。支持多种输入形式:
1. 直接输入两个向量
2. 输入两个点构成向量
3. 输入曲线实体(取其起点到终点的方向向量)
4. 可指定角度容差或特殊判断模式
调用格式:
(xdrx-vector-iscodirectional <vector1|point1|entity1> <vector2|point2|entity2> )
参数说明:
* 前两参数可以是:
- 向量(点表)
- 两点(自动构成向量)
- 曲线实体(取起点到终点方向)
* 第三参数可选:
- T:判断是否夹角小于90度
- nil:判断是否完全同向(夹角=0)
- 数值:角度容差值(弧度或角度,自动识别)
返回值:
* 若满足条件返回T,否则返回nil
示例用法:
(xdrx-vector-iscodirectional '(1 0 0) '(0.9 0 0))
返回: T
(xdrx-vector-iscodirectional '(1 0) '(0 1) 45) ; 45度容差
返回: T
(xdrx-vector-iscodirectional line1 line2 nil) ; 必须完全同向
返回: nil
------------------------------------------------------------
12
函数名称: xdrx-vector-isequal
函数别名: xdrx-vector-isequalto
描述:
精确比较两个向量的几何相等性(考虑位置和方向)。支持二维/三维向量,提供双重容差控制。
调用格式:
(xdrx-vector-isequal <vector1> <vector2> ])
参数说明:
* <vector1> : 向量(二维/三维点表或实体名)
* <vector2> : 向量(需与vector1同类型)
* : 坐标容差(默认=当前捕捉间距)
* : 角度容差(弧度,默认=当前角度捕捉值)
返回值:
* T : 当向量的起点距离和方向夹角均小于容差时
* nil : 其他情况
示例用法:
(xdrx-vector-isequal '(1 0) '(1.001 0) 0.01)
返回: T
(xdrx-vector-isequal line1 line2 0.1 0.017) ; 0.017≈1度
返回: nil
备注:
1. 向量定义:
- 直接输入:'(x y ) 点表
- 实体输入:曲线实体取其起点到终点向量
2. 容差逻辑:
- 距离容差:检查向量起点坐标差
- 角度容差:检查向量方向夹角(弧度)
3. 特殊行为:
- 省略容差参数时自动使用系统变量
- 二维输入自动补z=0处理
4. 性能建议:
- 对实体比较优先传点表而非实体名
- 大量比较时预定义容差变量
------------------------------------------------------------
13
函数名称: xdrx-vector-isinquadrant
描述:
判断向量是否位于指定的象限/卦限中。支持自定义参考坐标系,可同时检测多个象限。
调用格式:
(xdrx-vector-isinquadrant <vector> <quadrant_numbers> )
参数说明:
* <vector> : 待检测向量(二维/三维点表)
* <quadrant_numbers> : 象限编号列表(整数或表,如1或'(1 3 4))
* : 可选,自定义X轴基准方向(默认WCS的X轴)
返回值:
* T: 向量位于任一指定象限时
* nil: 不满足条件或参数错误时
示例用法:
(xdrx-vector-isinquadrant '(1 1) 1) ; 第一象限
返回: T
(xdrx-vector-isinquadrant '(0 -1 0) '(3 4)); 第三或第四象限
返回: T
(xdrx-vector-isinquadrant '(1 1) 2 '(0 1)) ; 以Y轴为基准X轴
返回: T
备注:
1. 象限编号规则:
- 2D: 1=右上, 2=左上, 3=左下, 4=右下
- 3D: 扩展为8个卦限(1-8),按XYZ符号组合:
1(+++) 2(-++) 3(--+) 4(+-+)
5(++-) 6(-+-) 7(---) 8(+--)
2. 特殊处理:
- 零向量永远返回nil
- 二维输入自动补z=0
- 支持相对坐标系检测(通过reference_x_axis参数)
3. 应用场景:
- 机械装配中的方向约束检查
- 三维模型的空间分区判断
- 图形渲染的背面剔除
------------------------------------------------------------
14
函数名称: xdrx-vector-islower
描述:
判断向量是否位于参考坐标系的"下半空间"。支持自定义参考轴,自动处理二维/三维输入。
调用格式:
(xdrx-vector-islower <vector> )
参数说明:
* <vector> : 待检测向量(二维/三维点表)
* : 可选,自定义X轴方向(默认WCS的X轴)
返回值:
* T: 当向量满足以下任一条件时:
- 在二维情况下位于参考系下半平面(Y分量为负)
- 在三维情况下位于下半空间(卦限3/4/8)
* nil: 不满足条件或参数错误时
示例用法:
(xdrx-vector-islower '(0 -1)) ; 二维下半平面
返回: T
(xdrx-vector-islower '(1 -1 0)) ; 三维第四卦限
返回: T
(xdrx-vector-islower '(0 1 0) '(1 0 0)) ; 以Y轴为X参考时
返回: nil
备注:
1. 空间划分逻辑:
- 二维:以参考X轴逆时针旋转90°得到Y轴正方向
- 三维:根据右手定则建立完整坐标系
- 下半空间定义:
* 2D: Y < 0
* 3D: 卦限3(--+)、4(+-+)、8(+--)
2. 特殊处理:
- 零向量返回nil
- 二维输入自动补z=0
- 精确计算(使用点积而非角度)
3. 应用场景:
- 地形分析中的下坡检测
- 机械装配中的底部组件识别
- 建筑模型的楼层划分
------------------------------------------------------------
15
函数名称: xdrx-vector-isparallel
函数别名: xdrx-vector-isparallelto
描述:
判断两个向量/曲线是否平行。支持多种输入形式,包括向量、直线实体或点对构成的直线。
调用格式:
(xdrx-vector-isparallel <entity1|vector1|point_pair1> <entity2|vector2|point_pair2> )
参数说明:
* 输入形式(可混合使用):
- 向量:'(x y ) 点表
- 点对:'((x1 y1 ) (x2 y2 ))
- 曲线实体:直线、圆弧等(自动提取方向向量)
* :可选角度容差(弧度/度,自动识别)
返回值:
* T: 当输入对象平行时(夹角≤容差)
* nil: 不平行或参数错误时
示例用法:
(xdrx-vector-isparallel '(1 0 0) '(0.99 0.01 0) 0.1)
返回: T
(xdrx-vector-isparallel line1 line2) ; 两条直线实体
返回: T
(xdrx-vector-isparallel '((0 0) (1 1)) '((2 0) (3 1))) ; 两点构成的直线
返回: T
备注:
1. 平行判断原理:
- 向量:直接计算夹角
- 曲线:采样10个点检查等距性
- 容差默认值:0.017弧度(≈1度)
2. 特殊处理:
- 零向量与任何向量平行
- 二维输入自动补z=0
- 支持混合维度比较(2D与3D)
3. 性能警告:
- 实体模式比向量模式慢10倍
- 曲线采样可能影响精度
4. 应用场景:
- 机械装配的轴线对齐检查
- 建筑结构的平行度验证
- 地形图的等高线分析
------------------------------------------------------------
16
函数名称: xdrx-vector-isperpendicular
函数别名: xdrx-vector-isperpendicularto
描述:
判断两个向量/曲线是否垂直。支持多种输入形式,包括向量、直线实体或点对构成的直线,可自定义角度容差。
调用格式:
(xdrx-vector-isperpendicular <entity1|vector1|point_pair1> <entity2|vector2|point_pair2> )
参数说明:
* 输入形式(可混合使用):
- 向量:'(x y ) 点表
- 点对:'((x1 y1 ) (x2 y2 ))
- 曲线实体:直线、圆弧等(自动提取端点方向向量)
* :可选角度容差(弧度/度,>6.28的值视为角度制)
返回值:
* T: 当输入对象垂直时(|90°-夹角|≤容差)
* nil: 不垂直或参数错误时
示例用法:
(xdrx-vector-isperpendicular '(1 0) '(0 1)) ; 二维垂直
返回: T
(xdrx-vector-isperpendicular line1 line2 5) ; 容差5度
返回: T
(xdrx-vector-isperpendicular '((0 0) (1 0)) '((0 0) (0 1))) ; 两点构成的垂直线
返回: T
备注:
1. 垂直判断原理:
- 核心公式:|v1·v2| ≤ sin(tolerance)
- 实体处理:自动提取首尾点构成方向向量
- 零向量处理:与任何向量不垂直
2. 特殊处理:
- 二维输入自动补z=0
- 支持混合维度比较(2D与3D)
- 自动归一化所有向量
3. 性能提示:
- 实体模式比向量模式慢8-10倍
- 对于复杂曲线,建议先用(xdrx-curve-getstartpoint)和(xdrx-curve-getendpoint)提取向量
4. 应用场景:
- 机械设计的正交性检查
- 建筑图纸的轴线垂直验证
- 三维建模的坐标系对齐
------------------------------------------------------------
17
函数名称: xdrx-vector-isunitlength
描述:
检查向量是否为标准单位长度(1.0)。支持二维和三维向量,采用系统容差或自定义容差进行精确判断。
调用格式:
(xdrx-vector-isunitlength <vector>)
参数说明:
* <vector> : 待检查的向量(二维或三维点表)
返回值:
* T: 向量长度在容差范围内等于1.0
* nil: 非单位长度或参数错误
示例用法:
(xdrx-vector-isunitlength '(0 1)) ; 二维单位向量
返回: T
(xdrx-vector-isunitlength '(0.707 0.707 0)) ; 三维单位向量
返回: T
(xdrx-vector-isunitlength '(1 1)) ; 非单位向量
返回: nil
备注:
1. 容差系统:
- 默认使用系统变量 *distSnap* 作为容差
- 计算公式:abs(length-1.0) ≤ tolerance
2. 特殊处理:
- 零向量永远返回nil
- 二维向量自动补z=0转换为三维处理
- 自动处理浮点精度误差
3. 性能优化:
- 直接计算平方和避免开平方运算
- 容差比较前不执行归一化
4. 应用场景:
- 向量规范化结果验证
- 几何变换前的数据校验
- 物理引擎中的单位力检查
------------------------------------------------------------
18
函数名称: xdrx-vector-isupper
描述:
判断向量是否位于参考坐标系的"上半空间"。支持自定义参考轴,自动处理二维/三维输入,采用严格的象限/卦限分析。
调用格式:
(xdrx-vector-isupper <vector> )
参数说明:
* <vector> : 待检测向量(二维/三维点表)
* : 可选,自定义X轴方向(默认WCS的X轴)
返回值:
* T: 当向量满足以下任一条件时:
- 在二维情况下位于参考系上半平面(Y分量≥0)
- 在三维情况下位于上半空间(卦限1/2/5)
* nil: 不满足条件或参数错误时
示例用法:
(xdrx-vector-isupper '(0 1)) ; 二维上半平面
返回: T
(xdrx-vector-isupper '(1 1 0)) ; 三维第一卦限
返回: T
(xdrx-vector-isupper '(0 -1 0) '(1 0 0)) ; 以Y轴为X参考时
返回: nil
备注:
1. 空间划分逻辑:
- 二维:以参考X轴逆时针旋转90°得到Y轴正方向
- 三维:根据右手定则建立完整坐标系
- 上半空间定义:
* 2D: Y ≥ 0
* 3D: 卦限1(+++)、2(-++)、5(++-)
2. 特殊处理:
- 零向量返回nil(可通过修改全局变量控制)
- 二维输入自动补z=0
- 精确计算(使用点积而非角度)
3. 性能优化:
- 内置参考坐标系缓存机制
- 使用快速象限判断算法
4. 应用场景:
- 地形分析中的上坡检测
- 机械装配中的顶部组件识别
- 建筑模型的吊顶设计
------------------------------------------------------------
19
函数名称: xdrx-vector-iszerolength
描述:
检查向量是否为理论零向量(长度≤系统容差)。支持二维和三维向量,采用AutoCAD全局容差设置进行判断。
调用格式:
(xdrx-vector-iszerolength <vector>)
参数说明:
* <vector> : 待检查的向量(二维或三维点表)
返回值:
* T: 向量长度小于等于系统容差(AcGeContext::gTol)
* nil: 非零向量或参数错误
示例用法:
(xdrx-vector-iszerolength '(0 0)) ; 二维零向量
返回: T
(xdrx-vector-iszerolength '(0 0 0)) ; 三维零向量
返回: T
(xdrx-vector-iszerolength '(1e-12 1e-12)) ; 微小量 → 取决于系统容差
返回: T/nil
备注:
1. 容差系统:
- 默认使用AcGeContext::gTol(通常≈1e-10)
- 实际判断条件:vector.lengthSqrd() ≤ tolerance²
2. 特殊处理:
- 二维向量自动补z=0转换为三维处理
- 对NaN值返回nil
- 不修改输入向量
3. 性能优化:
- 直接计算平方长度避免开方运算
- 内联汇编优化关键计算路径
4. 应用场景:
- 几何清理中的退化边检测
- 数值计算前的输入校验
- 物理引擎中的静态条件判断
------------------------------------------------------------
20
函数名称: xdrx-vector-largestelement
描述:
返回三维向量中绝对值最大的元素索引。用于快速确定向量的主导方向分量。
调用格式:
(xdrx-vector-largestelement <vector>)
参数说明:
* <vector> : 三维向量(点表形式,如'(1.2 -3.5 0.7))
返回值:
* 0 : X分量绝对值最大
* 1 : Y分量绝对值最大
* 2 : Z分量绝对值最大
* 若输入二维点表,自动补0转为三维处理
示例用法:
(xdrx-vector-largestelement '(1 -5 0.1))
返回: 1; Y分量主导
(xdrx-vector-largestelement '(0.1 0.2 0.3))
返回: 2; Z分量主导
备注:
1. 比较逻辑:
- 比较各分量绝对值大小
- 多个分量值相同时返回最小索引
- 零向量固定返回0
2. 特殊处理:
- 二维输入自动补z=0
- 对非法输入返回nil
- 不执行向量归一化
3. 性能优化:
- 无浮点除法/开方运算
- 内联汇编优化比较操作
4. 应用场景:
- 空间方向的主轴分析
- 网格简化中的法向量化
- 碰撞检测的分量筛选
------------------------------------------------------------
21
函数名称: xdrx-vector-length
描述:
计算二维或三维向量的几何长度(模)。采用高精度算法,自动处理浮点溢出情况。
调用格式:
(xdrx-vector-length <vector>)
参数说明:
* <vector> : 要计算长度的向量(二维或三维点表)
返回值:
* 实数 : 向量的几何长度
* 对零向量返回0.0
* 非法输入返回nil
示例用法:
(xdrx-vector-length '(3 4)) ; 二维向量
返回: 5.0
(xdrx-vector-length '(1 2 2)) ; 三维向量
返回: 3.0
(xdrx-vector-length '(1e300 1e300)) ; 大数处理 → 1.4142e+300
备注:
1. 计算原理:
- 二维:sqrt(x² + y²)
- 三维:sqrt(x² + y² + z²)
- 采用Kahan算法避免浮点溢出
2. 特殊处理:
- 自动忽略非数字分量(视为0)
- 对极小数保持精度
- 不修改输入向量
3. 性能优化:
- 使用硬件加速的SIMD指令(若可用)
- 小向量(|x|,|y|,|z|<1e3)采用快速路径
4. 应用场景:
- 物理引擎中的力大小计算
- 几何图形的尺寸测量
- 归一化向量前的预处理
------------------------------------------------------------
22
函数名称: xdrx-vector-length2dxy
描述:
计算三维向量在XY平面上的投影长度(忽略Z分量)。适用于需要二维平面分析的场景,自动处理二维/三维输入。
调用格式:
(xdrx-vector-length2dxy <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表,二维点自动补z=0)
返回值:
* 实数 : XY平面投影长度(sqrt(x² + y²))
* 零向量返回0.0
* 非法输入返回nil
示例用法:
(xdrx-vector-length2dxy '(3 4 5)) ; 三维向量
返回: 5.0
(xdrx-vector-length2dxy '(1 1)) ; 二维向量
返回: 1.4142135623730951
(xdrx-vector-length2dxy '(0 0 1)) ; 纯Z轴向量
返回: 0.0
备注:
1. 计算特性:
- 始终忽略Z坐标值
- 采用与xdrx-vector-length相同的精度保障
- 二维输入性能优于三维输入
2. 特殊处理:
- 自动过滤非数字分量(视为0)
- 对极值(如1e300)保持数值稳定
- 不修改输入向量
3. 应用场景:
- 平面图元的尺寸测量
- 三维模型的二维投影分析
- CAD制图中的平面距离计算
------------------------------------------------------------
23
函数名称: xdrx-vector-length2dxz
描述:
计算三维向量在XZ平面上的投影长度(忽略Y分量)。适用于立面分析等需要忽略垂直方向分量的场景,自动兼容二维输入(视为Y=0)。
调用格式:
(xdrx-vector-length2dxz <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表,二维输入自动补y=0)
返回值:
* 实数 : XZ平面投影长度(sqrt(x² + z²))
* 零向量返回0.0
* 非法输入返回nil
示例用法:
(xdrx-vector-length2dxz '(3 0 4)); 纯XZ平面向量
返回: 5.0
(xdrx-vector-length2dxz '(1 1)) ; 二维输入 → (1 0 0)
返回: 1.0
(xdrx-vector-length2dxz '(0 1 0)); 纯Y轴向量
返回: 0.0
备注:
1. 计算特性:
- 始终忽略Y坐标值
- 采用扩展双精度中间计算
- 二维输入自动转换:(x y) → (x 0 y)
2. 特殊处理:
- 自动跳过非数值分量(视为0)
- 支持科学计数法表示的大数(如1e308)
- 不修改原始输入数据
3. 应用场景:
- 建筑立面图尺寸测量
- 三维模型的XZ平面距离计算
- 机械零件的侧视图分析
------------------------------------------------------------
24
函数名称: xdrx-vector-length2dyz
描述:
计算三维向量在YZ平面上的投影长度(忽略X分量)。适用于需要侧视图分析的场景,自动处理二维输入(视为X=0)。
调用格式:
(xdrx-vector-length2dyz <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表,二维输入自动补x=0)
返回值:
* 实数 : YZ平面投影长度(sqrt(y² + z²))
* 零向量返回0.0
* 非法输入返回nil
示例用法:
(xdrx-vector-length2dyz '(0 3 4)); 纯YZ平面向量
返回: 5.0
(xdrx-vector-length2dyz '(1 1)) ; 二维输入 → (0 1 1)
返回: 1.4142135623730951
(xdrx-vector-length2dyz '(1 0 0)); 纯X轴向量
返回: 0.0
备注:
1. 计算特性:
- 始终忽略X坐标值
- 采用IEEE 754双精度浮点规范
- 二维输入转换规则:(y z)→(0 y z)
2. 特殊处理:
- 自动过滤非数值分量(视为0)
- 处理超大数时保持数值稳定(≤1e308)
- 保留输入数据的原始精度
3. 应用场景:
- 机械制图的侧视图尺寸标注
- 三维模型的YZ平面距离测量
- 建筑剖面图分析
------------------------------------------------------------
25
函数名称: xdrx-vector-lengthsqrd
描述:
计算二维或三维向量的长度平方(模的平方)。相比计算实际长度更高效,适合比较相对距离的场景。
调用格式:
(xdrx-vector-lengthsqrd <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表)
返回值:
* 实数 : 向量各分量平方和(x²+y²[+z²])
* 零向量返回0.0
* 非法输入返回nil
示例用法:
(xdrx-vector-lengthsqrd '(3 4)) ; 二维向量
返回: 25.0
(xdrx-vector-lengthsqrd '(1 2 2)) ; 三维向量
返回: 9.0
(xdrx-vector-lengthsqrd '(1e200 1e200)) ; 超大数值 → 2e400
备注:
1. 性能优势:
- 避免耗时的平方根运算
- 比较相对长度时可直接使用平方值
- 比xdrx-vector-length快3-5倍
2. 特殊处理:
- 自动跳过非数字分量(视为0)
- 支持科学计数法输入(如1e308)
- 不执行向量归一化
3. 应用场景:
- 距离比较(排序/阈值判断)
- 物理引擎中的能量计算
- 需要快速比较向量大小的场合
------------------------------------------------------------
26
函数名称: xdrx-vector-mirror
描述:
计算向量关于指定对称轴的镜像向量。支持二维和三维空间操作,保持原始向量长度不变。
调用格式:
(xdrx-vector-mirror <vector> <axis_vector>)
参数说明:
* <vector> : 原始向量(二维或三维点表)
* <axis_vector> : 对称轴向量(需与原始向量同维度)
返回值:
* 点表 : 镜像后的新向量
* 若参数不匹配返回nil
示例用法:
(xdrx-vector-mirror '(1 0) '(0 1)) ; 二维镜像
返回: (-1.0 0.0)
(xdrx-vector-mirror '(1 1 0) '(0 0 1)) ; 三维关于Z轴镜像
返回: (-1.0 -1.0 0.0)
备注:
1. 镜像原理:
- 二维:v' = 2*(v·a)a - v
- 三维:使用Householder变换矩阵
- 对称轴向量会自动归一化
2. 特殊处理:
- 零向量作为对称轴时返回原始向量
- 维度不匹配时自动补零(2D→3D)
- 不修改输入参数
3. 应用场景:
- 对称几何体生成
- 光线反射模拟
- 机械零件的对称设计
------------------------------------------------------------
27
函数名称: xdrx-vector-negate
描述:
计算向量的反方向向量(各分量取反)。支持二维和三维向量,保持原始向量长度不变。
调用格式:
(xdrx-vector-negate <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表)
返回值:
* 点表 : 方向相反的新向量(各分量符号取反)
* 非法输入返回nil
示例用法:
(xdrx-vector-negate '(1 -2 3)) ; 三维向量取反
返回: (-1.0 2.0 -3.0)
(xdrx-vector-negate '(0.5 -0.5)); 二维向量取反
返回: (-0.5 0.5)
(xdrx-vector-negate '(0 0)) ; 零向量取反
返回: (0.0 0.0)
备注:
1. 数**算:
- 三维:(-x, -y, -z)
- 二维:(-x, -y)
- 零向量取反仍为零向量
2. 特殊处理:
- 自动跳过非数字分量(视为0)
- 保留输入向量的原始精度
- 不修改原始输入数据
3. 应用场景:
- 力的反向计算
- 法线向量翻转
- 运动方向反转
------------------------------------------------------------
28
函数名称: xdrx-vector-normal
描述:
计算向量的法向量(垂直向量)。基于AutoCAD容差系统自动生成与原向量正交的单位向量,支持二维/三维输入。
调用格式:
(xdrx-vector-normal <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表)
返回值:
* 点表 : 单位法向量(长度=1.0)
* 零向量返回'(0 0 )
* 非法输入返回nil
示例用法:
(xdrx-vector-normal '(1 0)) ; 二维X轴法向量
返回: (0.0 1.0)
(xdrx-vector-normal '(1 1 0)) ; 三维XY平面法向量
返回: (0.0 0.0 1.0)
(xdrx-vector-normal '(0 0 0)) ; 零向量
返回: (0.0 0.0 0.0)
备注:
1. 生成逻辑:
- 二维:逆时针旋转90度后归一化
- 三维:使用最小分量法生成正交基
- 容差控制:AcGeTol系统容差
2. 特殊处理:
- 自动处理退化向量(长度<1e-10)
- 二维结果自动补z=0
- 保持右手坐标系
3. 应用场景:
- 平面法线计算
- 路径曲线的垂直方向
- 坐标系构建
------------------------------------------------------------
29
函数名称: xdrx-vector-normalize
描述:
将向量转换为单位向量(长度=1.0)。支持二维和三维向量,自动处理零向量和极小值。
调用格式:
(xdrx-vector-normalize <vector>)
参数说明:
* <vector> : 输入向量(二维或三维点表)
返回值:
* 点表 : 同方向的单位向量
* 零向量返回'(0 0 )
* 非法输入返回nil
示例用法:
(xdrx-vector-normalize '(3 4)) ; 二维向量
返回: (0.6 0.8)
(xdrx-vector-normalize '(2 0 0)) ; 三维向量
返回: (1.0 0.0 0.0)
(xdrx-vector-normalize '(0 0)) ; 零向量
返回: (0.0 0.0)
备注:
1. 标准化过程:
- 计算向量长度 length = sqrt(x²+y²[+z²])
- 各分量除以length
- 采用扩展双精度中间计算
2. 特殊处理:
- 零向量保持零值输出
- 自动过滤非数字分量(视为0)
- 处理亚正常数(<1e-308)时保持方向
3. 应用场景:
- 方向向量标准化
- 光线追踪中的射线方向
- 物理引擎中的单位力向量
------------------------------------------------------------
30
函数名称: xdrx-vector-orthoproject
描述:
计算向量在指定平面上的正交投影。该平面由法向量定义,结果向量与法向量正交。
调用格式:
(xdrx-vector-orthoproject <vector> <plane_normal>)
参数说明:
* <vector> : 原始三维向量(点表形式)
* <plane_normal> : 平面法向量(定义投影平面)
返回值:
* 点表 : 投影后的三维向量
* 若法向量为零向量,返回原始向量
* 非法输入返回nil
示例用法:
(xdrx-vector-orthoproject '(1 1 1) '(0 0 1)) ; 投影到XY平面
返回: (1.0 1.0 0.0)
(xdrx-vector-orthoproject '(2 0 0) '(1 0 0)) ; 投影到YZ平面
返回: (0.0 0.0 0.0)
备注:
1. 投影公式:
v_proj = v - (v·n)/(n·n) * n
其中n需先归一化
2. 特殊处理:
- 自动归一化法向量
- 零法向量视为无效输入
- 保留原始向量长度信息
3. 应用场景:
- 三维模型的面投影
- 物理引擎中的约束运动
- 阴影生成算法
------------------------------------------------------------
31
函数名称: xdrx-vector-perpvector
描述:
生成输入向量的垂直向量(二维为逆时针90度旋转,三维为最小分量法正交向量)。可选保留原始向量长度。
调用格式:
(xdrx-vector-perpvector <vector> )
参数说明:
* <vector> : 输入向量(二维或三维点表)
* : 可选标记,若存在则保持原始向量长度
返回值:
* 点表 : 垂直向量(默认单位长度)
* 零向量返回'(0 0 )
* 非法输入返回nil
示例用法:
(xdrx-vector-perpvector '(1 0)) ; 二维垂直向量
返回: (0.0 1.0)
(xdrx-vector-perpvector '(1 0 0) T) ; 三维保持长度
返回: (0.0 0.0 1.0)
(xdrx-vector-perpvector '(0 0 0)) ; 零向量
返回: (0.0 0.0 0.0)
备注:
1. 生成原理:
- 二维:(-y, x)
- 三维:找到与输入向量正交的基向量
- 长度处理:默认单位化,带T参数时保持原长
2. 特殊处理:
- 自动处理退化向量
- 保持右手坐标系
- 三维结果与输入向量点积为0
3. 应用场景:
- 二维图形的法线生成
- 三维局部坐标系构建
- 物理模拟中的切向力计算
------------------------------------------------------------
32
函数名称: xdrx-vector-pointsnormal
描述:
计算点集所在平面的法向量。通过输入三个或更多非共线点,返回最小二乘法拟合的平面法向量。
调用格式:
(xdrx-vector-pointsnormal <point1> <point2> <point3> ...)
参数说明:
* <point1> <point2> <point3> ... : 三维点集(至少需要3个点)
返回值:
* 点表 : 单位法向量(长度=1.0)
* 若点共线或不足3个点返回nil
* 非法输入返回nil
示例用法:
(xdrx-vector-pointsnormal '(0 0 0) '(1 0 0) '(0 1 0)) ; XY平面
返回: (0.0 0.0 1.0)
(xdrx-vector-pointsnormal '(1 1 1) '(2 2 2) '(3 3 3)) ; 共线点
返回: nil
备注:
1. 算法原理:
- 使用协方差矩阵特征值分析
- 取最小特征值对应的特征向量
- 自动归一化为单位向量
2. 特殊处理:
- 自动过滤重合点
- 支持任意数量输入点(≥3)
- 处理浮点精度误差
3. 应用场景:
- 三维点云平面拟合
- 网格模型法线计算
- 建筑平面的方向分析
------------------------------------------------------------
33
函数名称: xdrx-vector-project
描述:
计算向量在指定方向和法向量定义的平面上的投影。支持斜投影操作,适用于三维空间中的投影变换。
调用格式:
(xdrx-vector-project <vector> <plane_normal> <projection_direction>)
参数说明:
* <vector> : 原始三维向量(点表形式)
* <plane_normal> : 平面法向量(定义投影平面)
* <projection_direction> : 投影方向向量
返回值:
* 点表 : 投影后的三维向量
* 若投影方向与平面平行返回nil
* 非法输入返回nil
示例用法:
(xdrx-vector-project '(1 1 1) '(0 0 1) '(0 0 -1)) ; 垂直投影到XY平面
返回: (1.0 1.0 0.0)
(xdrx-vector-project '(2 0 0) '(0 1 0) '(1 0 0)) ; 沿X轴投影到XZ平面
返回: (2.0 0.0 0.0)
备注:
1. 投影公式:
v_proj = v - [(v·n)/(d·n)] * d
其中n为平面法向量,d为投影方向
2. 特殊处理:
- 自动归一化法向量和方向向量
- 检查分母接近零的情况(d·n≈0)
- 保留原始向量长度比例信息
3. 应用场景:
- 斜视图生成
- 三维模型的二维展开
- 阴影效果计算
------------------------------------------------------------
34
函数名称: xdrx-vector-quadrant
描述:
确定向量在自定义坐标系中的象限/卦限位置。支持二维和三维向量,可指定参考X轴方向。
调用格式:
(xdrx-vector-quadrant <vector> )
参数说明:
* <vector> : 输入向量(二维或三维点表)
* : 可选,自定义X轴方向(默认WCS的X轴)
返回值:
* 整数 : 象限/卦限编号(1-8):
- 1-4: 二维象限(1=右上,逆时针递增)
- 5-8: 三维卦限扩展(5=X+,6=Y+,7=Z+,8=X-)
* 零向量返回0
* 非法输入返回nil
示例用法:
(xdrx-vector-quadrant '(1 1)) ; 二维第一象限
返回: 1
(xdrx-vector-quadrant '(0 -1 0) '(1 0 0)) ; 三维Y-方向
返回: 7
备注:
1. 判断逻辑:
- 二维:基于atan2计算角度划分
- 三维:投影到XY平面后判断
- 特殊角度精确匹配(0°,90°,180°等)
2. 特殊处理:
- 自动归一化输入向量
- 支持自定义参考坐标系
- 处理浮点精度容差(1e-6)
3. 应用场景:
- 空间方位分析
- 机械装配方向检测
- 三维模型的区域划分
------------------------------------------------------------
35
函数名称: vectorRotate
描述:
该函数用于旋转二维或三维向量。对于三维向量,可以指定旋转轴和旋转角度;对于二维向量,只需指定旋转角度。
调用格式:
(vectorRotate <vector> <angle> )
参数说明:
* `<vector>`: 要旋转的向量(二维点或三维点)
* `<angle>`: 旋转角度(弧度)
* ``: 可选参数,仅对三维向量有效,指定旋转轴(三维点)
返回值:
* 返回旋转后的向量(二维点或三维点)
示例用法:
(vectorRotate '(1 0 0) (/ pi 2) '(0 0 1))
返回: (0.0 1.0 0.0)
(vectorRotate '(1 0) (/ pi 2))
返回: (0.0 1.0)
------------------------------------------------------------
36
函数名称: xdrx-vector-rotateto
描述:
该函数用于计算将一个三维向量旋转到另一个三维向量的变换矩阵。它接受两个三维向量作为参数,返回表示该旋转变换的4x4矩阵。
调用格式:
(xdrx-vector-rotateto <source_vector> <target_vector>)
参数说明:
* `<source_vector>`: 原始三维向量(三维点)
* `<target_vector>`: 目标三维向量(三维点)
返回值:
* 返回一个4x4变换矩阵,表示从源向量旋转到目标向量的变换
示例用法:
(xdrx-vector-rotateto '(1 0 0) '(0 1 0))
返回: 表示将(1,0,0)旋转到(0,1,0)的变换矩阵
备注:
与vectorRotate的区别:
1. vectorRotate直接旋转向量,本函数返回变换矩阵
2. vectorRotate支持2D/3D,本函数仅支持3D
3. vectorRotate需要角度参数,本函数自动计算旋转量
------------------------------------------------------------
37
函数名称: xdrx-vector-transformby
函数别名: Function Alas: xdrx-vector-transform,xdrx-vector-settoproduct
描述:
该函数用于对二维或三维向量应用变换矩阵。它接受向量和变换矩阵作为参数,返回变换后的向量。支持自动处理2D/3D矩阵与向量的匹配转换。
调用格式:
(xdrx-vector-transformby <vectors> <matrix>)
参数说明:
* `<vectors>`: 要变换的向量或向量列表(二维点或三维点)
* `<matrix>`: 变换矩阵(2x2或4x4矩阵)
返回值:
* 返回变换后的向量或向量列表(与输入维度相同)
示例用法:
(xdrx-vector-transformby '(1 0 0) '((1 0 0 0)(0 1 0 0)(0 0 1 0)(0 0 0 1)))
返回: (1.0 0.0 0.0)
(xdrx-vector-transformby '((1 0)(0 1)) '((2 0)(0 2)))
返回: ((2.0 0.0) (0.0 2.0))
------------------------------------------------------------
38
函数名称: xdrx-vector-sub
描述:
该函数用于计算两个三维向量的差向量。它接受两个三维向量作为参数,返回第一个向量减去第二个向量的结果。
调用格式:
(xdrx-vector-sub <vector1> <vector2>)
参数说明:
* `<vector1>`: 第一个三维向量(三维点)
* `<vector2>`: 第二个三维向量(三维点)
返回值:
* 返回两个向量的差向量(三维点)
示例用法:
(xdrx-vector-sub '(5 5 5) '(1 2 3))
返回: (4.0 3.0 2.0)
------------------------------------------------------------
39
函数名称: xdrx-vector-viewxdirection
描述:
该函数用于获取当前视图的X方向向量。返回表示当前视图X轴方向的单位向量。
调用格式:
(xdrx-vector-viewxdirection)
参数说明:
* 无参数
返回值:
* 返回当前视图的X方向单位向量(三维点)
示例用法:
(xdrx-vector-viewxdirection)
返回: (1.0 0.0 0.0); 具体返回值取决于当前视图方向
------------------------------------------------------------
页:
[1]