144. Четырехугольник

 

Произвольный четырехугольник задан на плоскости последовательно координатами своих вершин. Определить количество прямых углов четырехугольника.

 

Вход. Состоит из последовательных координат вершин четырехугольника, значения которых по модулю не превышают 100.

 

Выход. Вывести количество прямых углов четырехугольника.

 

Пример входа

Пример выхода

-1 0 -1 4 2 4 4 1

1

 

 

РЕШЕНИЕ

геометрия

 

Анализ алгоритма

Угол четырехугольника будет прямым, если скалярное произведение векторов, лежащих на прилегающих к нему сторонах, равно нулю. Таким образом проверяем, будет ли каждый из имеющихся четырех углов прямым.

 

Реализация алгоритма

Координаты i-ой вершины храним в ячейках (x[i], y[i]) (0 ≤ i ≤ 3).

 

int x[6], y[6];

 

Вычисление скалярного произведения векторов (x1, y1) и (x2, y2).

 

int scalar(int x1, int y1, int x2, int y2)

{

 return x1 * x2 + y1 * y2;

}

 

Основная часть программы. Читаем координаты вершин четырехугольника.

 

for(res = i = 0; i < 4; i++)

  scanf("%d %d",&x[i],&y[i]);

 

Положим четвертую точку равной нулевой, а пятую равной первой.

 

x[4] = x[0]; y[4] = y[0];

x[5] = x[1]; y[5] = y[1];

 

Вычисляем скалярное произведение векторов (xi+1xi, yi+1yi) и (xi+2xi+1, yi+2yi+1). Если оно равно нулю, то угол с координатами (xi+1, yi+1) прямой, увеличиваем количество прямых углов res на единицу.

 

for(i = 0; i < 4; i++)

if (scalar(x[i+1] - x[i],   y[i+1] - y[i],

           x[i+2] - x[i+1], y[i+2] - y[i+1]) == 0) res++;

 

Выводим количество прямых углов четырехугольника.

 

printf("%d\n",res);