Pagini recente » Cod sursa (job #382933) | Cod sursa (job #497594) | Cod sursa (job #415898) | Cod sursa (job #3004556) | Cod sursa (job #2483532)
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
struct punct
{
double x,y;
};
punct v[1501];
int n,i,j,k;
int nr;
double X0,Y0, X1,Y1, X2,Y2, X3,Y3, X4,Y4;
double l,h, sinus, cosinus;
int st, dr, mij;
bool gasit;
bool cmp(punct a, punct b)
{
return (a.x<b.x || (a.x==b.x && a.y<b.y));
}
double tf(double x)
{
return int(x*10000)/10000.0;
}
int main()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y;
v[i].x=tf(v[i].x);
v[i].y=tf(v[i].y);
}
sort(v+1,v+n+1,cmp);
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
{
X1=tf(v[i].x), Y1=tf(v[i].y);
X2=tf(v[j].x), Y2=tf(v[j].y);
X0=tf((X1+X2)/2), Y0=tf((Y1+Y2)/2);
l=tf(sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)));
h=tf(sqrt(3)/2*l);
if (X1<=X2 && Y1<=Y2)
{
sinus=tf((X2-X1)/l);
cosinus=tf((Y2-Y1)/l);
X3=tf(X0-h*cosinus);
Y3=tf(Y0+h*sinus);
X4=tf(X0+h*cosinus);
Y4=tf(Y0-h*sinus);
}
else if (X1<=X2 && Y1>=Y2)
{
sinus=tf((X2-X1)/l);
cosinus=tf((Y1-Y2)/l);
X3=tf(X0-h*cosinus);
Y3=tf(Y0-h*sinus);
X4=tf(X0+h*cosinus);
Y4=tf(Y0+h*sinus);
}
else if (X1>=X2 && Y1>=Y2)
{
sinus=tf((X1-X2)/l);
cosinus=tf((Y1-Y2)/l);
X3=tf(X0-h*cosinus);
Y3=tf(Y0+h*sinus);
X4=tf(X0+h*cosinus);
Y4=tf(Y0-h*sinus);
}
else if (X1>=X2 && Y1<=Y2)
{
sinus=tf((X1-X2)/l);
cosinus=tf((Y2-Y1)/l);
X3=tf(X0-h*cosinus);
Y3=tf(Y0-h*sinus);
X4=tf(X0+h*cosinus);
Y4=tf(Y0+h*sinus);
}
st=1, dr=n, gasit=0;
while (st<=dr && !gasit)
{
mij=(st+dr)/2;
if (abs(v[i].x-X3)<=0.01)
{
if (abs(v[i].y-Y3)<=0.01)
{
nr++;
gasit=1;
}
else if (v[i].y<Y3)
st=mij+1;
else
dr=mij-1;
}
else if (v[i].x<X3)
st=mij+1;
else
dr=mij-1;
}
st=1, dr=n, gasit=0;
while (st<=dr && !gasit)
{
mij=(st+dr)/2;
if (abs(v[i].x-X4)<=0.01)
{
if (abs(v[i].y-Y4)<=0.01)
{
nr++;
gasit=1;
}
else if (v[i].y<Y4)
st=mij+1;
else
dr=mij-1;
}
else if (v[i].x<X4)
st=mij+1;
else
dr=mij-1;
}
/*for (int k=1;k<=n;k++)
if (abs(v[k].x-X3)<=0.001 && abs(v[k].y-Y3)<=0.001)
{
g<<v[k].x<<" "<<X3<<" "<<v[k].y<<" "<<Y3<<"\n";
nr++;
}*/
g<<X3<<" "<<Y3<<"\n";
for (int k=1;k<=n;k++)
g<<v[k].x<<" "<<abs(v[k].x-X3)<<" "<<v[k].y<<" "<<abs(v[k].y-Y3)<<"\n";
g<<"\n";
g<<X4<<" "<<Y4<<"\n";
for (int k=1;k<=n;k++)
g<<v[k].x<<" "<<abs(v[k].x-X4)<<" "<<v[k].y<<" "<<abs(v[k].y-Y4)<<"\n";
g<<"\n\n";*/
}
g<<nr;
return 0;
}