나는 임의의 포인트와 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