Friday, November 1, 2019

movement - How do I calculate the position of a vehicle moving between tiles, over time?


I'm working on a small multiplayer game where players can create cities, and these cities will be placed on what's called the "world map." The world map is basically a giant coordinate plane made up of tiles, and the server will load the "world map" in chunks from the database relative to a player's position on the world map.


Now, I want players to be able to send planes from their city to another spot/tile anywhere on the world map. Say for instance player who owns City 1 at position 10,10, wants to create an oil_well at position 70,30. I want a plane to fly from the departure point to arrival point, and client that loads the chunk will see that plane flying across the map.


How can I make the server calculate where the plane is? I have the following information:


departure_time, origin_x, origin_y, arrival_x, arrival_y, speed. speed is the time in seconds that a plane can cross a tile on the world map.



I also have distance, which is simply calculated as (distance formula):


var distance = Math.sqrt(Math.pow( data.arrival_x - data.origin_x , 2) + Math.pow( data.arrival_y - data.origin_y , 2));

Again, how can I calculate the current position of a moving plane on this world map? Because the plane can fly at many different angles, depending on the angle of departure point → arrival point.



Answer



Scalar multiplication.


Assuming the plane moves at constant speed, you can determine how far along it is (0 meaning at departure_point and 1 meaning at arrival_point)


progress = distance / speed * time_elapsed

You can also compute a vector (x,y) representing the translation of the airplane from its departure point to its arrival point, by subtracting one position from the other.



x = arrival_x - departure_x
y = arrival_y - departure_y

translation vector


Then simply multiply that translation vector x,y by the proportion of progress that has been made.


moved_by_x = x * progress
moved_by_y = y * progress

You can then add that vector to the departure point to find the point where the plane should be.


plane_x = departure_x + moved_by_x

plane_y = departure_y + moved_by_y

0.0 0.2 0.5 0.9


departure point red, arrival point blue, plane position orange


No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...