reduce min dist bit width

This commit is contained in:
2025-11-25 08:14:19 -08:00
parent d1c13757e0
commit e514c27675

View File

@@ -204,10 +204,8 @@ fn reduce_simplex(
// local uDist = uv_up/(u_u*v.magnitude)
// local vDist = uv_pv/(v_v*u.magnitude)
// local minDist2 = math.min(uDist, vDist)
let u_u=u.dot(u);
let v_v=v.dot(v);
let u_dist=uv_up*(v_v*u.length());
let v_dist=uv_pv*(u_u*v.length());
let u_dist=uv_up*v.length();
let v_dist=uv_pv*u.length();
// if vDist == minDist2 then
if v_dist<u_dist{
@@ -302,32 +300,40 @@ fn reduce_simplex(
// local vwDist = pvw*uvwSign/vw.magnitude
// local wuDist = upw*uvwSign/wu.magnitude
// local minDist3 = math.min(uvDist, vwDist, wuDist)
let uv_dist=uv_p.mul_sign(uv_w)*vw.length()*wu.length();
let vw_dist=pv_w.mul_sign(uv_w)*wu.length()*uv.length();
let wu_dist=up_w.mul_sign(uv_w)*uv.length()*vw.length();
let min_dist=uv_dist.min(vw_dist).min(wu_dist);
let uv_dist=uv_p.mul_sign(uv_w);
let vw_dist=pv_w.mul_sign(uv_w);
let wu_dist=up_w.mul_sign(uv_w);
let wu_len=wu.length();
let uv_len=uv.length();
let vw_len=vw.length();
// if vwDist == minDist3 then
if vw_dist==min_dist{
(u,v)=(v,w);
uv=vw;
// uv_p=pv_w; // unused
// b0, c0 = c0, d0
// b1, c1 = c1, d1
simplex.remove(1);
// elseif wuDist == minDist3 then
}else if wu_dist==min_dist{
(u,v)=(w,u);
uv=wu;
// uv_p=up_w; // unused
// b0, c0 = d0, b0
// b1, c1 = d1, b1
// before [a,b,c,d]
simplex[2]=simplex[1];
simplex.swap_remove(1);
// after [a,d,b]
if vw_dist*wu_len<wu_dist*vw_len{
// if vwDist == minDist3 then
if vw_dist*uv_len<uv_dist*vw_len{
(u,v)=(v,w);
uv=vw;
// uv_p=pv_w; // unused
// b0, c0 = c0, d0
// b1, c1 = c1, d1
simplex.remove(1);
}else{
simplex.remove(2);
}
}else{
simplex.remove(2);
// elseif wuDist == minDist3 then
if wu_dist*uv_len<uv_dist*wu_len{
(u,v)=(w,u);
uv=wu;
// uv_p=up_w; // unused
// b0, c0 = d0, b0
// b1, c1 = d1, b1
// before [a,b,c,d]
simplex[2]=simplex[1];
simplex.swap_remove(1);
// after [a,d,b]
}else{
simplex.remove(2);
}
}
// local up = u:Cross(p)
@@ -355,10 +361,8 @@ fn reduce_simplex(
// local uDist = uv_up/(u_u*v.magnitude)
// local vDist = uv_pv/(v_v*u.magnitude)
// local minDist2 = math.min(uDist, vDist)
let u_u=u.dot(u);
let v_v=v.dot(v);
let u_dist=uv_up*(v_v*u.length());
let v_dist=uv_pv*(u_u*v.length());
let u_dist=uv_up*v.length();
let v_dist=uv_pv*u.length();
// if vDist == minDist2 then
if v_dist<u_dist{