2 维度弹性碰撞最终速度增加?
2 Dimensional Elastic Collisions final speed increases?
问题简而言之:
我在 2d space 中有两个移动的球发生碰撞,因此会有撞击前的速度 v1i v2i 和撞击后的速度 v1f v2f,当然,它们由向量表示。球的速度范数之和不守恒而是增加是否正常?
所以范数(v1i) + 范数(v2i) < 范数(v1f) + 范数(v2f)。
我认为这应该是不可能的,因为这意味着球不知从哪里获得了速度,但我可能遗漏了一些东西,也许范数的总和在这种影响中不守恒。
长版:
已知数据:撞击前两个球 i 和 j 的速度矢量(抱歉,如果符号有点混乱)vi、vj、两个球中心的位置矢量 pi、pj、两个球的半径和质量相同r, m.
这是计算两个球最终速度的两种方法:
%velocity vectors
vi=[vix; viy];
vj=[vjx; vjy];
%position(center) of the balls
pi=[xi; yi];
pj=[xj; yj];
%normal vector in the point of impact
n = pi - pj;
%normal unit vector in the point of impact
un=n/norm(n);
%tangent unit vector in the point of impact
ut=[-un(2); un(1)];
%project velocity in the normal and tangent directions using dot product
vin=dot(un,vi);
vit=dot(ut,vi);
vjn=dot(un,vj);
vjt=dot(ut,vj);
%final normal velocity is calculated combining conservation
%of momentum and kinetic energy in only the normal dimension
vinf=vjn;
vjnf=vin;
%final tangent velocity remains the same
vitf=vit;
vjtf=vjt;
%final velocity is the sum of the tan e norm components
vif=vinf*un + vitf*ut;
vjf=vjnf*un + vjtf*ut;
if norm(vi)+norm(vj) < norm(vif)+norm(vjf)
print("Energy violation")
%There was also a much faster way to calculate the final
%velocity: vif=(vi-(dot(vi-vj,n)/(norm(n)^2))*(n));
%but this way is more easy to understand. Both give the same
% result.
这是一个数字示例:
vi =
4.0422
0.2023
vj=
-0.5104
0.2552
n =
-4.9436
-2.8675
vif =
0.6587
-1.7603
vjf=
2.6864
2.1095
范数(vi)+范数(vj) = 4.6179
范数(vif)+范数(vjf) = 5.2951
我的一个朋友帮我找到了答案,我只是没有计算速度向量的范数的平方,这是一个愚蠢的错误,我的错。所以范数之和实际上不守恒,但平方范数之和守恒。
问题简而言之: 我在 2d space 中有两个移动的球发生碰撞,因此会有撞击前的速度 v1i v2i 和撞击后的速度 v1f v2f,当然,它们由向量表示。球的速度范数之和不守恒而是增加是否正常? 所以范数(v1i) + 范数(v2i) < 范数(v1f) + 范数(v2f)。
我认为这应该是不可能的,因为这意味着球不知从哪里获得了速度,但我可能遗漏了一些东西,也许范数的总和在这种影响中不守恒。
长版: 已知数据:撞击前两个球 i 和 j 的速度矢量(抱歉,如果符号有点混乱)vi、vj、两个球中心的位置矢量 pi、pj、两个球的半径和质量相同r, m.
这是计算两个球最终速度的两种方法:
%velocity vectors
vi=[vix; viy];
vj=[vjx; vjy];
%position(center) of the balls
pi=[xi; yi];
pj=[xj; yj];
%normal vector in the point of impact
n = pi - pj;
%normal unit vector in the point of impact
un=n/norm(n);
%tangent unit vector in the point of impact
ut=[-un(2); un(1)];
%project velocity in the normal and tangent directions using dot product
vin=dot(un,vi);
vit=dot(ut,vi);
vjn=dot(un,vj);
vjt=dot(ut,vj);
%final normal velocity is calculated combining conservation
%of momentum and kinetic energy in only the normal dimension
vinf=vjn;
vjnf=vin;
%final tangent velocity remains the same
vitf=vit;
vjtf=vjt;
%final velocity is the sum of the tan e norm components
vif=vinf*un + vitf*ut;
vjf=vjnf*un + vjtf*ut;
if norm(vi)+norm(vj) < norm(vif)+norm(vjf)
print("Energy violation")
%There was also a much faster way to calculate the final
%velocity: vif=(vi-(dot(vi-vj,n)/(norm(n)^2))*(n));
%but this way is more easy to understand. Both give the same
% result.
这是一个数字示例:
vi = 4.0422 0.2023
vj= -0.5104 0.2552
n = -4.9436 -2.8675
vif = 0.6587 -1.7603
vjf= 2.6864 2.1095
范数(vi)+范数(vj) = 4.6179
范数(vif)+范数(vjf) = 5.2951
我的一个朋友帮我找到了答案,我只是没有计算速度向量的范数的平方,这是一个愚蠢的错误,我的错。所以范数之和实际上不守恒,但平方范数之和守恒。