GeometRi 库的主要目的是处理基本 几何基元,例如三维空间中的点、线、平面、球体、三角形: 平移和旋转运算、距离计算、交叉点、 一个物体到另一个物体的正交投影等。物体可以定义为 在全局或局部坐标系中并转换形成一个坐标 系统转变为另一个系统。
该库的构建尽可能简单直观。用户不必记住参考坐标 每个对象的系统。对象存储它们定义的坐标系和所有变换 必要时将会隐性地执行。
主要目标是代码的简单性和可读性,因此速度和稳健性不是优先考虑的。 全局容差属性用于接近度检查,而不是精确的稳健算法。
- 安装
- 示例
- 类
- Point3d
- Vector3d
- Line3d
- Ray3d
- Segment3d
- Plane3d
- 球体
- Circle3d
- 椭圆
- 椭圆体
- Box3d
- 三角形
- 四面体
- 凸多面体
- Coord3d
- Matrix3d
- 四元数
- 旋转
- GeometRi3D
使用 NuGet 安装库。在 NuGet 包管理器中搜索 GeometRi 或在包管理器控制台中输入:
Install-Package GeometRi
-
Point3d 和 Vector3d 是两个基类,分别表示三维空间中的点和向量。 Point3d 或 Vector3d 类型的对象可以在全局或局部坐标系中定义。
-
Line3d、Ray3d、Segment3d、Plane3d、Circle3d、Sphere、Ellipse、Ellipsoid、Box3d、Triangle 和 Tetrahedron 是复合类,根据点和向量定义。
-
Coord3d、Rotation、Quaternion 和 Matrix3d 是辅助类。
-
GeometRi3d 是一个抽象类,它定义了一些常见的功能,例如全局公差属性(GeometRi3d.Tolerance) 用于其他类的邻近操作。实现基于容差的相等方法:AlmostEqual(double, double)、NotEqual(double,double)、 大于(双精度,双精度)和小于(双精度,双精度)。
基类之一,可以由三个双精度数(X、Y 和 Z)或双精度数组构造。 每个构造函数都有可选参数“coord”,用于定义点的局部坐标系。 默认情况下,所有点都在全球坐标系中定义。
- X - 参考坐标系中的 X 坐标
- Y - 参考坐标系中的 Y 坐标
- Z - 参考坐标系中的 Z 坐标
- Coord - 参考坐标系
- ToVector - 点的半径向量
- Copy - 创建对象的副本
- ConvertTo - 将点转换为本地坐标系
- ConvertToGlobal - 将点转换为全局坐标系
- Add - 添加两个点
- Subtract - 从另一个点中减去一个点
- Scale - 按给定数字缩放点
- DistanceTo - 从点到其他物体的最短距离
- ClosestPoint - 圆、盒子、三角形、球体、椭圆、椭圆体、四面体上的最近点
- ProjectionTo - 点到线、平面或球体的正交投影
- BelongsTo - 测试点是否位于对象的 epsilon 邻域内
- IsInside - 测试点是否严格位于对象内部(不在边界的 epsilon 邻域内)
- IsOutside - 测试点是否位于对象的 epsilon 邻域之外
- IsOnBoundary - 测试点是否位于对象边界的 epsilon 邻域内
- Translate - 通过向量平移点
- Rotate - 围绕原点或其他点旋转点
- 反射 - 在点、线或面中反射点
- Equals - 检查两个点是否相等
- ToString - 全局或局部坐标系中点的字符串表示
- CollinearPoints - 检查三个点是否共线
- + - 添加两点
- - - 从另一点中减去一分
- - - 一元运算符
- * - 按数字缩放点
- / - 按数字缩放点
- = - 平等检查
- <> - 不平等检查
第二个基类,表示三维空间中的矢量。由三个分量(X、Y 和 Z)或双精度数组构成 (带有可选的 'coord' 参数用于本地坐标系)。此外,可以通过点构建, 表示该点的半径矢量,或者用两个点表示从第一点到另一点的矢量。在这种情况下 该向量将在与第一个操作数相同的坐标系中定义。
- X - 参考坐标系中的 X 分量
- Y - 参考坐标系中的 Y 分量
- Z - 参考坐标系中的 Z 分量
- Coord - 参考坐标系
- Norm - 向量范数
- ToPoint - 点,由从原点开始的向量表示
- OrthogonalVector - 返回任意向量,与当前向量正交
- Copy - 创建对象的副本
- ConvertTo - 将矢量转换为局部坐标系
- ConvertToGlobal - 将向量转换为全局坐标系
- Normalize - 标准化当前向量
- Normalized - 返回标准化向量
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Add - 重载,添加数字或向量
- Subtract - 重载,减去数字或向量
- Mult - 重载,乘以数字或向量
- Dot - 两个向量的点积
- ProjectionTo - 返回当前向量到第二个向量的投影
- Rotate - 围绕原点旋转矢量
- Reflect - 在点、线或平面中反射矢量
- Equals - 检查两个向量是否相等
- ToString - 全局或局部坐标系中矢量的字符串表示
三维空间中的无限线,由线上的任意点和方向向量定义。
- Point - 线的基点
- Direction - 线的方向向量
- Copy - 创建对象的副本
- DistanceTo - 到点、线、射线或线段的最短距离
- PerpendicularTo - 指向第二条线的垂直点
- IntersectionWith - 线与平面、椭圆体、椭圆、圆、三角形、线段或球体的交点
- ProjectionTo - 直线到平面的正交投影
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查线是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过向量翻译线
- Rotate - 围绕原点或其他点旋转线
- Reflect - 在点、线或平面中反射线
- Equals - 检查两行是否相等
- ToString - 全局或局部坐标系中线的字符串表示
表示三维空间中的射线,由起点和方向向量定义。
- Point - 射线基点
- Direction - 射线的方向向量
- ToLine - 将射线转换为线
- Copy - 创建对象的副本
- DistanceTo - 到点、线、线段或其他射线的最短距离
- PerpendicularTo - 垂直于线的点
- IntersectionWith - 射线与平面的交点
- ProjectionTo - 射线到平面的正交投影
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查射线是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过矢量平移射线
- Rotate - 围绕原点或其他点旋转射线
- 反射 - 在点、线或平面上反射射线
- Equals - 检查两条射线是否相等
- ToString - 全局或局部坐标系中射线的字符串表示
表示三维空间中的一条线段,由两个点定义。
- P1 - 线段的第一个点
- P2 - 线段的第二个点
- Length - 段的长度
- ToVector - 将线段转换为向量
- ToRay - 将线段转换为射线
- ToLine - 将段转换为线
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- DistanceTo - 到点、线、射线、平面或其他线段的最短距离
- IntersectionWith - 线段与线、平面、椭圆、三角形、椭圆体、球体、圆或其他线段的交点
- ProjectionTo - 线段到线或平面的正交投影
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查线段是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过向量翻译片段
- Rotate - 围绕原点或其他点旋转线段
- 反射 - 在点、线或平面中反射线段
- Equals - 检查两个段是否相等
- ToString - 全局或局部坐标系中字符串的表示形式
由平面上的任意点和法线向量定义的 3D 平面。 也可以通过平面一般方程(Ax + By + Cz + D = 0)中的系数来定义,通过三个点 或通过平面上的点和两个向量。
- Point - 平面上的点
- Normal - 平面的法线向量
- A/B/C/D - 一般平面方程中的系数 A、B、C 和 D
- Copy - 创建对象的副本
- SetCoord - 设置一般平面方程的参考坐标系
- IntersectionWith - 平面与线、平面、线段、球体、椭圆、椭圆体、圆或两个其他平面的交点
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查平面是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过矢量平移平面
- Rotate - 围绕原点或其他点旋转平面
- 反射 - 在点、线或平面中反射平面
- Equals - 检查两个平面是否相等
- ToString - 全局或局部坐标系中平面的字符串表示
定义三维空间中的球体。实现与线、平面和其他球体的相交、投影到线和平面,以及 常见的平移、旋转和反射方法。
- Center - 球体的中心
- R - 球体的半径
- Area - 球体的面积
- Volume - 球体的体积
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- IsInside - 检查球体是否位于盒子内部
- ClosestPoint - 球体表面上距离目标点最近的点
- DistanceTo - 到点、线、射线、线段、平面、圆、球体或盒子的最短距离
- Intersects - 与圆和四面体的相交检查
- IntersectionWith - 球面与线、平面、线段或其他球面的交点
- ProjectionTo - 球体到线或平面的正交投影
- Translate - 通过矢量平移球体
- Rotate - 围绕原点或其他点旋转球体
- Reflect - 在点、线或平面上反射球体
- Equals - 检查两个球体是否相等
- ToString - 全局或局部坐标系中球体的字符串表示
通过中心点、半径和法线向量在三维空间中定义一个圆。
- Center - 圆心
- R - 圆的半径
- Normal - 圆的法线
- Perimeter - 圆的周长
- Area - 圆的面积
- ToEllipse - 将圆转换为等效椭圆
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- IsInside - 检查圆是否位于盒子内部
- ClosestPoint - 圆表面上距离目标点最近的点
- ParametricForm - 返回给定参数“t”的圆上的点
- ProjectionTo - 圆到平面或线的正交投影
- DistanceTo - 到点、平面、圆、球体、盒子或三角形的最短距离
- Intersects - 与盒子、三角形、圆形和球体进行相交检查
- IntersectionWith - 圆与线、平面、线段或其他圆的交点
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查圆是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过矢量平移圆
- Rotate - 围绕原点或其他点旋转圆
- 反射 - 在点、线或平面上反射圆
- Equals - 检查两个圆是否相等
- ToString - 全局或局部坐标系中圆的字符串表示
三维空间中的椭圆,由中心点和两个正交向量(长半轴和短半轴)定义。
- Center - 椭圆的中心
- MajorSemiaxis - 椭圆的长半轴
- MinorSemiaxis - 椭圆的短半轴
- Normal - 椭圆的法线
- A - 长半轴的长度
- B - 短半轴的长度
- F - 从中心到焦点的距离
- F1 - 第一个焦点
- F2 - 第二焦点
- e - 椭圆的偏心率
- 周长 - 椭圆的近似周长
- Area - 椭圆的面积
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- ParametricForm - 返回给定参数“t”的椭圆上的点
- ProjectionTo - 椭圆到平面或线的正交投影
- IntersectionWith - 椭圆与线、平面或线段的交点
- ClosestPoint - 计算椭圆边界上距离给定点最近的点
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查椭圆是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过矢量平移椭圆
- Rotate - 围绕原点或其他点旋转椭圆
- 反射 - 在点、线或平面上反射椭圆
- Equals - 检查两个椭圆是否相等
- ToString - 全局或局部坐标系中椭圆的字符串表示
由中心点和三个相互正交的向量定义的椭圆体物体。
- Center - 椭圆体的中心
- SemiaxisA/B/C - 椭圆体的半轴
- A/B/C - 椭圆体半轴的长度
- Area - 椭圆体的近似表面积
- Volume - 椭圆体的体积
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- ProjectionTo - 椭圆体到线的正交投影
- IntersectionWith - 椭圆体与线、平面或线段的交点
- ClosestPoint - 计算椭圆体边界上距离给定点最近的点
- Translate - 通过矢量平移椭圆体
- Rotate - 围绕原点或其他点旋转椭圆体
- Reflect - 在点、线或平面上反射椭圆体
- Equals - 检查两个椭圆体是否相等
- ToString - 全局或局部坐标系中椭圆体的字符串表示
由中心点、三维尺寸和空间方向定义的盒子物体。
- Center - 盒子的中心点
- L1/L2/L3 - 盒子的尺寸
- V1/V2/V3 - 盒子的方向向量
- Orientation - 盒子方向
- P1/P2/P3/P4/P5/P6/P7/P8 - 盒子的角点
- ListOfPoints - 框的角点列表
- ListOfTriangles - 构成盒子表面的三角形列表
- ListOfPlanes - 构成盒子表面的平面列表
- ListOfEdges - 边列表
- Area - 盒子的面积
- Volume - 盒子的体积
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- IsAxisAligned - 检查框是否为 AABB
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- DistanceTo - 到点、圆或球的最短距离
- Intersects - 与盒子、圆形、四面体或三角形进行交点检查
- IntersectionWith - 框与线、射线或线段的交点
- Translate - 通过矢量翻译框
- Rotate - 围绕原点或其他点旋转盒子
- Reflect - 在点、线或平面上反射框
- Equals - 检查两个椭圆体是否相等
- ToString - 全局或局部坐标系中椭圆体的字符串表示
- AABB - 点云的轴对齐边界框
与轴对齐的 3D 框,可以退化为一个或多个等于 0 的维度。仅在 Global CS 中定义。
- Center - 盒子的中心点
- L1/L2/L3 - 盒子的尺寸
- V1/V2/V3 - 盒子的方向向量
- Orientation - 盒子方向
- P1/P2/P3/P4/P5/P6/P7/P8 - 盒子的角点
- ListOfPoints - 框的角点列表
- ListOfTriangles - 构成盒子表面的三角形列表
- ListOfPlanes - 构成盒子表面的平面列表
- ListOfEdges - 边列表
- Area - 盒子的面积
- Volume - 盒子的体积
- DistanceTo - 到点、圆或球的最短距离
- Intersects - 与盒子、圆形、四面体或三角形进行交点检查
- IntersectionWith - 框与线、射线或线段的交点
- Translate - 通过矢量翻译框
- Rotate - 围绕原点或其他点旋转盒子
- Reflect - 在点、线或平面上反射框
- Equals - 检查两个椭圆体是否相等
- ToString - 全局或局部坐标系中椭圆体的字符串表示
在三维空间中定义一个三角形。实现常见的平移、旋转和反射方法。计算大部分标准 三角形属性:角平分线、中线、高、内心、外心、重心、垂心等。
- A/B/C - 三角形的顶点
- AB/AC/BC - 三角形边的长度
- 周长 - 三角形的周长
- Area - 三角形的面积
- Circumcircle - 三角形的外接圆
- Angle_A/B/C - 顶点 A/B/C 处的角度
- Bisector_A/B/C - 顶点 A/B/C 处的角平分线
- 内心 - 三角形内心
- Centroid - 三角形的质心
- 垂心 - 三角形的垂心
- 外心 - 三角形的外心
- Incircle - 三角形的内切圆
- Altitude_A/B/C - 顶点 A/B/C 处的高度
- Median_A/B/C - 顶点 A/B/C 处的中位数
- IsEquilateral - 检查三角形的所有边是否长度相同
- IsIsosceles - 检查三角形的两条边是否长度相同
- IsScalene - 检查所有边是否不相等
- IsRight - 检查一个角度是否等于 90 度
- IsObtuse - 检查一个角度是否大于 90 度
- IsAcute - 检查所有角度是否小于 90 度
- MinimumBoundingBox - 对象的最小边界框
- BoundingSphere - 物体的边界球
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的轴对齐边界框 (AABB)
- DistanceTo - 到点、线段、三角形和圆的最短距离
- IntersectionWith - 三角形与线、平面、射线或线段的交点
- Intersects - 与三角形、盒子、四面体、球体或圆形进行交点检查
- ProjectionTo - 三角形到线的正交投影
- IsParallelTo - 检查两个物体是否平行
- IsNotParallelTo - 检查两个物体是否不平行
- IsOrthogonalTo - 检查两个对象是否正交
- IsCoplanarTo - 检查三角形是否与其他线性或平面物体共面
- AngleTo - 两个物体之间的角度
- AngleToDeg - 两个物体之间的角度(以度为单位)
- Translate - 通过向量平移三角形
- Rotate - 围绕原点或其他点旋转三角形
- 反射 - 在点、线或平面上反射三角形
- Equals - 检查两个三角形是否相等
- ToString - 全局或局部坐标系中三角形的字符串表示
在三维空间中定义一个四面体。实现常见的平移、旋转和反射方法。
- A/B/C/D - 四面体的顶点
- 中心 - 四面体的质心
- ListOfEdges - 边列表
- ListOfFaces - 面孔列表
- Area - 四面体的面积
- Volume - 四面体的体积
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的边界框
- AABB - 轴对齐边界框 (AABB)
- DistanceTo - 到点和四面体的最短距离
- ClosestPoint - 计算四面体边界上距离给定点最近的点
- Intersects - 与三角形、四面体、直线、射线、线段、盒子和球体进行相交检查
- IsInside - 检查物体是否位于给定的框内
- Translate - 通过矢量平移四面体
- Rotate - 围绕原点或其他点旋转四面体
- 反射 - 在点、线或平面上反射四面体
- Scale - 比例四面体
- Equals - 检查两个四面体是否相等
- ToString - 全局或局部坐标系中四面体的字符串表示
在 3D 空间中定义一个凸多面体,其面沿逆时针方向(从外部看)。
- 中心 - 多面体的质心
- ListOfEdges - 边列表
- Area - 多面体的面积
- Volume - 多面体的体积
- Copy - 创建对象的副本
- BoundingBox - 给定坐标系中的边界框
- AABB - 轴对齐边界框 (AABB)
- DistanceTo - 到点、三角形和多面体的最短距离
- Intersects - 与多面体和盒子进行相交检查
- IsInside - 检查物体是否位于给定的框内
- Translate - 通过向量平移多面体
- Rotate - 围绕原点或其他点旋转多面体
- Scale - 比例多面体
- FromTetrahedron - 从 Tetrahedron 对象创建 ConvexPolyhedron 对象
- FromBox - 从 Box3d 对象创建 ConvexPolyhedron 对象
- Octahedron - 创建以原点为中心的正八面体
- 二十面体 - 创建以原点为中心的正二十面体
- Dodecahedron - 创建以原点为中心的正十二面体
表示正交笛卡尔三维坐标系的类。由原点和变换矩阵定义 (以行格式存储的三个正交单位向量)。默认定义一个全局坐标系(Coord3d.GlobalCS), 用户可以定义任意数量的局部坐标系。
- Origin - 坐标系的原点
- Axes - 轴的单位向量,存储为行矩阵(3x3)
- Name - 坐标系的名称
- Counts - 定义的坐标系总数
- X/Y/Zaxis - 坐标系的 X/Y/Z 轴
- XY/XZ/YZ_plane - 坐标系的平面
- Copy - 创建对象的副本
- Rotate/RotateDeg - 绕旋转轴旋转坐标系
- Equals - 检查两个坐标系是否相等
- ToString - 坐标系的字符串表示
- Item(i,j) - 矩阵元素
- Row1/2/3 - 矩阵的行
- Column1/2/3 - 矩阵的列
- Det - 矩阵的行列式
- MaxNorm - 矩阵的最大范数
- IsZero - 检查矩阵是否为零矩阵
- IsIdentity - 检查矩阵是否为单位矩阵
- IsOrthogonal - 检查矩阵是否正交
- Inverse - 矩阵的逆
- Transpose - 矩阵的转置
- RotationMatrix - 围绕给定轴旋转
- Equals - 检查两个矩阵是否相等
- ToString - 矩阵的字符串表示
- Identity - 创建新的单位矩阵
- DiagonalMatrix - 创建对角矩阵
单位四元数 (W + Xi + Yj + Z*k)
- W/X/Y/Z - 参考坐标系中的四元数分量
- Coord - 参考坐标系
- Norm - 四元数的范数
- SquareNorm - 四元数范数的平方
- Conjugate - 四元数的共轭
- ToAxis - 参考坐标系中的旋转轴
- ToAngle - 参考坐标系中的旋转角度
- Normalized - 返回标准化四元数
- Copy - 创建对象的副本
- ConvertTo - 将四元数转换为局部坐标系
- ConvertToGlobal - 将四元数转换为全局坐标系
- Normalize - 标准化当前四元数
- Add/Subtract/Mult - 算术运算
- Scale - 按数字缩放四元数
- Inverse - 逆四元数
- ToRotationMatrix - 转换为旋转矩阵
- Equals - 检查两个四元数是否相等
- ToString - 全局或局部坐标系中四元数的字符串表示
- SLERP - 两个四元数的球面线性插值
在全局或局部参考系中定义的 3D 空间中的旋转(内部由旋转矩阵表示)
- Coord - 参考坐标系
- ToAxis - 参考坐标系中的旋转轴
- ToAngle - 参考坐标系中的旋转角度
- ToRotationMatrix - 旋转矩阵
- ToQuaternion - 转换为四元数
- Copy - 创建对象的副本
- ConvertTo - 将旋转转换为局部坐标系
- ConvertToGlobal - 将旋转转换为全局坐标系
- Mult - 对点或矢量应用旋转
- ToEulerAngles - 将旋转矩阵分解为三个元素旋转的乘积
- Equals - 检查两个旋转是否相等
- ToString - 全局或局部坐标系中旋转的字符串表示
- FromEulerAngles - 根据欧拉角或 Tait-Bryan 角创建旋转对象
- SLERP - 两个旋转的球面线性插值
- Tolerance - 用于比较操作的容差(默认 1e-12)
- AlmostEqual - 基于容差的平等检查
- NotEqual - 基于容差的不平等检查
- Greater - 基于公差的比较
- Smaller - 基于公差的比较