From 0641de2be110b79fa5ede3294812cd24b01e9120 Mon Sep 17 00:00:00 2001 From: Andrew Conrad Date: Fri, 1 Apr 2016 11:31:24 -0500 Subject: [PATCH] Misc changes to "Vector math" --- tutorials/vector_math.rst | 44 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/tutorials/vector_math.rst b/tutorials/vector_math.rst index 1972a31c0..a47a813ad 100644 --- a/tutorials/vector_math.rst +++ b/tutorials/vector_math.rst @@ -138,7 +138,7 @@ numbers, also named **scalars**. :: - # Multiplication of vector by scalar + # multiplication of vector by scalar var c = a*2.0 # will result in c vector, with value (4,10) @@ -156,10 +156,8 @@ Perpendicular vectors ~~~~~~~~~~~~~~~~~~~~~ Rotating a 2D vector 90° degrees to either side, left or right, is -really easy, just swap x and y, then - -negate either x or y (direction of rotation depends on which is -negated). +really easy, just swap x and y, then negate either x or y (direction of +rotation depends on which is negated). .. image:: /img/tutovec15.png @@ -247,7 +245,7 @@ much the same: var s = a.x*b.x + a.y*b.y + a.z*b.z -I know, it's totally meaningless! you can even do it with a built-in +I know, it's totally meaningless! You can even do it with a built-in function: :: @@ -273,7 +271,7 @@ At this point, this tutorial will take a sharp turn and focus on what makes the dot product useful. This is, **why** it is useful. We will focus one by one in the use cases for the dot product, with real-life applications. No more formulas that don't make any sense. Formulas will -make sense *once you learn* why do they exist for. +make sense *once you learn* what they are useful for. Siding ------ @@ -415,7 +413,7 @@ popular belief) you can also use their math in 2D: Unit vectors that are perpendicular to a surface (so, they describe the orientation of the surface) are called **unit normal vectors**. Though, -usually they are just abbreviated as \*normalsÄ. Normals appear in +usually they are just abbreviated as \*normals. Normals appear in planes, 3D geometry (to determine where each face or vertex is siding), etc. A **normal** *is* a **unit vector**, but it's called *normal* because of it's usage. (Just like we call Origin to (0,0)!). @@ -469,7 +467,7 @@ built-in type that handles this. Basically, N and D can represent any plane in space, be it for 2D or 3D (depending on the amount of dimensions of N) and the math is the same -for both. It's the same as before, but D id the distance from the origin +for both. It's the same as before, but D is the distance from the origin to the plane, travelling in N direction. As an example, imagine you want to reach a point in the plane, you will just do: @@ -486,10 +484,16 @@ the plane, we do the same but adjusting for distance: var distance = N.dot(point) - D +The same thing, using a built-in function: + +:: + + var distance = plane.distance_to(point) + This will, again, return either a positive or negative distance. Flipping the polarity of the plane is also very simple, just negate both -N and D. this will result in a plane in the same position, but with +N and D. This will result in a plane in the same position, but with inverted negative and positive half spaces: :: @@ -497,7 +501,7 @@ inverted negative and positive half spaces: N = -N D = -D -Of course, Godot implements this operator in :ref:`Plane `, +Of course, Godot also implements this operator in :ref:`Plane `, so doing: :: @@ -608,13 +612,13 @@ Code should be something like this: for p in planes_of_A: var all_out = true for v in points_of_B: - if (p.distance_to(v) < 0): + if (p.distance_to(v) < 0): all_out = false break if (all_out): # a separating plane was found - # do not continue testing + # do not continue testing overlapping = false break @@ -624,7 +628,7 @@ Code should be something like this: for p in planes_of_B: var all_out = true for v in points_of_A: - if (p.distance_to(v) < 0): + if (p.distance_to(v) < 0): all_out = false break @@ -741,7 +745,7 @@ points of the **ABC** triangle: var D = P.dot(A) -Fantastic! you computed the plane from a triangle! +Fantastic! You computed the plane from a triangle! Here's some useful info (that you can find in Godot source code anyway). Computing a plane from a triangle can result in 2 planes, so a sort of @@ -779,8 +783,8 @@ Collision detection in 3D ~~~~~~~~~~~~~~~~~~~~~~~~~ This is another bonus bit, a reward for being patient and keeping up -with this long tutorial. Here is another piece of wisdom. This maybe is -not something with a direct use case (Godot already does collision +with this long tutorial. Here is another piece of wisdom. This might +not be something with a direct use case (Godot already does collision detection pretty well) but It's a really cool algorithm to understand anyway, because it's used by almost all physics engines and collision detection libraries :) @@ -819,13 +823,13 @@ So the final algorithm is something like: for p in planes_of_A: var all_out = true for v in points_of_B: - if (p.distance_to(v) < 0): + if (p.distance_to(v) < 0): all_out = false break if (all_out): # a separating plane was found - # do not continue testing + # do not continue testing overlapping = false break @@ -835,7 +839,7 @@ So the final algorithm is something like: for p in planes_of_B: var all_out = true for v in points_of_A: - if (p.distance_to(v) < 0): + if (p.distance_to(v) < 0): all_out = false break