You are not logged in.
Pages: 1
/// intercept_course_precise(origin,target,bulletspeed);
//
// Returns the course direction required to hit a moving target
// at a given projectile speed, or (-1) if no solution is found.
// It works even if target is moving away or towards projectile.
//
// origin instance with position (x,y), real
// target instance with position (x,y) and (speed), real
// bulletspeed the speed of the projectile, real
//
/// GMLscripts.com/license
function intercept_course_precise(origin,target,bulletspeed)
{
var di;var dist;var alpha;var a;var b;var c;var delta;var time;var final;
di = point_direction(origin.x,origin.y,target.x,target.y);
dist = point_distance(origin.x,origin.y,target.x,target.y);
alpha = target.direction - di;
//using bhaskara to solve cosine law
a = sqr(target.speed) - sqr(bulletspeed);
b = -2*dist*target.speed*dcos(alpha);
c = sqr(dist);
//cauculating delta
delta = sqr(b) - (4*a*c);
//checks if delta is negative if it is not uses bhaskara formula
if sign(delta) == -1{return -1;}
time = (-b-sqrt(delta))/(2*a);
//them cauculate sides and apply sine law
safety = clamp(dsin(alpha)*(target.speed*time)/(bulletspeed*time),-1,1);
if safety == NaN{return -1;}
final = di + darcsin(safety);
return final;
}
Last edited by Perg (2021-04-05 07:48:09)
Offline
I need some explanation about what this does differently than the existing function.
https://www.gmlscripts.com/script/intercept_course
Apologies for the late reply.
Abusing forum power since 1986.
Offline
Pages: 1