当前位置: 首页 > news >正文

常用数学函数详解:从基础运算到图形学应用

常用数学函数详解:从基础运算到图形学应用

在编程开发(尤其是图形学、数值计算领域)中,数学函数是构建复杂逻辑和效果的基础。无论是简单的取整运算,还是复杂的矩阵变换、光照计算,都离不开各类数学函数的支持。本文整理了常用的数学函数分类及详细说明,涵盖基础运算、逻辑判断、插值、比较、指数、对数、三角函数等多个维度,帮助开发者快速查阅和应用。

基本函数

基础数学运算函数,用于处理数值的基本变换和计算。

函数名描述参数/范围示例
round(x)对x进行四舍五入x为数值round(2.3) → 2;round(2.6) → 3
abs(x)计算x的绝对值x可为正负数值abs(-5) → 5;abs(3) → 3
pow(x, y)计算x的y次方(x^y)x、y为数值pow(2, 3) → 8;pow(3, 0.5) → √3 ≈1.732
fmod(x, y)计算x除以y的余数(浮点数除法余数)y≠0(否则结果不可预料)fmod(7, 3) → 1.0;fmod(5.5, 2) →1.5
sqrt(x)计算x的平方根x必须大于0sqrt(4) → 2.0;sqrt(2)≈1.414
rsqrt(x)计算x的反平方根(1/√x)x必须大于0rsqrt(4) → 0.5;rsqrt(2)≈0.707
frac(x)返回x的小数部分(x - floor(x))x为浮点数frac(3.14) → 0.14;frac(-2.5)→0.5
ceil(x)向上取整(返回不小于x的最小整数)x为浮点数ceil(1.3) → 2.0;ceil(-1.2)→-1.0
floor(x)向下取整(返回不大于x的最大整数)x为浮点数floor(1.3) →1.0;floor(-1.2)→-2.0

逻辑函数

用于处理布尔值或数组的逻辑判断,类似逻辑运算符的批量运算。

函数名描述参数/范围示例
all(x)对x中所有元素进行“与”运算(&&)x为布尔数组或向量all([true, true, false]) → false;all([1,2,3])→true(非0为真)
any(x)对x中所有元素进行“或”运算(||)x为布尔数组或向量any([false, true, false])→true;any([0,0,0])→false

插值函数

用于在两个值之间进行平滑过渡,广泛应用于动画、颜色渐变等场景。

函数名描述参数/范围示例
lerp(a, b, f)计算a到b的线性插值,公式:(1-f)a + fb 或 a + f*(b-a)a、b为插值上下限;f为权值(通常0≤f≤1)lerp(10, 20, 0.5)→15;lerp(0,10,0.3)→3
若a、b为向量,f必须为标量或等长向量

比较函数

用于数值或向量的比较、范围限制等操作,是图形学中颜色、坐标裁剪的常用工具。

函数名描述参数/范围示例
min(a, b)返回a和b中的最小值a、b为同类型数值或向量min(3,5)→3;min(-2,-5)→-5
max(a, b)返回a和b中的最大值a、b为同类型数值或向量max(3,5)→5;max(-2,-5)→-2
clamp(x, a, b)将x限制在[a, b]范围内(x<a返回a;x>b返回b;否则返回x)a≤b;x为待限制值clamp(5,1,10)→5;clamp(-3,1,10)→1;clamp(12,1,10)→10
step(a, x)阶梯函数(x<a返回0;否则返回1)a为阈值;x为比较值step(5,3)→0;step(5,7)→1;step(2,2)→1
saturate(x)将x限制在[0, 1]范围内(同clamp(x, 0, 1))x为任意数值saturate(-0.5)→0;saturate(0.3)→0.3;saturate(1.2)→1
sign(x)符号函数(x>0返回1;x<0返回-1;x=0返回0)x为任意数值sign(5)→1;sign(-3)→-1;sign(0)→0
isfinite(x)判断x是否为有限数(非无穷、非NaN)x为数值isfinite(100)→true;isfinite(inf)→false
isnan(x)判断x是否为非数值(NaN)x为数值isnan(NaN)→true;isnan(0)→false
isinf(x)判断x是否为无穷大(包括正无穷、负无穷)x为数值isinf(inf)→true;isinf(5)→false

