reduce min dist bit width
This commit is contained in:
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user