26 KiB
PySSMath 模块提供了丰富的数学计算功能,专为 GIS 和测绘应用设计。该模块通过 SWIG 封装底层 C++ 实现,提供高性能的几何计算、坐标转换、空间关系判断等核心算法库。本文档面向高级开发者,详细说明各类数学计算工具的 API 接口与应用场景。
Sources: PySSMath.py
模块架构概览
PySSMath 模块采用分层架构设计,将数学计算功能划分为多个功能域。底层通过 _PySSMath.pyd C++ 扩展模块实现高效计算,上层 Python 接口提供类型安全的函数调用。
graph TB
A[PySSMath 模块] --> B[坐标系统转换]
A --> C[距离与长度计算]
A --> D[面积计算]
A --> E[角度与方位角]
A --> F[几何变换]
A --> G[空间关系判断]
A --> H[弧线与圆操作]
A --> I[点与线操作]
B --> B1[deg/radian/dms转换]
C --> C1[点距离/线长度]
D --> D1[多边形面积/三角形面积]
E --> E1[方位角/夹角/方向]
F --> F1[旋转/偏移/缩放/镜像]
G --> G1[相交/包含/共线]
H --> H1[弧长/中点/打断]
I --> I1[插入/延伸/修剪]
A --> J[基础数据结构]
J --> J1[Point3D]
J --> J2[Vec3d]
J --> J3[POINT3DLIST]
J --> J4[LINE3DLIST]
Sources: PySSMath.py
基础数据结构
Point3D - 三维点类
Point3D 是模块的核心数据结构,表示三维空间中的点,支持 x、y、z 坐标访问和丰富的运算符重载。
构造方法:
Point3D()- 默认构造函数Point3D(x, y, z)- 使用坐标构造Point3D(other)- 拷贝构造
核心属性与方法:
x(),y(),z()- 获取坐标分量set(x_arg, y_arg, z_arg)- 设置坐标__getitem__(i)/__setitem__(i, value)- 索引访问坐标(0=x, 1=y, 2=z)__add__,__sub__,__neg__- 向量运算epsilonEqual(other, epsilon)- 带容差的相等判断getName(),setName(name)- 点名称管理
Sources: PySSMath.py
Vec3d - 三维向量类
Vec3d 提供完整的向量运算功能,包括点积、叉积、缩放等操作。
构造方法:
Vec3d()- 默认构造Vec3d(x, y, z)- 使用分量构造Vec3d(other)- 拷贝构造
核心方法:
dot(rhs)- 点积运算cross(rhs)- 叉积运算__mul__,__truediv__- 标量乘除set(x_arg, y_arg, z_arg)- 设置分量epsilonEqual(other, epsilon)- 带容差的相等判断
Sources: PySSMath.py
容器类
模块提供多种容器类用于管理点的集合:
POINT3DLIST- 点列表容器LINE3DLIST- 线列表容器LOOP3DLIST- 环列表容器(支持带岛复杂面)StringArray- 字符串数组容器
这些容器均支持迭代器模式,提供 size(), empty(), clear(), push_back() 等标准容器操作。
Sources: PySSMath.py
坐标系统转换
角度格式转换
PySSMath 提供多种角度表示形式之间的转换功能,支持弧度制、十进制度数、度分秒(DMS)格式互转。
| 函数名 | 功能描述 | 参数 | 返回值 |
|---|---|---|---|
degToRadian(deg) |
十进制度数转弧度 | deg: float | 弧度值 |
radianToDeg(dRadian) |
弧度转十进制度数 | dRadian: float | 度数值 |
degToDms(deg) |
十进制度数转度分秒 | deg: float | DMS 值 |
dmsToDeg(dms) |
度分秒转十进制度数 | dms: float | 度数值 |
dmsToRadian(dDms) |
度分秒转弧度 | dDms: float | 弧度值 |
radianToDms(dRadian) |
弧度转度分秒 | dRadian: float | DMS 值 |
dmsToSec(dms) |
度分秒转秒数 | dms: float | 秒数 |
secToDms(sec) |
秒数转度分秒 | sec: float | DMS 值 |
角度调整函数:
adjustAngle(dRadian)- 调整弧度值到 [-π, π] 范围adjustDmsAngle(dAngle)- 调整 DMS 角度值adjustDegAngle(dAngle)- 调整度数值到 [0, 360] 范围
Sources: PySSMath.py
极坐标与直角坐标转换
| 函数名 | 功能描述 |
|---|---|
rightToPolar(x, y) |
直角坐标转极坐标 |
polarToRight(r, angle) |
极坐标转直角坐标 |
getPolar(p1, p2, dist, dRadian) |
从点 p1 按给定距离和方位角获取极坐标点 |
getPoint(p1, p2, dist, dRadian) - 同 getPolar |
Sources: PySSMath.py
距离与长度计算
点与点距离
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
distance(p1, p2) |
两点间二维距离(仅 xy) | float |
distance3d(p1, p2) |
两点间三维距离 | float |
getDistSquare(p1, p2) |
两点间距离的平方 | float |
get3dDistSquare(p1, p2) |
两点间三维距离的平方 | float |
Sources: PySSMath.py
点到线距离
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
getDistPtToLine(p, p1, p2) |
点到线段的距离 | float |
distPerpend(p0, p1, p2, pResPerpend, pResRelation) |
点到线的垂距 | float |
distParallel(p0, p1, p2) |
点到线的平行距 | float |
Sources: PySSMath.py
线段长度
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
getLinesSumlen(pList) |
点列表构成线段的总长度(2D) | float |
getLinesSumlen3d(pList) |
点列表构成线段的总长度(3D) | float |
getSumlen(pList, nLineType, mapScale) |
获取长度(支持线型类型和比例尺) | float |
get3DLength(*args) |
获取三维长度 | float |
Sources: PySSMath.py
高级距离查询
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
getNearDist(p0, pList, nOrder) |
获取第 nOrder 近的距离 | float |
getNearstDistSquare(sp, Points, pNodeIndex, pSideIndex, pDirFlag, ptNearstOnline) |
获取最近距离平方(附带详细信息) | float |
getDistForPoint(p, pList) |
点到点列表中某点的距离 | float |
getDistDir(p, pList, irec, flag) |
获取距离和方向 | float |
Sources: PySSMath.py
面积计算
多边形面积
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
getPolyArea(points, bHaveSgin) |
计算多边形面积 | points: 点列表;bHaveSgin: 是否保留符号(正为逆时针) |
calTriHeight(a, b, c) |
计算三角形高 | a, b, c: 三角形三边长 |
Sources: PySSMath.py
三角形面积
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
get3DArea(sp0, sp1, sp2) |
计算三点构成的三角形面积 | float |
get3DAreaInDirection(direP, sp0, sp1, sp2) |
计算指定方向下的三角形面积 | float |
Sources: PySSMath.py
角度与方位角计算
方位角计算
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
bearing(x1, y1, x0, y0) |
计算从 (x0, y0) 到 (x1, y1) 的方位角 | 弧度值 |
bearing(p0, p1) - 重载形式,使用 Point3D 对象 |
||
jiaoPingfenFangWei(x1, y1, x0, y0, x2, y2) |
计算两线段的夹角平分方位角 | 弧度值 |
Sources: PySSMath.py
夹角计算
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
openAngle(p1, p0, p2) |
计算 ∠p1p0p2 的夹角 | 弧度值 |
openAngleDeg(p1, p0, p2) |
计算 ∠p1p0p2 的夹角(度数) | 度数 |
Sources: PySSMath.py
方向计算
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
get3Direction(p0, p1) |
获取三维空间方向向量 | Vec3d |
getDirection(sp, sp1, sp2) |
获取方向 | int |
Sources: PySSMath.py
几何变换操作
二维/三维变换
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
rotate2DList(Points, angle, basePoint) |
二维点集旋转 | angle: 旋转角;basePoint: 旋转基点 |
rotate3DList(*args) |
三维点集旋转 | 支持多种参数形式 |
offset2DList(Points, dx, dy) |
二维点集平移 | dx, dy: 平移量 |
offset3DList(*args) |
三维点集偏移 | 支持多种参数形式 |
zoom3DList(*args) |
三维点集缩放 | 支持缩放中心 |
mirror3DList(baseP0, baseP1, Ps) |
三维点集镜像 | baseP0, baseP1: 镜像轴上的两点;Ps: 点集 |
extend3DList(Points, dist, bTail) |
点集延伸 | dist: 延伸距离;bTail: true=尾部延伸,false=头部延伸 |
smooth3DList(Ps0, fScale, nFlag) |
点集平滑 | fScale: 平滑系数;nFlag: 平滑方式 |
mapping3DList(Points, ctrlPoints_old, ctrlPoints_new) |
点集映射变换 | 基于控制点的仿射变换 |
Sources: PySSMath.py
系统坐标旋转
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
sysRotate(Xold, Yold, Xnew, Ynew, X0, Y0, dRadian) |
系统旋转 | 将旧坐标系旋转至新坐标系 |
grdbodyRotate(*args) |
网格体旋转 | 支持多种参数形式 |
Sources: PySSMath.py
几何关系判断
点与点关系
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
isSamePoint(p0, p1, epsilon) |
判断两点是否相同(仅 xy) | boolean |
isSame3dPoint(p0, p1, epsilon) |
判断两点是否相同(xyz) | boolean |
isSameCoord(*args) |
判断坐标是否相同 | boolean |
Sources: PySSMath.py
点与线关系
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
isPointOnLine(sp, sp1, sp2, dbLimit) |
判断点是否在线段上 | boolean |
pointOnLine(*args) |
点在线上判断(重载) | boolean |
getOnLinePosition(sp, sp1, sp2, dbLimit) |
获取点在线段上的位置 | float |
Sources: PySSMath.py
点与多边形关系
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
ptInPoly(x, y, pPolygon, limit) |
判断点是否在多边形内 | boolean |
ptInTriangle(x, y, x1, y1, x2, y2, x3, y3) |
判断点是否在三角形内 | boolean |
isPointListInPoly(*args) |
判断点集是否在多边形内 | boolean |
Sources: PySSMath.py
线与线关系
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
isLineCrossLine(sp1, sp2, sp3, sp4) |
判断两线段是否相交 | boolean |
isLineCrossLines(sp1, sp2, Ps) |
判断线段与多段线是否相交 | boolean |
getCrossPoint(*args) |
获取线段交点 | Point3D |
lineCrossLine(Line, Line1, newLine, pattr) - 线段相交处理 |
||
lineCrossLines(*args) - 线段与多段线相交处理 |
Sources: PySSMath.py
多边形与多边形关系
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
isPolygonInPolygon(rl, line, limit) |
判断多边形是否在另一多边形内 | boolean |
isPolygonInPolygonComplex(polygon1, polygon2, limit) |
判断复杂多边形关系(支持带岛) | int |
复杂多边形关系返回值:
0- 不相关1- polygon1 包含 polygon22- polygon2 包含 polygon13- 相交
Sources: PySSMath.py
其他几何关系
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
isClose(Ps) |
判断点列是否闭合 | boolean |
isClockwise(Rgn) |
判断多边形是否为顺时针 | boolean |
isCross(P0, P1, Ps, nAvoidPoint) |
判断线段与点列是否相交 | boolean |
isSamePointList(Ps1, Ps2, dbLimit, bCompareName, bCompateType, bCompareZ) |
判断两点集是否相同 | boolean |
Sources: PySSMath.py
弧线与圆操作
弧长计算
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
arc3pLength(spCenter, dbRadius, PsArc) |
计算三点圆弧长度 | spCenter: 圆心;dbRadius: 半径;PsArc: 弧上三点 |
getArcLength(spCenter, dbRadius, bClockwise, sp1, sp2) |
计算弧长 | sp1, sp2: 弧的起点和终点;bClockwise: 是否顺时针 |
Sources: PySSMath.py
弧线属性判断
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
isArcClockwise(PsArc, pCenter, pRadius) |
判断弧线是否为顺时针 | boolean |
isPointOnArc(sp, PsArc, miniDist, pCenter, pRadius, nArc1, nArc2, bAdjustCoord) |
判断点是否在弧上 | boolean |
Sources: PySSMath.py
弧线中点
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
getArcMidPoint(spCenter, dbRadius, bClockwise, sp1, sp2) |
获取弧线中点 | Point3D |
getSupplementaryArc(PsArcIn, PsArcOut) |
获取补弧 | boolean |
Sources: PySSMath.py
弧线打断与插入
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
arcBreakByPoint(PsArc, PsBreak, newArcList) |
用点集打断弧线 | newArcList: 输出的弧线列表 |
circleBreakByPoint(PsCir, PsCross, newArcList) |
用点集打断圆 | newArcList: 输出的弧线列表 |
insertPointToArc(sp, ArcPoints, miniDist) |
在弧线上插入点 | miniDist: 最小距离限差 |
insertPointToPLineArc(sp, nLineType, PsLine, miniDist) - 在折线弧上插入点 |
||
adjustPointToPLineArc(sp, nLineType, PsLine, pRefPoint) - 调整点到折线弧上 |
Sources: PySSMath.py
极坐标弧生成
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
xysa_Arc(spCenter, dbRadius, bClockwise, sp1, sp2, dbArcLen, nFlag, pAngle) |
极坐标法生成弧点 | dbArcLen: 弧长;nFlag: 标志;pAngle: 输出角度 |
Sources: PySSMath.py
点与线操作
点插入与延伸
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
innerInsertPoint(sp1, sp2, dbDist, Ps) |
在两点之间插入点 | dbDist: 距离;Ps: 输出点集 |
getInsertPoint(Ps, dbInterv) |
按间隔插入点 | dbInterv: 间隔距离 |
getIntervPoint(Ps, dbInterv, pIndexs) - 获取间隔点(附带索引) |
||
getlinesIntervP(pList, ResList, dInterv, dZongChang) - 按总长和间隔获取点 |
||
innerInsertCor(Begin, End, nCount, PointList) - 在两点间插入 nCount 个点 |
||
extend3DList_Done(Points, dbDist, bTail) - 延伸点集 |
Sources: PySSMath.py
点修剪与去重
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
removeSameCoordPoint(*args) - 移除相同坐标点 |
||
removeRepeatPoint(Ps, dbLimit) - 移除重复点 |
dbLimit: 限差 | |
getRepeatPoint(Ps, nRepeats, dbLimit) - 获取重复点 |
nRepeats: 重复次数 |
Sources: PySSMath.py
线段打断
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
lineBreakByPoint(Lines, nAttrs, CrossList, newLines, bIsPLine) - 用点集打断线段 |
||
plineSplit(PsPLine, nLineType, LineList, nAttrs, bClearPointType) - 拆分多段线 |
||
plineMerge(*args) - 合并多段线 |
||
arcSplit(PsArc, LineList, nAttrs) - 打断弧线 |
Sources: PySSMath.py
中点与垂足
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
midPoint(*args) - 获取中点 |
Point3D | |
calPoint(*args) - 计算点位置 |
Point3D | |
getLineMidPoint(sp, Ps, pInsertAt) - 获取线段中点 |
Point3D | |
perpend(p, p1, p2) - 计算垂足 |
Point3D | |
perpendLize(p0, p1, p2) - 垂直化操作 |
Point3D |
Sources: PySSMath.py
高程插值
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
altitudeInterpolation(sp, sp1, sp2) - 高程插值 |
float | |
interpolationPoint(sp1, sp2, dbZ, sp) - 按高程插值点 |
Point3D | |
insertZValue(sp, sp0, sp1) - 插入 Z 值 |
Point3D |
Sources: PySSMath.py
高级几何操作
平行线生成
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
parallel(PListFrom, PListTo, dWidth, nDir, nLineType, nSharpAngleTrimType, truncations) - 生成平行线 |
dWidth: 宽度;nDir: 方向;nSharpAngleTrimType: 尖角处理方式(0=不处理,1=平头,2=圆头);truncations: 是否截断 |
Sources: PySSMath.py
曲线生成
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
arcToPoints(pListFrom, pl, gscale) - 弧线转点集 |
gscale: 缩放比例 | |
circleToPoints(pListFrom, pl, gscale) - 圆转点集 |
gscale: 缩放比例 | |
freeCurve(pList, pListRes, gscale) - 自由曲线生成 |
gscale: 缩放比例 | |
dzlyt(pList, pListRes, gscale) - 等值线生成 |
gscale: 缩放比例 | |
zlyt(Points, sgm, scale) - 张力样条曲线 |
sgm: 张力系数 |
Sources: PySSMath.py
椭圆操作
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
createEllipse(*args) - 创建椭圆点集 |
||
createEllipseArc(*args) - 创建椭圆弧点集 |
Sources: PySSMath.py
线型重建
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
gotoBeeline(srcPoints, nLineType, ArcInfoList, pResPoints) - 转为直线 |
ArcInfoList: 弧信息列表 | |
polylineRebuild(srcPoints, nLineType, ArcInfoList, pResPoints) - 重建多段线 |
||
gotoPoints(pList, lin_sty, pListRes, gscale, bMarkType, bForCalArea) - 线型转换点集生成 |
lin_sty: 线型;bForCalArea: 是否用于计算面积 |
Sources: PySSMath.py
矩形与边界操作
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
getLineRect(sp1, sp2, rect) - 获取线段包围盒 |
boolean | |
getPolyRectFromPointList(points) - 获取点集的多边形包围盒 |
POINT3DLIST | |
getPolyRectFromStructList(points) - 获取结构点集的多边形包围盒 |
POINT3DLIST | |
getMinimumRectangle(Polygon, PsRect) - 获取最小外接矩形 |
boolean | |
isLineOutOfRect(rect, sp1, sp2) - 判断线段是否在矩形外 |
boolean | |
isRectCrossLine(rect, sp1, sp2) - 判断矩形与线段是否相交 |
boolean | |
isRectCrossPolygon(rect, rgnPoints) - 判断矩形与多边形是否相交 |
boolean |
Sources: PySSMath.py
点集排序
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
sortByValue(Ps, arKeys, bAscending) - 按键值排序点集 |
arKeys: 键值数组;bAscending: 是否升序 |
Sources: PySSMath.py
辅助计算工具
数值精度处理
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
fRounding(dbData, nDecimal) - 数值四舍五入 |
nDecimal: 小数位数 |
Sources: PySSMath.py
法向量计算
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
calculateNormal(*args) - 计算法向量 |
Vec3d |
Sources: PySSMath.py
线段交点
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
getLineIntersect(p1, p2, pList, resP) - 获取线段与点列表的交点 |
resP: 输出交点 |
Sources: PySSMath.py
三角形计算
| 函数名 | 功能描述 | 返回值 |
|---|---|---|
calTriHeight(a, b, c) - 计算三角形边 a 对应的高 |
float |
Sources: PySSMath.py
多边形焦点
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
getPolygonFocus(_Point, rlPolygon, pClipRgn, bWidthPreference) - 获取多边形内焦点 |
_Point: 输出焦点;rlPolygon: 多边形点列;pClipRgn: 裁剪区域;bWidthPreference: 宽度优先标志 | float: 返回值 |
Sources: PySSMath.py
常用常量
模块定义了多个数学常量和枚举常量:
数学常量:
PI- 圆周率 πPI_2- π/2PI_4- π/4ZERO_FLOAT- 零浮点数阈值MIN_FLOAT/MAX_FLOAT- 最小/最大浮点数MINI_COORDINATE- 最小坐标限差MINI_FLOAT/MINI_DOUBLE- 最小浮点数/双精度限差
方向常量:
_LEFT/_RIGHT/_TOP/_BOTTOM- 方向标识e_East/e_North/e_West/e_South- 东西北南_CLOCKWISE/_ANTICLOCK- 顺时针/逆时针
点在多边形关系:
_IN_POLY- 点在多边形内_OUT_POLY- 点在多边形外_CLIP_POLY- 点在裁剪多边形边界
线型标识:
e_LS_Null/e_LS_Polyline/e_LS_PWline/e_LS_PolyArea
Sources: PySSMath.py
应用示例
基础距离与面积计算
import PySSMath
# 创建三维点
p1 = PySSMath.Point3D(100, 200, 0)
p2 = PySSMath.Point3D(150, 250, 50)
# 计算距离
dist_2d = PySSMath.distance(p1, p2)
dist_3d = PySSMath.distance3d(p1, p2)
# 创建多边形点集
polygon = PySSMath.POINT3DLIST()
polygon.push_back(PySSMath.Point3D(0, 0, 0))
polygon.push_back(PySSMath.Point3D(100, 0, 0))
polygon.push_back(PySSMath.Point3D(100, 100, 0))
polygon.push_back(PySSMath.Point3D(0, 100, 0))
# 计算面积
area = PySSMath.getPolyArea(polygon)
Sources: PySSMath.py
坐标转换与角度计算
import PySSMath
# 角度格式转换
deg = 45.5
rad = PySSMath.degToRadian(deg)
dms = PySSMath.degToDms(deg)
# 计算方位角
azimuth = PySSMath.bearing(100, 200, 0, 0)
# 计算夹角
p_center = PySSMath.Point3D(100, 100, 0)
p1 = PySSMath.Point3D(150, 100, 0)
p2 = PySSMath.Point3D(100, 150, 0)
angle_rad = PySSMath.openAngle(p1, p_center, p2)
angle_deg = PySSMath.openAngleDeg(p1, p_center, p2)
Sources: PySSMath.py
几何变换操作
import PySSMath
# 创建点集
points = PySSMath.POINT3DLIST()
for i in range(5):
points.push_back(PySSMath.Point3D(i * 10, i * 20, 0))
# 旋转 30 度
base_point = PySSMath.Point3D(0, 0, 0)
angle = PySSMath.degToRadian(30)
rotated = PySSMath.rotate2DList(points, angle, base_point)
# 平移
offset_x, offset_y = 50, 50
offset_points = PySSMath.offset2DList(points, offset_x, offset_y)
# 镜像
mirror_p0 = PySSMath.Point3D(0, 0, 0)
mirror_p1 = PySSMath.Point3D(100, 100, 0)
mirrored = PySSMath.mirror3DList(mirror_p0, mirror_p1, points)
Sources: PySSMath.py
空间关系判断
import PySSMath
# 判断点是否在多边形内
test_point = PySSMath.Point3D(50, 50, 0)
is_inside = PySSMath.ptInPoly(test_point.x(), test_point.y(), polygon, 0.001)
# 判断线段是否相交
line1_p1 = PySSMath.Point3D(0, 0, 0)
line1_p2 = PySSMath.Point3D(100, 100, 0)
line2_p1 = PySSMath.Point3D(0, 100, 0)
line2_p2 = PySSMath.Point3D(100, 0, 0)
is_cross = PySSMath.isLineCrossLine(line1_p1, line1_p2, line2_p1, line2_p2)
# 获取交点
cross_point = PySSMath.Point3D()
has_cross = PySSMath.getCrossPoint(line1_p1, line1_p2, line2_p1, line2_p2, cross_point)
Sources: PySSMath.py
点线操作
import PySSMath
# 在两点之间插入点
p_start = PySSMath.Point3D(0, 0, 0)
p_end = PySSMath.Point3D(100, 100, 0)
inserted_points = PySSMath.POINT3DLIST()
distance = 25 # 每 25 个单位插入一个点
PySSMath.innerInsertPoint(p_start, p_end, distance, inserted_points)
# 延伸线段
points_to_extend = PySSMath.POINT3DLIST()
# ... 添加点 ...
extended_points = PySSMath.extend3DList(points_to_extend, 10, True) # 尾部延伸 10 个单位
# 计算中点
midpoint = PySSMath.midPoint(p_start, p_end)
# 计算垂足
test_point = PySSMath.Point3D(50, 20, 0)
foot_point = PySSMath.perpend(test_point, p_start, p_end)
Sources: PySSMath.py
API 快速索引表
按功能分类
| 功能分类 | 关键函数 |
|---|---|
| 坐标转换 | degToRadian, radianToDeg, dmsToDeg, degToDms, rightToPolar, polarToRight |
| 距离计算 | distance, distance3d, getDistSquare, getDistPtToLine, getNearstDistSquare |
| 面积计算 | getPolyArea, get3DArea, get3DAreaInDirection, calTriHeight |
| 角度计算 | bearing, openAngle, openAngleDeg, jiaoPingfenFangWei, getDirection |
| 几何变换 | rotate2DList, rotate3DList, offset2DList, offset3DList, zoom3DList, mirror3DList, smooth3DList |
| 点操作 | midPoint, calPoint, extend3DList, innerInsertPoint, removeRepeatPoint |
| 线操作 | getLinesSumlen, getLinesSumlen3d, parallel, lineBreakByPoint, plineSplit |
| 弧操作 | arc3pLength, getArcLength, getArcMidPoint, isArcClockwise, arcBreakByPoint |
| 关系判断 | isSamePoint, isPointOnLine, ptInPoly, isLineCrossLine, isPolygonInPolygonComplex |
| 辅助工具 | fRounding, calculateNormal, getMinimumRectangle, sortByValue |
Sources: PySSMath.py
性能优化建议
-
批量操作优先:对于大量点集的操作,优先使用
POINT3DLIST容器和批量处理函数(如rotate3DList),避免逐点循环。 -
合理使用限差参数:在关系判断函数中(如
isSamePoint,ptInPoly),根据数据精度合理设置epsilon或limit参数,避免浮点数精度问题。 -
避免重复计算:对于需要多次使用的结果(如距离、面积),缓存中间结果而非重复计算。
-
使用距离平方:在仅需比较距离大小的场景下,使用
getDistSquare而非distance,避免开方运算开销。
Sources: PySSMath.py
进阶主题
复杂多边形处理
对于带岛(洞)的复杂多边形,使用 isPolygonInPolygonComplex 函数判断多边形间关系。该函数支持嵌套多边形结构,返回详细的关系标识(包含、相交、独立等)。
弧线重建与识别
使用 gotoBeeline 和 polylineRebuild 函数可以将拟合的弧线转换为直线段,或将直线段识别为弧线结构,配合 ArcInfoList 输出弧线参数信息。
高级几何变换
mapping3DList 函数支持基于控制点的仿射变换,可实现不规则的空间映射,适用于校正变形数据。
Sources: PySSMath.py