Задача
Условие взято отсюда
Четырёхугольник [latex]ABCD[/latex] задан на плоскости целочисленными координатами вершин. Определите тип четырёхугольника: квадрат, ромб, прямоугольник, параллелограмм, трапеция, произвольный четырёхугольник. Из характеристик указать наиболее частную.
Тесты
[latex]a_1[/latex] [latex]a_2[/latex] | [latex]b_1[/latex] [latex]b_2[/latex] | [latex]c_1[/latex][latex]c_2[/latex] | [latex]d_1[/latex] [latex]d_2[/latex] | Ответ |
0 0 | 1 0 | 1 1 | 0 1 | квадрат |
0 -3 | 2 0 | 0 3 | -2 0 | ромб |
0 0 | 4 0 | 4 1 | 1 4 | прямоугольник |
0 0 | 10 0 | 12 4 | 2 4 | пaраллелограмм |
0 0 | 2 0 | 1 1 | 0 1 | трапеция |
0 0 | 0 2 | 1 1 | 1 0 | трапеция |
-4 -5 | -15 7 | 5 8 | 6 -7 | произвольный |
0 0 | 1 0 | 10 20 | -5 7 | произвольный |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <iostream> using namespace std; int main() { int a1, a2, b1, b2, c1, c2, d1, d2; double AB, BC, CD, DA, AC, BD, A, B, C, D; cin >> a1 >> a2 >> b1 >> b2 >> c1 >> c2 >> d1 >> d2; AB= ((a1-b1)*(a1-b1)+(a2-b2)*(a2-b2)); //длина стороны во второй степени BC= ((b1-c1)*(b1-c1)+(b2-c2)*(b2-c2)); CD= ((c1-d1)*(c1-d1)+(c2-d2)*(c2-d2)); DA= ((d1-a1)*(d1-a1)+(d2-a2)*(d2-a2)); AC= ((a1-c1)*(a1-c1)+(a2-c2)*(a2-c2)); //длина диагонали во второй степени BD= ((b1-d1)*(b1-d1)+(b2-d2)*(b2-d2)); if(AB==CD && BC==DA) { if (AB==BC){ if(AC==BD){ cout << "квадрат"; } else { cout << "ромб"; } } else if (AC==BD){ cout<< "прямоугольник"; } else{ cout << "параллелограмм"; } } else if ( ((a1-b1)*(c2-d2)==(a2-b2)*(c1-d1)) || ((a1-d1)*(b2-c2)==(a2-d2)*(b1-c1)) ){ cout << "трапеция"; } else { cout << "произвольный"; } return 0; } |
Решение
Для начала стоит найти длины всех сторон:
[latex]AB^{2}=((a1-b1)^{2}+(a2-b2)^{2})[/latex]. (аналогично для остальных сторон)Затем можно найти длины диагоналей четырёхугольника
[latex]AC^{2}=((a1-c1)^{2}+(a2-c2)^{2})[/latex]. (аналогично для [latex]BD[/latex]).Через условие задаем равность противоположных сторон [latex]AB=CD[/latex] и [latex]BC=DA[/latex]:
- У ромба смежные стороны равны, но если у ромба диагонали равны, то это квадрат;
- Если четырёхугольник не является квадратом, но диагонали равны, то это прямоугольник;
- В противном случае — параллелограмм.
Если одна из пар противополижных сторон параллельны, то данный четырёхугольник — трапеция. Впротивном случае — произвольный четырёхугольник.
Код на ideone