//Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). //Определить будут ли они вершинами параллелограмма.
#include <iostream> #include <math.h> using namespace std;
//длина стороны АВ double side(double xa, double ya, double xb, double yb) {return sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya));}
//отклонение С от АВ double deviation(double x1, double y1, double x2, double y2, double x3, double y3) { double r=side(x1,y1,x2,y2); double A=(y2-y1)/r; double B=(x2-x1)/r; double C=(x1*(y2-y1)-y1*(x2-x1))/r; return (x3*A-y3*B-C); }
int main() { setlocale(LC_ALL, ""); double x[4],y[4]; int i,j, yes=0;
cout<<"Введите координаты точек\n"; for(i=0;i<4;i++) { cout<<"x["<<i+1<<"] = "; cin>>x[i]; cout<<"y["<<i+1<<"] = "; cin>>y[i]; }
//Проверка на совпадение двух точек for(i=0;i<3;i++) for(j=i+1;j<4;j++) if(side(x[i],y[i],x[j],y[j])==0) { cout<<"Две точки совпадают\n"; system("pause"); return 0; } //Проверка на находжение трех точек на одной прямой double dev12_3 = deviation(x[0],y[0],x[1],y[1],x[2],y[2]); double dev12_4 = deviation(x[0],y[0],x[1],y[1],x[3],y[3]); double dev23_4 = deviation(x[1],y[1],x[2],y[2],x[3],y[3]); double dev13_4 = deviation(x[0],y[0],x[2],y[2],x[3],y[3]); if(dev12_3==0 || dev12_4==0 || dev23_4==0 || dev13_4==0) { cout<<"Три точки лежат на одной прямой\n"; system("pause"); return 0; }
cout<<"Множество точек образует четырехугольник\n"; system("pause");
//определяем диагональ, проходящую через А1 //если А1А2 - диагональ, попарные стороны "А1А3/А2А4" "А2А3/А1А4" //если А1А3 - диагональ, попарные стороны "А1А2/А3А4" "А2А3/А1А4" //если А1А4 - диагональ, попарные стороны "А1А2/А3А4" "А2А4/А1А3"
double dev13_2 = deviation(x[0],y[0],x[2],y[2],x[1],y[1]);
if(dev12_3*dev12_4<0) //диагональ 12 {if(side(x[0],y[0],x[2],y[2])==side(x[1],y[1],x[3],y[3]) && side(x[1],y[1],x[2],y[2])==side(x[0],y[0],x[3],y[3])) yes++;} else { if(dev13_2*dev13_4<0) //диагональ 13 {if(side(x[0],y[0],x[1],y[1])==side(x[2],y[2],x[3],y[3]) && side(x[1],y[1],x[2],y[2])==side(x[0],y[0],x[3],y[3])) yes++;} else //диагональ 14 {if(side(x[0],y[0],x[1],y[1])==side(x[2],y[2],x[3],y[3]) && side(x[0],y[0],x[2],y[2])==side(x[1],y[1],x[3],y[3])) yes++;} }
if(yes) cout<<"\nЭто - параллелограмм\n"; else cout<<"\nЭто - не параллелограмм\n";
system("pause"); return 0; }
|