Use an axis and an angle, then check whether the proposed orientation dot axis is within the angle, it's a cone check, if both axes are normalised the dot product will be > cos(angle) if it is within the cone

In 2d, shoot a ray out in any direction. If it crosses the lines of the shape an even number of times (0 is even here), you are outside. If it crosses odd number of times you are inside.

Are you using floating point or fixed point, I don't understand what you mean by this: of floating range from 24 bit to like 16 bit.

Using 1/x is going to be a lot more accurate than a (poor) approximation which is what the Taylor Series expansion about 1 will give you. Some functions aren't approximated very well at all by Taylor Series (of which McLaurin series is just a special case), e.g. sqrt(x).

Or you could use the Laurent Series, f(x) = x^{-1}

Absolute value of dot product is 1 edit: if normalised, product of lengths otherwise. Cross product will have length zero. Up to accuracy limits of course.

I saw this about a year ago in a graphics engine, and I've kept a screenshot to remind me of it:

float PI = 57.29578f; // (7/22)*180

I love this on two levels. First, this number isn't the universal constant pi. That should be enough, but... the number isn't the result of the calculation in the comment, either.

7/22 is approximately pi. The number be assigned here is actually pi/180, and it was used in the code to convert radians to degrees.

I thought that (in the real world), non-guided bombs fall straight down.

Nope, they start off with the velocity the craft had when the bomb was released, then that initial velocity is influenced by gravity (and drag if you factor that in). Otherwise, dropping a cup whilst inside an aeroplane would mean it would shoot to the back of the plane with remarkable speed ;)

The easy (cheating) way is to make the bezier curve centred on the player, If they aren't moving too fast that looks ok.

Othwerwise you have to update the control points as the boomerang is in flight, again you can centre it on the player but keep updating the control points as the player moves, with the final point always on the player.

You could also make the boomerang miss and wait until it is picked up again/destroyed before letting the player use it again, I think 2d zelda did this, not sure. However that was just a back and forward along a straight line boomerang not on a bezier.

where a and b are the endpoints of the line and t ranges from 0 to 1 (unless you want the infinite line through the points, where t can be any real number).

Just set a = (2, 0, -1) and b = (3, 4, 5) and you are good to go... isn't that what you did in the 2d case?

Do it in the way that is easiest for you, the reader of the code, to understand.

Although a good idea would be to have +1 for O and -1 for X instead of 1 and 2, in that way you can sum up all 3 rows (in a loop), all 3 columns (in a loop) and both diagonals and if they sum to +3 O has a winning line, -3 means X has a winning line. You can exit the test early if you find a win for either player.

More sophisticated would be to use a bitboard but Alvaro will probably be along in a minute to boggle your mind with that idea ;)