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 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);
|
||||
|
||||
Reference in New Issue
Block a user