1) Для некоторых невыпуклых многоугольников Ваш алгоритм не сработает.
Рассматриваемая задача очень хорошо изучена, возможно, я не самый лучший вариант предложу, но один из самых простых. Пусть точка имеет координаты
. Рассмотрим прямую
и проследим, как она пересекает стороны многоугольника (будем рассматривать только те стороны, которые она пересекает, т.е. те, у которых координаты
лежат по разные стороны от
). Можно считать, что точек пересечения всегда чётное число (но нужно отдельно повозиться со случаями пересечения с концами отрезков), причём часть из них (возможно, пустое множество) лежит по одну сторону от
, а часть — по другую (опять-таки нужно возиться со случаями, когда
лежит на одном из отрезков). Точка лежит внутри прямоугольника, если справа (а значит, и слева) лежит нечётное число точек пересечения.
2) Треугольник — фигура выпуклая, здесь прокатит более простой критерий попадания точки внутрь:
+
+
=
(формула основана на сравнении сумм площадей треугольников AOB, BOC, COA и площади треугольника ABC). Здесь, правда, нужно опасаться погрешностей округления, если Вы используете вещественную арифметику.