news 2026/7/22 1:57:28

U++ FMath数学工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
U++ FMath数学工具

FMath是 Unreal Engine 提供的数学工具类,里面集中放置了大量常用数学函数,例如:

  • 取最大值、最小值
  • 限制数值范围
  • 绝对值
  • 随机数
  • 插值
  • 三角函数
  • 开方、乘方
  • 浮点数比较

基本写法:

int32 Result = FMath::Max(10, 20);

1.最值Max,Min

int32 Result = FMath::Max(10, 20);

int32 Result = FMath::Min(10, 20);

2.Clamp 限制数值范围

FMath::Clamp(当前值, 最小值, 最大值);

float Health = 120.0f; Health = FMath::Clamp(Health, 0.0f, 100.0f);

最后Health返回100.0f。

3.Abs 绝对值

float Result = FMath::Abs(-15.0f);

4.RandRange、FRand随机数

生成指定范围的随机数

int32 RandomNumber = FMath::RandRange(1, 10);

float RandomNumber = FMath::RandRange(0.0f, 100.0f);

整数版本通常包含最大值

FRand生成0.0f到1.0f之间的随机浮点数

float RandomValue = FMath::FRand();

5.Lerp 线性插值

FMath::Lerp(起始值, 目标值, 比例);

例:

FMath::Lerp(0.0f, 100.0f, 0.0f); // 0 FMath::Lerp(0.0f, 100.0f, 0.25f); // 25 FMath::Lerp(0.0f, 100.0f, 0.5f); // 50 FMath::Lerp(0.0f, 100.0f, 1.0f); // 100

向量插值:

FVector StartLocation(0.0f, 0.0f, 0.0f); FVector EndLocation(1000.0f, 0.0f, 0.0f); FVector NewLocation = FMath::Lerp( StartLocation, EndLocation, 0.5f );

6.FInterpTo 插值移动函数

让浮点数平滑地接近目标值地插值函数,距离目标越远变化越快,距离目标越近,变化越慢。

float NewValue = FMath::FInterpTo(
Current,
Target,
DeltaTime,
InterpSpeed
);

7.IsNearlyEqual 浮点数比较

由于计算机底层原理:

float A = 0.1f + 0.2f;
float B = 0.3f;

A和B在底层不一定完全相等,UE提供:

FMath::IsNearlyEqual()

也可以指定误差:

if (FMath::IsNearlyEqual(A, B, 0.001f))
{
}

IsNearlyZero 判断一个浮点数是否接近0:

float Speed = 0.00001f; if (FMath::IsNearlyZero(Speed)) { UE_LOG(LogTemp, Warning, TEXT("速度接近0")); }

8.平方、开方、乘方

float Result = FMath::Square(5.0f);//平方

float Result = FMath::Sqrt(25.0f);//平方根

float Result = FMath::Pow(2.0f, 3.0f);//乘方

9.三角函数

float SinValue = FMath::Sin(Angle);
float CosValue = FMath::Cos(Angle);
float TanValue = FMath::Tan(Angle);

注意:传入值是弧度,不是角度

转换:

float Radians = FMath::DegreesToRadians(90.0f);
float Result = FMath::Sin(Radians);

10.Round、Floor、Ceil浮点数处理

四舍五入:

int32 Result = FMath::RoundToInt(3.6f);

向下取整:

int32 Result = FMath::FloorToInt(3.9f);

向上取整:

int32 Result = FMath::CeilToInt(3.1f);

去掉小数部分:

int32 Result = FMath::TruncToInt(3.9f);

11.Sign 获取正负号

float Result = FMath::Sign(-20.0f);

正数返回1.0f,负数返回-1.0f

12.Wrap 循环限制数值

float Angle = FMath::Wrap(450.0f, 0.0f, 360.0f);

返回90

13.MapRangeClamped 映射数值范围

将一个范围中的数值转换到另一个范围:

float Health = 50.0f; float Percent = FMath::GetMappedRangeValueClamped( FVector2D(0.0f, 100.0f), FVector2D(0.0f, 1.0f), Health );

映射函数适用于更复杂的范围,例如将传感器数值0~1023映射为物体缩放1~3

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 1:55:17

比亚迪秦EV高压互锁系统原理与故障诊断指南

1. 比亚迪秦EV高压互锁系统概述高压互锁系统(High Voltage Interlock Loop,简称HVIL)是纯电动车型高压安全架构的核心组成部分。在比亚迪秦EV这款主力电动车型上,这套系统通过实时监测高压回路完整性,为车辆提供了&quo…

作者头像 李华
网站建设 2026/7/22 1:52:27

MuMu模拟器ADB连接与调试全攻略

1. MuMu模拟器与ADB连接基础MuMu模拟器作为一款主流的Android模拟器,其ADB连接机制与传统物理设备存在显著差异。默认情况下,MuMu会创建虚拟ADB端口(通常为7555),这需要通过特殊连接命令才能建立调试通道。与常见的USB…

作者头像 李华
网站建设 2026/7/22 1:50:59

SEO优化:如何解决高曝光低点击率问题

1. 曝光与点击率脱钩的深层原因解析当你在Search Console中看到文章获得大量曝光却鲜有人点击时,这种数据落差确实会让人产生自我怀疑。但先别急着否定内容价值,让我们拆解几个关键数据指标:曝光量(Impressions):内容出现在搜索结…

作者头像 李华
网站建设 2026/7/22 1:50:50

关于分割的知识

提示:会随着我的学习不断加深 文章目录一、SAM3的安装二、掩码的作用一、SAM3的安装 本人之前的一篇博客 关于3D打印SAM的改进PSAM的论文解读 二、掩码的作用 掩码本质上是一个与原始图像尺寸完全相同的二维矩阵。就相当于yolo里面的标签 二值掩码:矩…

作者头像 李华
网站建设 2026/7/22 1:50:35

Linux下Python3与Django生产环境部署指南

1. Linux环境下Python3与Django部署全攻略作为一个长期在Linux环境下折腾Python项目的开发者,我深知从零开始部署Python3Django环境会遇到多少"坑"。不同于Windows的一键安装体验,Linux环境下的部署往往需要处理依赖冲突、权限管理、环境隔离等…

作者头像 李华