1) Для некоторых невыпуклых многоугольников Ваш алгоритм не сработает.
Рассматриваемая задача очень хорошо изучена, возможно, я не самый лучший вариант предложу, но один из самых простых. Пусть точка имеет координаты

. Рассмотрим прямую

и проследим, как она пересекает стороны многоугольника (будем рассматривать только те стороны, которые она пересекает, т.е. те, у которых координаты

лежат по разные стороны от

). Можно считать, что точек пересечения всегда чётное число (но нужно отдельно повозиться со случаями пересечения с концами отрезков), причём часть из них (возможно, пустое множество) лежит по одну сторону от

, а часть — по другую (опять-таки нужно возиться со случаями, когда

лежит на одном из отрезков). Точка лежит внутри прямоугольника, если справа (а значит, и слева) лежит нечётное число точек пересечения.
2) Треугольник — фигура выпуклая, здесь прокатит более простой критерий попадания точки внутрь:

+

+

=

(формула основана на сравнении сумм площадей треугольников AOB, BOC, COA и площади треугольника ABC). Здесь, правда, нужно опасаться погрешностей округления, если Вы используете вещественную арифметику.