@expofp/geometry

中文文档
3.49.2发布于 2026/11/14MITTypeScriptES Module近 30 天下载 9273

ExpoFP SDK 内部:共享几何原始

中文使用文档
文档目录10 节
  1. 初级
  2. 设计决定
  3. 2.5D: 二维形状+高地, 1 三维 Mesh
  4. 默认不可变, 与 set 变异器
  5. 通过 a 的 Opt-in 突变 target 参数
  6. 类 + 自由函数( 二重性)
  7. 一次定义的变形/ 并列逻辑( E) Polygon 重复使用 Mesh (中文(简体) )
  8. 结构输入类型
  9. 品牌代替 instanceof
  10. 地理( geo (中文(简体) )

@ expofp/ 几何

零依赖性 2.5D (韩语) expoFP SDK的几何原始: Point, (中文(简体) ), Line, (中文(简体) ), Box, (中文(简体) ), Rect, (中文(简体) ), Polygon, (中文(简体) ), Mesh,加上它们身上的自由函数。 没有运行时间依赖关系( 甚至没有) three) (中文(简体) ).

"2.5D" (英语) 表示: 三维 Point 矢量,但是 形状由 2D 定位于 3D elevation ——平地形状为给定高地. 所有空间数学(距离、角度、面积、限制、, )在 xy 飞机· ; elevation 定位形状和相交点 (见《协调公约》)。 一个真正的3D形状是 Mesh (一个三角网,它的顶点承载着) 真实 z),用于非平面的渲染器几何.

初级

类型这是什么
Point可变的 三维向量 (N)x, (中文(简体) ), y, (中文(简体) ), z) (中文(简体) ). width编号 :height 别名 x编号 :y 所以一个点可以加倍的大小。 低层建筑挡住形状.
Line二者之间的一段 二维 点数 (p0, (中文(简体) ), p1单人 elevation (默认为0).
Box一个 轴向对齐 矩形(分/最大角,缓存中心/大小). 2D级, 无限用z (无高地)——用于边框和屏幕尺寸. A 类 Box 结构满足 RectLike所以,任何需要一个 RectLike 接受一个 Box (无旋转的无高直径,在任何高地相交).
Rect一个矩形 可能旋转: 中间+大小+ rotation + 键 elevation (两者均为默认 0). 在给定高地上面向长方形.
PolygonA 类 平面图 三角多边形: 2D vertices + 三角形 indices +一个 elevation,带有缓存边框 Box已经 containsPoint编号 :area (因地平而定义良好). 使用命令环来建造一个对流 Polygon.fromConvexRing。 。 。 .
MeshA 类 三维 三角网: 三维 vertices + 键 indices,带有缓存 (xy) 边界 Box. 仅变革 -- -- 没有 containsPoint编号 :area (未定义为非平面网格). 对于不平坦的渲染器几何.

Shape = Box | Rect | Polygon | Mesh歧视 is* 品牌字段并随着导出而缩小 警卫 isBox 编号 : isRect 编号 : isPolygon 编号 : isMesh。 。 。 .

坐标公约: x 左起-右起-, y 增加上-下(屏幕,y-下)。 旋转 进入 弧度,正 = 顺时针制服在每一个原始人和助手身上Rect, (中文(简体) ), Polygon, (中文(简体) ), Mesh,则 point*编号 :line* 角度函数). elevation (和 Point.z飞机外高; 积极是向观众. 空间操作在 xy 平面中计算 距离,角度, 区域,以及 containsPoint 忽略 z编号 :elevation。 。 。 . 交叉 测试(lineIntersection, (中文(简体) ), intersectLineRect比较 elevation 仅在 两者 操作定义它( 一个 undefined 高度 - (单位:千美元) Box,或者一个赤裸的 LineLike ——指"任何高度"并总是相交;当两者被定义时 仅在一个 elevationTolerance (默认) 1e-3),结果点 z 为共享 高处.

设计决定

2.5D: 二维形状+高地, 1 三维 Mesh

Point 是唯一内在的-3D 类型(矢量)。 每个 形状 二维定位为 elevation (单位:千美元)Box 没有,它无穷无尽. Polygon 是浮图,所以它 containsPoint编号 :area 准确; 真实 三维几何用途 Mesh,故意省略了这些操作(非平面上的"指点") 网点只会是xy-silhouette测试.

默认不可变, 与 set 变异器

形状是不可变值对象: 获取器返回只读视图, 每个变换返回 a 新设 例如,所以共享几何(例如:一个展位的矩形)不能从另一个读取器下突变出. 每个 原始( e)Point, (中文(简体) ), Line, (中文(简体) ), Box, (中文(简体) ), Rect, (中文(简体) ), Polygon, (中文(简体) ), Mesh)暴露出一个单一的公众,道克旗下 set(...) 变异者——逃出者孵化出变换器通过写出,更新字段的方式如: elevation 已经就位.

通过 a 的 Opt-in 突变 target 参数

因为不可改变的变换会分配,所以每个变换也会接受一个可选的 target 撰写 结果是不分配——相同的平面图三。 js 使用,但倒置,所以默认为纯:

const moved = box.translate(offset); // new Box (immutable default)
box.translate(offset, box); // writes into box itself (opt-in mutation)
box.translate(offset, scratch); // reuse a scratch Box in a hot loop

自由函数在写入目标前读取所有输入, 因此将输入传递为目标 (单位:千美元)f(x, …, x)这是安全的。 使用 target 只有特征分析显示分配事项.

类 + 自由函数( 二重性)

每个行动都是 纯自由函数 超过结构 *Like 输入,每类都显示 稀薄方法 向它前进:

lineLength(line); // free function, accepts any { p0, p1 }
line.length(); // method → lineLength(this)

boxTranslate(box, offset); // free function
box.translate(offset); // method → boxTranslate(this, offset)

自由函数接受结构形状( F)Point2Like, (中文(简体) ), LineLike, (中文(简体) ), RectLike, (中文(简体) ), MeshLike,所以打电话的人 不需要阶级实例 也没有阶级身份组合 提供可发现性和 锁链.

一次定义的变形/ 并列逻辑( E)Polygon 重复使用 Mesh(中文(简体) )

Polygon 结构满足 MeshLike (它的2D顶点满足) PointLike因此,变换和 合并逻辑生命 一次 在网格自由函数上—— meshTranslate 编号 : meshScale 编号 : meshRotate 编号 : meshMerge (单位:千美元) meshBounds) (中文(简体) ). 两者 Mesh还有.. Polygon方法通过可选 target(单位:千美元) Polygon 目标保持结果 a Polygon (保留了线路),a Mesh 目标保持它 (单位:千美元) Mesh。 。 。 .

