Hello,
I was scripting raycasts and everything was fine until I started printing the normals of the raycasts. When getting a normal of a flat part from the top the normal should be 0,1,0
, but instead it is printing things like 0,1,4.3711388286738e-08
out as the normal. When I get the top normal of the baseplate everything is fine so I don’t know what is causing the error.
4.3711388286738e-08
means 4.3711388286738 * 10^-8
, which is extremely close to 0
(about 0.0000000437
). The reason why it’s not exactly 0
is because of some small inaccuracy in calculating the normal.
Also why is the normal of a 45 degree rotated part not 0.5? It was something close to 0.7.
The value close to 0.7 is the sine of a 45 degree angle (or cosine, because sine and cosine are the same for 45 degrees).
The length of the normal vector is always 1 (possibly not exactly because of some inaccuracy, but almost). And the length of a 3d vector is sqrt(x^2+y^2+z^2)
. For example, if the part was rotated 45
degrees around the x axis, its top normal would be (0, sin(45), sin(45))
. sqrt(0^2+sin(45)^2+sin(45)^2)
is 1
. A vector with values (0, 0.5, 0.5)
would have the same direction, but its length would be 1/sqrt(2)
.
How do I know when to use sin vs cos?
Perhaps this picture I found from google helps explain it. θ is the angle. Adjacent and opposite are the lengths of the sides that have a ninety degree angle between them. Adjacent refers to the side that forms θ with the longest side, which is called hypotenuse.
Edit: I apparently added the image incorrectly, so it didn’t show up.
Edit: Now I got it to appear.