don't split ratio

This commit is contained in:
Quaternions 2025-02-05 12:44:44 -08:00
parent b7a86467d8
commit 091e8a4453

@ -1,3 +1,4 @@
use strafesnet_common::integer::Planar64;
use strafesnet_common::{model,integer};
use strafesnet_common::integer::{vec3::Vector3,Fixed,Ratio};
@ -81,12 +82,12 @@ fn planes_to_faces(face_list:std::collections::HashSet<Face>)->Result<Faces,Plan
// test if any *other* faces occlude the intersection
for &new_face in &remaining_face_refs{
// new face occludes intersection point
if new_face.dot*intersection.den<new_face.normal.dot(intersection.num){
if (new_face.dot.fix_2()/Planar64::ONE).lt_ratio(new_face.normal.dot(intersection.num)/intersection.den){
// replace one of the faces with the new face
// dont' try to replace face0 because we are exploring that face in particular
if let Some(new_intersection)=solve3(face0,new_face,face2){
// face1 does not occlude (or intersect) the new intersection
if face1.dot*new_intersection.den>face1.normal.dot(new_intersection.num){
if (face1.dot.fix_2()/Planar64::ONE).gt_ratio(face1.normal.dot(intersection.num)/intersection.den){
remaining_face_refs.remove(new_face);
face1=new_face;
intersection=new_intersection;
@ -95,7 +96,7 @@ fn planes_to_faces(face_list:std::collections::HashSet<Face>)->Result<Faces,Plan
}
if let Some(new_intersection)=solve3(face0,face1,new_face){
// face2 does not occlude (or intersect) the new intersection
if face2.dot*new_intersection.den>face2.normal.dot(new_intersection.num){
if (face2.dot.fix_2()/Planar64::ONE).gt_ratio(face2.normal.dot(intersection.num)/intersection.den){
remaining_face_refs.remove(new_face);
face2=new_face;
intersection=new_intersection;
@ -122,7 +123,7 @@ fn planes_to_faces(face_list:std::collections::HashSet<Face>)->Result<Faces,Plan
}
if let Some(new_intersection)=solve3(new_face,face1,face2){
// face0 does not occlude (or intersect) the new intersection
if face0.dot*new_intersection.den>face0.normal.dot(new_intersection.num){
if (face0.dot.fix_2()/Planar64::ONE).lt_ratio(face0.normal.dot(intersection.num)/intersection.den){
// abort! reject face0 entirely
continue 'face;
}