use the same math

This commit is contained in:
2026-03-17 11:07:44 -07:00
parent 20e1163468
commit fed0c3afc5

View File

@@ -91,15 +91,20 @@ impl Bvh{
let p0=vec3::try_from_f32_array([prev_event.event.position.x,prev_event.event.position.y,prev_event.event.position.z]).unwrap();
let p1=vec3::try_from_f32_array([event.event.position.x,event.event.position.y,event.event.position.z]).unwrap();
let d=p1-p0;
prev_event=event;
let d0=p0.dot(d);
let d1=p1.dot(d);
let sp_d=start_point.dot(d);
// must be on the segment
if (start_point-p0).dot(d).is_positive()&&(start_point-p1).dot(d).is_negative(){
let sin=(start_point-p0).cross(d);
let distance=(sin.length_squared()/d.length_squared()).divide().wrap_2();
if d0<sp_d&&sp_d<d1{
let t0=d1-sp_d;
let t1=sp_d-d0;
let dt=d1-d0;
let distance=(((p0*t0+p1*t1)/dt).divide().wrap_1()-start_point).length_squared();
if distance<best_distance{
best_distance=distance;
}
}
prev_event=event;
};
for event in &output_events[event_slice.slice.start+1..event_slice.slice.end]{
f(event);