Sorry I for whatever reason didn’t see this question when you originally posted it.

For this I would use the velocity equation to get the direction you’re object is going to be facing and then from there you can use `CFrame.lookAt`

or `CFrame.fromMatrix`

.

```
local g, v0, x0 -- define these
local function x(t)
return 0.5*g*t*t + v0*t + x0
end
local function v(t)
return g*t + v0
end
local t = 0
game:GetService("RunService").Heartbeat:Connect(function(dt)
t = t + dt
local position = x(t)
local velocity = v(t)
local cframe = CFrame.lookAt(position, position + velocity)
end)
```

Now the one issue you may find with this is when the parabola reaches its peak then velocity will have a magnitude of zero (as shown when deriving the max jump height in the OP).

In that case we need to handle the situation a little differently:

```
local t = 0
game:GetService("RunService").Heartbeat:Connect(function(dt)
t = t + dt
local position = x(t)
local velocity = v(t)
if velocity:Dot(velocity) == 0 then -- magnitude^2 == 0
velocity = v(t - dt) * Vector3.new(1, 0, 1)
end
local cframe = CFrame.lookAt(position, position + velocity)
end)
```

Hope that helps!