These are some thoughts on Trigonometry that I wanted to write down, and someone, somewhere may want to read. But probably not. If you're not into it, turn back immediately.
In a top-down view on a two dimensional plane, you can face any direction and move in a forward direction by moving on the x-axis by the cosine of your rotation and moving on the y-axis by the sine of your rotation.
This seems to require a physical orientation in the world, but this physical limitation is only on the surface. We can take one step back and use these abilities in more subtle ways. Imagine a side view on a plane in which you can move left and right, and jump up and fall back down to the ground.
Let us first think of the left and right movement in terms of trigonometry. Facing right means 0 degrees and so we can move on x by the cosine of our rotation. Facing left is 180 degrees, and we move on x by the cosine of our rotation. Let's maintain a logical rotation factor called xf. When standing still (not moving at all) set xf to pi / 2, ie. 90 degrees. And now, constantly move on the x-axis by the cosine of this rotation. Yes, even when standing still, apply movement. As expected, we won't actually move because the cosine of 90 degrees is 0. When we move right, decrease the rotation xf by some constant (we'll call it an acceleration factor) until the rotation is 0 degrees. Likewise, when moving left increase xf by the acceleration factor until the rotation is 180 degrees.
We have implemented horizontal movement in terms of cosine with a built in acceleration and deceleration. This should seem pretty amazing. It does to me, at least.
Now we can think of jumping up and falling down in the same terms. Let us maintain another logical rotation, we'll call it yf. Any time that you hit the ground, set yf to 180 degrees. Constantly apply movement on the y-axis by the sine of yf. At the same time, constantly increase yf to 270 degrees if it is ever less. To jump, set yf to 90 degrees.
You may realize that this not only implements jumping, but also applies a deceleration to the upward movement, and becomes a falling acceleration up to a terminal velocity.
Finally, I want to mention walking on a slope. This is done by standing on the slope (how to do this is a topic of collision detection) and then determine the angle of the slope using the arctangent function. Then, it's as simple as moving on x by the cosine of this angle, and on y by the sine.
In a top-down view on a two dimensional plane, you can face any direction and move in a forward direction by moving on the x-axis by the cosine of your rotation and moving on the y-axis by the sine of your rotation.
This seems to require a physical orientation in the world, but this physical limitation is only on the surface. We can take one step back and use these abilities in more subtle ways. Imagine a side view on a plane in which you can move left and right, and jump up and fall back down to the ground.
Let us first think of the left and right movement in terms of trigonometry. Facing right means 0 degrees and so we can move on x by the cosine of our rotation. Facing left is 180 degrees, and we move on x by the cosine of our rotation. Let's maintain a logical rotation factor called xf. When standing still (not moving at all) set xf to pi / 2, ie. 90 degrees. And now, constantly move on the x-axis by the cosine of this rotation. Yes, even when standing still, apply movement. As expected, we won't actually move because the cosine of 90 degrees is 0. When we move right, decrease the rotation xf by some constant (we'll call it an acceleration factor) until the rotation is 0 degrees. Likewise, when moving left increase xf by the acceleration factor until the rotation is 180 degrees.
We have implemented horizontal movement in terms of cosine with a built in acceleration and deceleration. This should seem pretty amazing. It does to me, at least.
Now we can think of jumping up and falling down in the same terms. Let us maintain another logical rotation, we'll call it yf. Any time that you hit the ground, set yf to 180 degrees. Constantly apply movement on the y-axis by the sine of yf. At the same time, constantly increase yf to 270 degrees if it is ever less. To jump, set yf to 90 degrees.
You may realize that this not only implements jumping, but also applies a deceleration to the upward movement, and becomes a falling acceleration up to a terminal velocity.
Finally, I want to mention walking on a slope. This is done by standing on the slope (how to do this is a topic of collision detection) and then determine the angle of the slope using the arctangent function. Then, it's as simple as moving on x by the cosine of this angle, and on y by the sine.
Comments
Post a Comment