文章目录
上周公式解读

R为当前的状态(旋转矩阵),
r
i
r_i
ri为原本的向量
质心到作用点:
R
r
i
Rr_i
Rri
perpendicular:垂直的
porportional:成比例
力矩跟他们的cross product相关


inertia tensor:惯性张量 :就是抵抗旋转的能力
同一个物体所能产生的旋转不仅仅跟力矩大小有关,跟方向也有关,产生的抵抗是不一样的(如下图,右侧旋转更快)
抵抗程度跟力矩方向有关,因此用矩阵(而非常数)来描述抵抗

旋转矩阵是正交矩阵
经过化简,每次求新的Inertia只需要在原本的Inertia的基础上计算即可
r
i
T
r
i
r^T_ir_i
riTri是一个实数

在附录中有最后一行公式的证明

Topics for the Day

Particle Collision Detection and Response
Signed Distance Function

注:第二个公式中r并不是黑体

当在外侧时,具体距离函数值其实不用关心

近似值,因为最近的点可能是蓝点

Quadratic Penalty Method(二次惩罚法)
当发生碰撞时,给点施加一个力推出来
N是确定方向
问题:该情况是物体穿进去才有惩罚力度

改进:不要等穿进去再施加力,而是加一个距离范围(缓冲空间)
overshooting:k太大,施加的力太大

解决思路:将k设置为一个与距离有关的函数,根据实际距离不断放大 力的大小
存在问题:当发生穿透时,会越陷越深

A short Summary of Penalty Method

Impulse Method
当碰撞检测到,速度和位置马上更新

先检测速度的方向是否继续往下
a:摩擦造成
V
T
V_T
VT方向上的衰减
Coulomb’s law 库伦定理
点乘是一个标量,乘N来确定方向

Rigid Body Collision Detection and Response
检测部分

响应部分:

R
r
i
×
j
Rr_i×j
Rri×j为冲量造成的力矩

Cross Product as a Matrix Product
用矩阵来代替Cross Product

K是一个矩阵
冲量会造成点的速度的改变,冲量是作用于整个刚体的,会导致刚体的位移和旋转
vnew用impulse方法求出来,vi已知,K也可以求出来,这样可以反推冲量j
从点的速度变化得到冲量,从而整个刚体的运动

impulse方法要求改变某点的速度,但现在不能直接修改,所以需要找到冲量j与质心速度的关系,进而改变某点速度

算法详细流程
具体讲解视频地址
步骤:
1.更新每个顶点的位置,检测是否有碰撞
2.碰撞点的速度算出来,计算是否还继续往下掉(往内穿透)?
3.计算
v
i
n
e
w
v_i^{new}
vinew,求法向量和切向量的速度,然后关于摩擦的系数a计算,求新的两个方向的速度,然后加起来(向量的相加)
v
i
n
e
w
v_i^{new}
vinew是不存在的,只是中间变量,实际上应该更新v(线速度)和ω(角速度),用冲量来更新它们
4.计算K,求出冲量j
5.通过冲量来计算v和ω
总结:
因为一个模型的v是质心的速度,vi是模型上某一点的速度。我们不能直接去修改模型上某一点vi的速度,所以要借助j去修改v和w,达到修改vi的目的,求出整个兔子其他点的变化(即修改整体的运动状态)

Some Implementation Detail
如果有很多点碰撞,取平均值
oscillation:抖动
降低
μ
N
μ_N
μN来减少抖动


Basic Idea
思路:先让每个点自己动(粒子模拟),动完后重新组合(再构成一个刚体)

c:质心
式子的含义:希望重构后的点(正方形的点)与梯形的点尽可能的近,换句话:点所重构的距离尽可能小,所有点收的尽可能少
直观上理解:约束之前和约束之后的中心点是同一个点,对每个顶点求平均值
∑
r
i
=
0
∑r_i=0
∑ri=0:
求c:

求A:
A不是旋转矩阵,通过Polar Decomposition变成旋转矩阵

S为本地形变,R是全局旋转

Shape Matching
让每个点自己边,形状发生变化后,通过约束再把形状变回去(恢复刚体特性)

适合于摩擦精确度不是很重要

shape matching论文


本文探讨了碰撞检测中的粒子响应、signeddistancefunction和二次惩罚法,以及RigidBodyCollisionDetection中的交叉积和矩阵表示。文章介绍了冲动法处理碰撞、摩擦力对速度的影响以及刚体运动的更新过程。此外,还涉及形状匹配和减少振荡的实现细节。
2097

被折叠的 条评论
为什么被折叠?



