Fluid Dynamics
By Wyboth
IntroductionWater is essential to our lives. We drink it, we bathe in it, and we use it for travel. In the past centuries, great physicists have discovered the equations which water and other fluids behave by, paving the way for countless inventions we couldn't imagine living without. In Minecraft, water does not play as large of a role as it does in the real world, but it certainly cannot be overlooked. As always, the purpose of this and future experiments will be to discover just how similar Minecraft is to our own world, and today I will focus on water.
In Minecraft, water is a means of fast travel (boats) and a makeshift conveyor belt (flowing water & channels). This article will focus on these two things. Firstly, I will determine the maximum velocity of a boat. Then, I will find the velocity of a player in flowing water.
Materials and MethodsThe first experiment will determine the maximum velocity of a boat. One may think that this would involve going maximum speed in a straight line and comparing coordinates 1 second apart, but it is not that simple. A good metaphor for going maximum speed in a boat is driving in a car with cruise control on. The speed is constant, so the only thing that you can change is the direction you are traveling by steering. Say you turn the steering wheel about 45° clockwise and hold it there. The car would then turn clockwise in a circle until it ran out of gas or you changed the orientation of the steering wheel. You can do the same with a boat, but you would use the direction the player is facing instead of a steering wheel. How "hard" a turn is is determined by how large of an angle there is between the bow of the boat and the direction the player is facing. Here's the problem. A player can never be perfectly lined up with the bow of the boat. Even if the angle is 0.01°, the boat will still move in a circle, albeit a large one. Because of this, boats can never truly travel in a perfectly straight line, so I cannot measure a boat's velocity as if it were doing such.
Because the boat's velocity is not linear but circular, I must use the laws of Centripetal Motion to determine the velocity. This is most easily done by constructing a sine equation of the boat's motion. To do this, I must first gather data of a boat traveling in a circle. For this experiment, I will create a superflat world filled with water, travel to the origin, and set down a boat. I will enter it and position my player so that he is looking about 15° to the right of the bow. I will then turn on F3 options and accelerate to full speed. When I am at full speed and traveling in a circle, I will record my gameplay with FRAPS. I will continue this until I had made one complete revolution. I will then perform frame analysis with VirtualDub to get my coordinates for each second. For the sine wave, it does not matter if I choose the x coordinate or the z coordinate. I will choose the z coordinate. The x-axis of the graph is time, and the y-axis is the z coordinate. Here is the graph.
Note that this is the raw data; no model sine wave has been constructed yet.
The first step is to plot a standard sine wave (y = sin(x)) with the data. From there, I will apply tweaks to it until it matches the data.
Obviously, the two are completely different. The first step is to find the amplitude of the wave. The amplitude is the "height" of the wave, or the distance from the middle of the wave to the crest or trough. The wave's crest is 10.08194, and the wave's trough is -150.18664 m. The formula for amplitude is this:
a = (c - t) / 2
A is amplitude, c is the crest, and t is the trough. I will substitute the known values into the equation.
a = ((10.08194) - (-150.18664)) / 2
a = (160.26858) / 2
a = 80.13429
The amplitude needs to be multiplied to the front of the equation. Thus, the equation becomes: y = 80.13429 * sin(x). This is the new graph.
The next step is to apply a vertical translation so that the two sine wave's centers are aligned. The equation for vertical translation is this:
v
t = c - a
V
t is the vertical translation, c is the crest, and a is the amplitude. I will substitute the known values.
v
t = 10.08194 - 80.13429
v
t = -70.05235
The vertical translation is added to the end of the sine equation. Note that I am adding a negative, so it will be subtracted instead. The new equation is: y = 80.13429 * sin(x) - 70.05235. Here is the graph.
The crests and troughs of the two waves can now be seen to have the same y values. The next step is to change the period of the graph. The period is the time it takes for one complete revolution. This is usually the time from crest to crest or trough to trough. However, since there is only one crest and one trough, I cannot find the period in this way. However, I do know that the distance from crest to trough is half of the distance from crest to crest, and I do have a crest and a trough, so I can find the period using this formula:
t = 1 / ((2 * (c
x - t
x)) / (2 * pi))
The trough occurs at an x value of 21.067 seconds. The crest occurs at an x value of 57.033 seconds. I will substitute the known values.
t = 1 / ((2 * (57.033 - 21.067)) / (2 * pi))
t = 1 / ((2 * (35.967)) / (2 * pi))
t = 1 / ((1079/15) / (2 * pi))
t = 1 / 11.4485455730770044969
t = 0.0873473397661666330553159511
The period is multiplied by x in the sine equation, changing the equation to: y = 80.13429 * sin( 0.0873473397661666330553159511 * x) - 70.05235. This is the new graph.
Only one step remains: the phase shift. Once this is applied, the two will overlap, and the equation will be complete. Here is the formula for phase shift:
p
s =
t * (c
xd - c
xs)
P
s is phase shift, c
xd is the data's crest's x-coordinate, and c
xs is the sine wave's crest's x-coordinate. I will substitute the known values.
p
s = 0.0873473397661666330553159511 * (57.033 - 17.9833)
p
s = 0.0873473397661666330553159511 * 39.0497
This number is actually irrational, with the 9 repeating infinitely. To represent the phase shift accurately, it must be written in rational form.
p
s = 0.0873473397661666330553159511 * (781 / 20)
p
s = 3.410913617868807020810087890455
This number, although positive, must actually be subtracted from x to function properly. The final equation is this: y = 80.13429 * sin( 0.0873473397661666330553159511 * x - 3.410913617868807020810087890455) - 70.05235. Here is the graph.
As you can see, the two perfectly overlap each other. The equation is correct. Now, I will find the velocity based on the properties I found earlier while creating the sine wave. This is the equation for tangential velocity:
v = (2 * pi * r) /
tIt should be noted that the period of the boat and the period of the sine wave are not the same. A normal sine wave has a period of 2 * pi, so to find the true period of the boat, I must use this equation:
t = (2 * pi) / p
P is the sine wave's period. I will substitute values.
t = 6.2831853071795865 / 0.0873473397661666330553159511
t = 1079/15 s
It should also be noted that the radius of the circle is equal to the amplitude of the sine wave. With all of these values substituted into the equation, it becomes:
v = (6.2831853071795865 * 80.13429 m) / (1079/15 s)
v = 503.498593529268066671085 m / (1079/15 s)
v = 6.999517055550529193759291 m/s -> 7 m/s
The next experiment will determine the velocity of a player in flowing water. This will be accomplished by making a small channel of flowing water, walking to one end and holding W to keep myself in place, turning on F3 options, and then recording with FRAPS when I release W. I will then perform frame analysis with VirtualDub to determine the displacement, and use physics formulas to find the velocity.
Here is the experimental setup.
At one point close to the end of the channel, the player's z coordinate is -1010.37. 1/30
th of a second later, his z coordinate is -1010.44. This means that the player traveled 0.07 m in 1/30 seconds, or 2.1 m/s.
ResultsA boat's maximum velocity is 7 m/s, and a player travels at 2.1 m/s in flowing water.
DiscussionFirstly, I will cover sources of error. The only source of error is inexact frame display, and it only affects the boat experiment. This means that the Minecraft frame didn't update
exactly when the boat would have reached the crest or trough, so the number is slightly off. This is why the velocity didn't show up to be exactly 7. However, as you can see, the error caused by it was very small (6.9 * 10
-3% to be exact).
I beamed when I discovered that boats travel at 7 m/s, because it meant that my five hours of frequently interrupted work had paid off. Unlike most results in Minecraft Science, this number is a perfect whole number, which told me that I had done it correctly for sure. This knowledge could be applied for people traveling over water, such as those using AMIDST to find a mushroom island, so that they could know how long their trip would be. This could also be useful to mapmakers, so they would know just about how long it would take for a player to traverse their water level on a boat. The flowing water velocity would be useful to auto-farm designers, as they could calculate how long it would be before their harvested crop reaches a collection point. As always, if the reader can think of any other implications of this data, he or she should post a comment with his or her idea.
Works CitedMinecraft, developed by the Mojang Team
Kinematic Equations, Isaac Newton
Centripetal Motion Equations, Johannes Kepler
Post Scriptum