指数函数

基于指数运算的函数,用于快速计算幂次相关的值。

函数名描述参数/范围示例
exp(x)计算自然指数e的x次方(e≈2.71828)x为数值exp(1)≈2.718;exp(0)→1
exp2(x)计算2的x次方x为数值exp2(3)→8;exp2(0)→1
frexp(x, out exp)将浮点数x分解为尾数m和指数exp,满足x = m×2^exp(m∈[0.5,1))x为浮点数;exp为输出参数frexp(8, exp)→m=0.5,exp=4(0.5×2⁴=8)
若x=0,则m=0且exp=0frexp(0, exp)→m=0,exp=0
ldexp(x, n)计算x×2ⁿ的值x为数值;n为整数ldexp(0.5,4)→0.5×16=8;ldexp(2,3)=2×8=16

对数函数

指数函数的逆运算,用于处理对数相关计算。

函数名描述参数/范围示例
log(x)计算自然对数ln(x)(以e为底)x必须大于0log(e)→1;log(1)→0
log2(x)计算以2为底的对数log₂(x)x必须大于0log2(8)→3;log2(2)→1
log10(x)计算以10为底的对数log₁₀(x)x必须大于0log10(100)→2;log10(1)→0

三角函数

用于角度与弧度的转换及三角运算,是图形学中旋转、光照计算的核心。

函数名描述参数/范围示例
sin(x)计算x的正弦值x为弧度值sin(π/2)→1;sin(0)→0
cos(x)计算x的余弦值x为弧度值cos(0)→1;cos(π)→-1
tan(x)计算x的正切值x为弧度值(x≠π/2 + kπ)tan(π/4)→1;tan(0)→0
asin(x)计算x的反正弦值(返回弧度)x∈[-1,1];返回值∈[-π/2, π/2]asin(1)→π/2;asin(0)→0
acos(x)计算x的反余弦值(返回弧度)x∈[-1,1];返回值∈[0, π]acos(1)→0;acos(0)→π/2
atan(x)计算x的反正切值(返回弧度)x∈R;返回值∈[-π/2, π/2]atan(0)→0;atan(1)→π/4
atan2(y, x)计算y/x的反正切值(考虑象限,返回弧度)y、x为数值atan2(1,1)→π/4;atan2(-1,1)→-π/4
sinh(x)计算x的双曲正弦值((eˣ - e⁻ˣ)/2)x为数值sinh(0)→0;sinh(1)≈1.175
cosh(x)计算x的双曲余弦值((eˣ + e⁻ˣ)/2)x为数值cosh(0)→1;cosh(1)≈1.543
tanh(x)计算x的双曲正切值(sinh(x)/cosh(x))x为数值tanh(0)→0;tanh(1)≈0.761
sincos(float x, out s, out c)同时计算x的正弦和余弦值(s=sin(x),c=cos(x))x为弧度值;s、c为输出参数sincos(π/2, s, c)→s=1,c=0
radians(x)将角度值x转换为弧度值(弧度=角度×π/180)x为角度值radians(180)→π;radians(90)→π/2
degrees(x)将弧度值x转换为角度值(角度=弧度×180/π)x为弧度值degrees(π)→180;degrees(π/2)→90

矢量函数

用于向量的基本运算,是3D图形学中向量计算的基础。

函数名描述参数/范围示例
dot(A, B)计算向量A和B的点积(内积)A、B为同维度向量A=(1,2),B=(3,4) → dot(A,B)=1×3+2×4=11
cross(A, B)计算三维向量A和B的叉积(外积)A、B为三维向量A=(1,0,0),B=(0,1,0) → cross(A,B)=(0,0,1)

矩阵函数

用于矩阵的运算和变换,在3D变换(平移、旋转、缩放)中不可或缺。