结构输入类型

输入是松散的 *Like 类型(Point2Like = { x, y }, (中文(简体) ), RectLike = { center, size, rotation?, elevation? }, (中文(简体) ), MeshLike, (中文(简体) ), PolygonLike,......);产出是具体的类例。 行动 translate 编号 : expand 编号 : scale 带 number | Point2Like (平面形状,如 Box)或(或) number | PointLike (单位:千美元) 三维 Point ops)——向两轴的斯卡尔广播,一个点给出了每轴值.

品牌代替 instanceof

每个原始人都带着 readonly is<Name> = true 字段( 三. js 样式) 幸存的重复模块复制和序列化。 这个 Shape 警卫检查品牌而不是 instanceof,仅接受 Shape (误入歧途) { isBox: true } 对象不能伪装成盒子.

地理(geo(中文(简体) )

这个 geo 模块提供WGS-84球上的纯大地测量数学。 这是一个 单独 坐标空间 从上面的平面原始人 ——没有一个 明确桥梁.

符号说明
LatLng{ lat: number; lng: number } ——小数度;后向北正,向东正
GeoAnchor{ local: Point2Like; geo: LatLng } ——投影桥使用的函文
haversineDistance(a, b)大圆相距以米为单位
bearing(from, to)以度为单位的初始指南针 [0, 360)
destinationPoint(from, distanceM, bearingDeg)目标 LatLng 来源、距离和轴承
projectLocalToGps(point, a, b)绘制本地地图 Point2Like 改为 LatLng 通过两个锚
projectGpsToLocal(geo, a, b)地图a LatLng 向当地 Point2Like 通过两个锚-反向上述

公约(不同于平面原始人):

  • 坐标在 学位 (不是弧度数).
  • 轴心是 指南针数字 : 0=北,90=东,180=南,270=西,顺时针增加.
  • 地球半径常数 : 6 371 000米(5 000米) (WGS-84平均半径).

这是故意防火墙 从平板会议(角 在弧度, 从+x轴起正时针, y-下屏幕坐标, 欧几利得相去. 唯一的桥梁是 projectLocalToGps 编号 : projectGpsToLocal, (中文(简体) ), 需要验证的 GeoAnchor 输入——没有输入底板-域逻辑 geo。 。 。 .

版本与发布记录

@expofp/geometry 共发布 133 个版本,首次发布于 2026/06/24;过去 12 个月发布了 133 个版本。

版本发布日期距今
3.49.2latest2026/11/14今天
0.0.0-experimental.3b0db16feat/wayfinding-compiler2026/11/13今天
3.49.12026/11/121 天前
3.49.02026/11/112 天前
3.48.02026/11/112 天前
3.47.22026/11/103 天前

其他发布通道:multi-venue → 0.0.0-experimental.cf063fc,stable → 3.47.0,eurotier → 0.0.0-experimental.6dabc65,feat/wayfinding-compiler → 0.0.0-experimental.3b0db16。

关于 @expofp/geometry 的常见问题

@expofp/geometry 是什么?

ExpoFP SDK 内部:共享几何原始

如何安装 @expofp/geometry?

在项目目录运行 npm install @expofp/geometry,或使用 pnpm add / yarn add / bun add。

@expofp/geometry 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@expofp/geometry 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@expofp/geometry 可以商用吗?

@expofp/geometry 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@expofp/geometry 的下载量有多少?

根据 npm 官方下载统计,@expofp/geometry 在 2026/10/14 – 2026/11/12 这 30 天内被下载 9,273 次,日均约 309 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@expofp/geometry 还在维护吗?

最新版本 3.49.2 发布于 2026/11/14(今天);至今共发布 133 个版本,其中过去 12 个月发布了 133 个;首次发布于 2026/06/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。