我有以下由随机点生成的网格,并使用Delaunay三角网创建三角形。然后,我在每个顶点上应用每个三角形的弹簧力。但由于某种原因,平衡总是向左移动。弹簧物理平衡总是向左移动
这里是行为的视频: https://youtu.be/gb5aj05zkIc
为什么发生这种情况?
下面是物理代码:
for (let i=0; i < mesh.geometry.faces.length; i++) {
let face = mesh.geometry.faces[i];
let a = mesh.geometry.vertices[face.a];
let b = mesh.geometry.vertices[face.b];
let c = mesh.geometry.vertices[face.c];
let p1 = Vertcies[face.a];
let p2 = Vertcies[face.b];
let p3 = Vertcies[face.c];
update_force_points(p1, p2, a, b);
update_force_points(p1, p3, a, c);
update_force_points(p2, p3, b, c);
}
function update_force_points(p1, p2, p1p, p2p) {
// get all the verticies
var dx = (p1.x - p2.x);
var dy = (p1.y - p2.y);
var len = Math.sqrt(dx*dx + dy*dy);
let fx = (ks * (len - r) * (dx/len)) + ((kd * p2.vx - p1.vx));
let fy = (ks * (len - r) * (dy/len)) + ((kd * p2.vy - p1.vy));
if (! p1.fixed) {
p1.fx = (ks * (len - r) * (dx/len)) + ((kd * p2.vx - p1.vx));
p1.fy = (ks * (len - r) * (dy/len)) + ((kd * p2.vy - p1.vy));
}
if (! p2.fixed) {
p2.fx = -1 * p1.fx;
p2.fy = -1 * p1.fy;
}
p1.vx += p1.fx/mass;
p1.vy += p1.fy/mass;
p2.vx += p2.fx/mass;
p2.vy += p2.fy/mass;
p1.x += p1.vx;
p1.y += p1.vy;
p2.x += p2.vx;
p2.y += p2.vy;
p1p.x = p1.x;
p1p.y = p1.y;
p2p.x = p2.x;
p2p.y = p2.y;
p2p.z = 0.0;
p1p.z = 0.0;
}
可以定义KS和KD? 它在哪里定义哪些点是固定的? 所有顶点的质量是固定的吗? 如果你随机化顶点位置,你会得到相同的结果吗? (如果不是所有的都漂向左边的底部?),那么这并不奇怪。由于你减去了一个固定的数量(r),所以这里有更多的力量。应该有不对称 – OtterFamily