Im creating a game, in which you can throw a ball. The ball is fired at a set angle, and then the velocity of the ball is set with this function: (Its copy pasted from another question in here, so in not 100% on the math)

function BallisticVel(target: Vector3, angle: float): Vector3

{

var dir = target - transform.position; // get target direction

var h = dir.y; // get height difference

dir.y = 0; // retain only the horizontal direction

var dist = dir.magnitude ; // get horizontal distance

var a = angle * Mathf.Deg2Rad; // convert angle to radians

dir.y = dist * Mathf.Tan(a); // set dir to the elevation angle

```
dist += h / Mathf.Tan(a); // correct for small height differences
var vel = Mathf.Sqrt(dist * Physics.gravity.magnitude / Mathf.Sin(2 * a)); // calculate the velocity magnitude
var UpVel = dist * Mathf.Sin(angle * (Mathf.PI / 180));
return vel * dir.normalized;
```

}

This gives the right velocity for the ball, to hit the target, but im a little lost in the math.

I would like to know maybe 3 different points in space, where the ball will pass through at 25%, 50%, and 75% of the trajectory. Right now i just calculate 25% of the horizontal distance, added to the launch position, and set the y to StartUpVelocity * (TrajectoryTime / 4) - ½ * Gravity * (TrajectoryTime / 4) in the power of 2.

But this of course isnt right, becouse 25% of time traveled, is not nescisarily 25% of the distance traveled. Theres also the height difference to account for. The ball is fired from y 2.0, to about y 0.1.

Anyone who can show me the proper calculations, to get Vector3 points in the trajectory given the variables in the code above, accounting for height differences?