Mathfs
Freya为Unity扩展的数学功能!
- 这主要是我分享在个人项目中编写和使用的数学功能的方式
- 我会毫不犹豫地编辑和调整内容,不太考虑向后兼容性
- 由于使用了较新的C#版本特性,当前最低支持Unity 2021.2版本。如有必要,可能可以通过IDE自动降级
- 带有版本标签的提交应该相对稳定。其他提交可能不稳定
安装说明
有几种方法可以将此库安装到你的项目中:
- 普通安装
- 克隆或下载此仓库,并将其放在Unity项目的Assets文件夹中的某个位置
- Unity包管理器(UPM):
- 将以下任一行添加到Packages/manifest.json中:
"com.acegikmo.mathfs": "https://github.com/FreyaHolmer/Mathfs.git#0.1.0",
如果你想指定特定版本(推荐)"com.acegikmo.mathfs": "https://github.com/FreyaHolmer/Mathfs.git",
如果你想获取最新提交(可能不稳定)- 关于UPM和git的更多信息在此
- OpenUPM
- 安装openupm-cli后,运行以下命令:
openupm add com.acegikmo.mathfs
安装后,你可以通过在脚本中包含命名空间using Freya
来访问库
功能
- 2D交叉测试,包括以下所有组合:
- 射线
- 线段
- 直线
- 圆
- 曲线与样条
- 贝塞尔曲线(二次、三次和广义)
- 埃尔米特曲线
- Catmull-Rom曲线
- B样条(均匀三次和广义非均匀)
- NURBS(非均匀有理B样条)
- 轨迹(三次和广义)
- 轨迹数学
- 获取位移(轨迹中的点),给定重力、角度、速度和时间
- 获取发射速度,给定重力、角度和横向距离
- 获取发射角度,给定重力、速度和横向距离
- 获取最大射程,给定重力和速度
- 获取高度势能,给定重力、当前高度和速度
- 从高度势能获取速度,给定重力、当前高度和高度势能
- 三角形数学
- 面积/有符号面积,给定三个点或底和高
- 包含检查,给定三个三角形顶点和待测点
- 直角三角函数计算对边/邻边/斜边/角度
- 内心/质心
- 内切圆/外接圆
- 最小角
- 多边形数学
- 面积/有符号面积
- 是否顺时针
- 绕数
- 包含
- 圆数学
- 从两点(获取通过两点的最小圆)
- 从三点(获取通过三点的唯一圆)
- 半径到面积/面积到半径
- 面积到周长/周长到面积
- 半径到周长/周长到半径
- 2D角度辅助函数(AngToDir, DirToAng等)
- 2D向量扩展方法(Rotate90CCW/CW, Rotate, RotateAround等)
- 二次和线性根查找器
- 重映射函数
- 常量(Tau, Pi, 黄金比例, e, sqrt2)
- 向量扩展方法(WithMagnitude, ClampMagnitude(min,max)等)
- 扩展到向量的基本数学运算(Clamp, Round, Abs等)
- 颜色扩展(WithAlpha, MultiplyRGB等)
- 平滑函数(Smooth01, SmoothCos01等)
- 三角形数学辅助函数(SignedArea, Circumcenter, Incircle等)
- 圆数学辅助函数(Area, Circumference等)
- 所有函数使用弧度
- 以及更多!
变更
Mathfs.cs并不完全匹配Unity的Mathf.cs,我做了一些改动:
- 所有角度都使用弧度,没有方法使用度
- Lerp和InverseLerp:
- 默认不限制
- LerpClamped/InverseLerpClamped现在是特殊情况函数/异常
- 使用更加数值稳定的计算方法
- 移除了Smoothstep,改为更明确的:
- LerpSmooth(这是它的实现方式)和
- InverseLerpSmooth(这是除Unity的Mathf.cs外所有地方的实现方式)
- 带有任意输入/数组输入的Min/Max函数在为空时会抛出异常,而不是返回0