脑子比较渣,记不住公式
这里列出一些自己常用到的数学或物理等应用场景的基础公式和基于UE4实现的的例子(BP或C++),备查
(随缘更新)
数学:
仿射变换和射影变换:
问.Actor A到Actor B的方向v:
相当于线段AB的单位向量v
1.线性插值:
v = (B - A) / (∥ B - A∥)
UE4实现(BP):
问.点P到直线L1的距离D:
直线L1上任意一点P1,单位向量为V1
距离D = (P - P1) · (P - P1) - ( ( (P - P1) · V1)^2 / V1 · V1 )
问.两直线或平面的交点P3或交线L3
Note:克莱姆法则:https://en.wikipedia.org/wiki/Cramer%27s_rule
交点:
L1:单位向量V1,L1上任意一点P1 有方程式:P3 = P1 + kV1
L2:单位向量V2,L2上任意一点P2 有方程式:P3 = P2 + tV2
首先假设,线段 L1和L2相交,即V1叉乘 V2不等于 0
可推到线性方程组未知数(k,t): (V1 · V1 )k - (V1 · V2 )t = V1(P2 - P1)
(V1 · V2 )k - (V2 · V2 )t = V2(P2 - P1)
利用克莱姆法则可得k与t的解.
带入L1或L2可得P3
交线:
Note:V1和V2必须为单位向量
公式:L3 = ( ( V1 · P1 ) (V1 - (V1 · V2)V2 ) + ( V2 · P2 )( V2 - (V1 · V2)V1 ) ) ÷ (1 - (V1 · V2)^2 )
UE4例子:
交点:
wait
交线 :
问.Actor A绕任意轴Axes(u,O)旋转θ度:求Actor A的新位置 P:
u是Normal Vector(单位向量)
O是旋转轴上任意一点 Vector.
通常常用几种方式实现:
1.带入旋转公式(点乘(·)和叉乘(×)):
那么P = O + ( Cosθ )( A - O ) + (1 - cosθ)(( A - O ) · u)u + ( sinθ )u × ( A - O )
2.四元数(Slerp):
wait
3.矩阵:
3D旋转矩阵
UE4实现:
Ue4已经实现,3D旋转矩阵:请参考UKismetMathLibrary::RotateAngleAxis或FVector::RotateAngleAxis
几何:
wait
图形:
Q.点P是否在平面S上:
方式一,用度量公式:
假设平面S法线N和平面上任意一点O
当 (P-O) · N = 0 则 点P在平面S上
栗子:
wait
材质公式相关:
Q.图形学-Frenel函数材质球实现方式:
调个材质 大概公式 自发光= 自定义边光颜色* ((1-法线与视角方向点乘)的 自定义幂次方 ) 这个是比较简单方法
|
模型的法线与视角方向 角度越大 表示是约边缘地方 反之不是 角度越大点成越小 1 - 点成 越大 然后 再次 幂次方 更大 所以颜色看起来 边缘就有金边了
|
栗子: