forked from StrafesNET/roblox-bot-player
use the same math
This commit is contained in:
@@ -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 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 p1=vec3::try_from_f32_array([event.event.position.x,event.event.position.y,event.event.position.z]).unwrap();
|
||||||
let d=p1-p0;
|
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
|
// must be on the segment
|
||||||
if (start_point-p0).dot(d).is_positive()&&(start_point-p1).dot(d).is_negative(){
|
if d0<sp_d&&sp_d<d1{
|
||||||
let sin=(start_point-p0).cross(d);
|
let t0=d1-sp_d;
|
||||||
let distance=(sin.length_squared()/d.length_squared()).divide().wrap_2();
|
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{
|
if distance<best_distance{
|
||||||
best_distance=distance;
|
best_distance=distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
prev_event=event;
|
||||||
};
|
};
|
||||||
for event in &output_events[event_slice.slice.start+1..event_slice.slice.end]{
|
for event in &output_events[event_slice.slice.start+1..event_slice.slice.end]{
|
||||||
f(event);
|
f(event);
|
||||||
|
|||||||
Reference in New Issue
Block a user