1) Для некоторых невыпуклых многоугольников Ваш алгоритм не сработает.
Рассматриваемая задача очень хорошо изучена, возможно, я не самый лучший вариант предложу, но один из самых простых. Пусть точка имеет координаты
![$(x_0, y_0)$ $(x_0, y_0)$](https://dxdy-03.korotkov.co.uk/f/a/9/0/a903f939f6fb649debe1561ecbb18c6682.png)
. Рассмотрим прямую
![$y=y_0$ $y=y_0$](https://dxdy-02.korotkov.co.uk/f/d/d/f/ddfbe0a85ab118c8632db3d3dffabb2b82.png)
и проследим, как она пересекает стороны многоугольника (будем рассматривать только те стороны, которые она пересекает, т.е. те, у которых координаты
![$y$ $y$](https://dxdy-02.korotkov.co.uk/f/d/e/c/deceeaf6940a8c7a5a02373728002b0f82.png)
лежат по разные стороны от
![$y_0$ $y_0$](https://dxdy-02.korotkov.co.uk/f/1/4/a/14adeddbb1889c9aba973ba30e7bce7782.png)
). Можно считать, что точек пересечения всегда чётное число (но нужно отдельно повозиться со случаями пересечения с концами отрезков), причём часть из них (возможно, пустое множество) лежит по одну сторону от
![$x_0$ $x_0$](https://dxdy-03.korotkov.co.uk/f/e/7/1/e714a3139958da04b41e3e607a54445582.png)
, а часть — по другую (опять-таки нужно возиться со случаями, когда
![$x_0$ $x_0$](https://dxdy-03.korotkov.co.uk/f/e/7/1/e714a3139958da04b41e3e607a54445582.png)
лежит на одном из отрезков). Точка лежит внутри прямоугольника, если справа (а значит, и слева) лежит нечётное число точек пересечения.
2) Треугольник — фигура выпуклая, здесь прокатит более простой критерий попадания точки внутрь:
![$|x_0y_1-x_1y_0+x_1y_2-x_2y_1+x_2y_0-x_0y_2|$ $|x_0y_1-x_1y_0+x_1y_2-x_2y_1+x_2y_0-x_0y_2|$](https://dxdy-04.korotkov.co.uk/f/f/4/e/f4e0ae7bcec9874cf02f163ccd34e93582.png)
+
![$|x_0y_1-x_1y_0+x_1y_3-x_3y_1+x_3y_0-x_0y_3|$ $|x_0y_1-x_1y_0+x_1y_3-x_3y_1+x_3y_0-x_0y_3|$](https://dxdy-03.korotkov.co.uk/f/2/2/1/2216e805e097d7b222d2ade97f58da2282.png)
+
![$|x_0y_2-x_2y_0+x_2y_3-x_3y_2+x_3y_0-x_0y_3|$ $|x_0y_2-x_2y_0+x_2y_3-x_3y_2+x_3y_0-x_0y_3|$](https://dxdy-01.korotkov.co.uk/f/8/2/e/82ea084b89c1f543bd06f873a15dc53582.png)
=
![$|x_1y_2-x_2y_1+x_2y_3-x_3y_2+x_3y_1-x_1y_3|$ $|x_1y_2-x_2y_1+x_2y_3-x_3y_2+x_3y_1-x_1y_3|$](https://dxdy-03.korotkov.co.uk/f/6/d/a/6da4a94b83adb74eed50e44762be406682.png)
(формула основана на сравнении сумм площадей треугольников AOB, BOC, COA и площади треугольника ABC). Здесь, правда, нужно опасаться погрешностей округления, если Вы используете вещественную арифметику.