DAU 50 PUNCTE!!! Un triunghi este definit prin coordonatele varfurilor sale. Scrieti functii care, pentru doua triunghiuri date, sa studieze daca:
a)au aceeasi arie;
b)sunt asemenea;
c)primul este in interiorul celui de-al doilea.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <math.h>
using namespace std;
struct Punct{
double x,y;
};
struct Triunghi{
Punct M,N,P;
};
Triunghi T1,T2;
double Dist(Punct M, Punct N)
{
double MN=sqrt(pow(M.x-N.x,2)+pow(M.y-N.y,2));
return MN;
}
bool Asemenea(Triunghi T1, Triunghi T2)
{
double a1=Dist(T1.M,T1.N);
double b1=Dist(T1.M,T1.P);
double c1=Dist(T1.N,T1.P);
double a2=Dist(T2.M,T2.N);
double b2=Dist(T2.M,T2.P);
double c2=Dist(T2.N,T2.P);
bool e=(a1/a2==b1/b2 && a1/a2==c1/c2)||
(a1/b2==b1/c2 && a1/b2==c1/a2)||
(a1/c2==b1/a2 && a1/c2==c1/b2);
return e;
}
double Aria(Punct A, Punct B, Punct C)
{
double AB, AC, BC;
AB=Dist(A,B);
AC=Dist(A,C);
BC=Dist(B,C);
double p=(AB+BC+AC)/2;
double r=sqrt(p*(p-AB)*(p-AC)*(p-BC));
return r;
}
bool Interior(Punct A, Triunghi T2)
{
bool inter;
double e=Aria(T2.M,T2.N,T2.P)-(Aria(A,T2.N,T2.P)+Aria(T2.M,A,T2.P)+Aria(T2.M,T2.N,A));
if (e<0) e*=-1;
inter=(e<0.000001);
return inter;
}
int main()
{
cout << "Dati coordonatele varfurilor primului triunghi: \n";
cin >> T1.M.x >> T1.M.y;
cin >> T1.N.x >> T1.N.y;
cin >> T1.P.x >> T1.P.y;
cout << "Dati coordonatele varfurilor triunghiului 2: \n";
cin >> T2.M.x >> T2.M.y;
cin >> T2.N.x >> T2.N.y;
cin >> T2.P.x >> T2.P.y;
if (Aria(T1.M,T1.N,T1.P)==Aria(T2.M,T2.N,T2.P))
cout << "au arii egale";
else cout << "nu au arii egale";
cout << endl;
if (Asemenea(T1,T2))
cout << "sunt asemenea";
else cout << "nu-s asemenea";
cout << endl;
if (Interior(T1.M,T2) && Interior(T1.N,T2) && Interior(T1.P,T2))
cout << "T1 este in interior la T2";
else cout << "T1 nu este in interior la T2";
cout << endl;
return 0;
}
Explicație: