@ 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). 在给定高地上面向长方形. |
Polygon | A 类 平面图 三角多边形: 2D vertices + 三角形 indices +一个 elevation,带有缓存边框 Box已经 containsPoint编号 :area (因地平而定义良好). 使用命令环来建造一个对流 Polygon.fromConvexRing。 。 。 . |
Mesh | A 类 三维 三角网: 三维 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。 。 。 .