((A.x - B.x)*(C.y
((A.x - B.x)*(C.y - B.y)-
(C.x - B.x)*(A.y - B.y) <= 0))
return 1;
/* Условие не выполнено - возвращаем 0. */
return 0;
}
/* Функция, которая отвечает на вопрос задачи. *
* A - точка; *
* polygon - массив вершин многоугольника; *
* num - число вершин многоугольника. */
int isInternalPoint (point A, point *polygon,
int num)
{
/* Это счетчик числа пересечений сторон с *
* горизонтальной прямой, проходящей через A *
* и лежащих левее A. */
int counter = 0;
int i;
/* Проверяем все стороны многоугольника, *
* соединяющие вершины с соседними номерами */
for (i = 0; i < num - 1; i++)
{
/* Если точка лежит на стороне, сразу *
* возвращаем 1 */
if (inBetween (polygon [i], A, polygon [i+1]))
return 1;
/* иначе проверяем, пересекает ли отрезок *
* прямую. */
counter += isCrossed (polygon [i],
polygon [i + 1], A);
}
/* Точно также проверяем сторону многоугольника, *
* соединяющую первую и последнюю вершины. */
if (inBetween
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа