# Raycast normals acting weird

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.