Pagini recente » Rating Adrian Atasiei (adrriann) | Cod sursa (job #975157) | Cod sursa (job #1282211) | Cod sursa (job #1061125) | Cod sursa (job #2774582)
#include <iostream>
#include <vector>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("infasuratoare.in");
ofstream g("infasuratoare.out");
struct Punct
{
double x, y;
};
int orientare(Punct startp, Punct inter, Punct finalp)
{
int ok = (inter.y - startp.y) * (finalp.x - inter.x) - (inter.x - startp.x) * (finalp.x - inter.y);
if (ok < 0)
return 1;
else
return 0;
}
void coordonate_poligon(vector<Punct> puncte, int n)
{
vector<Punct> CPoly;
int left = 0;
for (int i = 0; i < n; i++)
if (puncte[i].x < puncte[i].x)
left = i;
int startp = left , finalp;
do {
CPoly.push_back(puncte[startp]);
finalp = 0;
for (int inter = 0; inter < n; inter++)
{
if (orientare(puncte[startp], puncte[inter], puncte[finalp]))
finalp = inter;
}
startp = finalp;
} while (startp != left);
cout<<setprecision(6);
cout << fixed;
for (auto& i : CPoly)
g << "("<< i.x << "," << i.y << ")\n";
}
int main()
{
vector<Punct> puncte;
int n;
f >> n;
for (int i = 0; i < n; i++)
{
Punct cord;
f >> cord.x >> cord.y;
puncte.push_back(cord);
}
coordonate_poligon(puncte, n);
return 0;
}