函数名描述参数/范围示例
determinant(m)计算矩阵m的行列式m为方阵2x2矩阵[[2,3],[4,5]]的行列式=2×5-3×4=-2
modf(x, out ip)将浮点数x分解为整数部分和小数部分(返回小数,整数存ip)x为浮点数;ip为输出参数(整数部分)modf(3.14, out ip)→0.14,ip=3.0
mul(M, v)计算矩阵M与向量v的乘积(mul(v, M)为向量与矩阵乘积)M为矩阵;v为向量M=[[1,2],[3,4]],v=(5,6) → mul(M,v)=(17,39)
transpose(M)计算矩阵M的转置(行变列,列变行)M为任意矩阵M=[[1,2],[3,4]] → transpose(M)=[[1,3],[2,4]]

噪声函数

用于生成具有一定规律性的“伪随机”值,广泛应用于纹理生成、地形模拟等。

函数名描述参数/范围示例
noise(x)生成0~1之间的噪声值(输入相同则输出相同,非真随机)x为数值或向量noise(1.2)→0.345(固定输入返回固定值)

环境光函数

专门用于光照计算的函数,帮助快速计算环境光、散射光和镜面光的贡献。

函数名描述参数/范围示例
lit(NdotL, NdotH, m)计算光照贡献,返回四元向量(x,y,z,w):NdotL:法向量与入射光向量点积;NdotL=0.8,NdotH=0.6,m=10 → (1.0, 0.8, 0.6¹⁰≈0.006, 1.0)
- x:环境光贡献(恒为1.0)NdotH:法向量与半角向量点积;若NdotL=-0.2 → (1.0, 0, 0, 1.0)(散射光和镜面光均为0)
- y:散射光贡献(NdotL<0则为0,否则为NdotL)m:高光系数
- z:镜面光贡献(NdotL<0或NdotH<0则为0,否则为(NdotH)^m)
- w:恒为1.0

总结

以上函数覆盖了从基础数值运算到图形学专用计算的多个场景,无论是简单的取整、比较,还是复杂的矩阵变换、光照计算,都能找到对应的工具函数。在实际开发中,灵活运用这些函数可以大幅简化逻辑,提升效率。不同编程语言(如GLSL、Python、C++)对这些函数的实现可能略有差异,但核心逻辑和用途基本一致,开发者可根据具体场景查阅对应语言的文档进行适配。

http://www.dtcms.com/a/594533.html

相关文章:

  • 杭州网站改版公司兰州网站设计公司排名
  • vcpkg安装包报错 错误 TRK0005: 未能找到: rc.exe ,系统找不到指定的文件问题解决
  • 旅游网站模板免费室内设计联盟论坛官网
  • wordpress 用户名 密码合肥seo网站多少钱
  • 11.10 脚本网页 中国象棋2版
  • 基于站点的网络营销方法app开发多少钱
  • 无忧网站建设费用做一个手机app大概需要多少钱
  • winlogon!SASWndProc函数分析之win+L键的处理
  • Uni-app条件编译(// #ifndef APP)
  • 做网站为什么很复杂建好网站是不是还得维护
  • 非专业人士可以做网站编辑的工作吗WordPress文章生成图片
  • 平凉市城乡建设局网站让别人访问自己做的网站
  • 企业经营异常信息查询接口分享、技术文档
  • seo网站分析报告网站分享的功能怎么做
  • idae快捷键
  • 推荐西安优秀的响应式网站建设公司教务管理系统下载
  • 企业部署智能决策系统成本高吗?
  • PCB之电源完整性之电源网络的PDN仿真CST---06
  • 搭建一个简单的springcloud服务
  • 重庆科技网站建设婚纱摄影哪家好
  • 不让Django DRF ListAPIView 类进行2次查询
  • HarmonyOS:弹性布局(Flex)
  • CANN在智能视频分析场景中的实践应用
  • 基于ESP32的宠物喂食小屋
  • 西昌有做网站的公司吗海南网站设计公司
  • Prometheus实战教程 - 服务发现
  • 卸载搜狗压缩软件
  • 企业网站制作免费下载效果图网站发帖平台
  • 做网站的时候用的什么框架app下载汅api免费下载大全视频
  • 鸿蒙应用开发之实现键值型数据库跨设备数据同步