polygon/main_poly.cpp
2022-09-13 16:09:18 +03:00

102 lines
2.0 KiB
C++

#include <iostream>
#include <string>
#include <math.h>
using namespace std;
constexpr int Y_DIR = 1;
double radians(double degrees)
{
return degrees * M_PI / 180.0;
}
void usage(const string& name)
{
cout << "Usage: " << name << "<x> <y> <center> <count> <angle> <length>" << endl;
cout << "\tx - x coordinate of first point" << endl;
cout << "\ty - y coordinate of first point" << endl;
cout << "\tcenter - 0/1 - whether first point is center of polygon" << endl;
cout << "\tcount - ammount of points" << endl;
cout << "\tangle - rotation in degrees" << endl;
cout << "\tlength - length of side (when not center) - external radius of polygon (when center)" << endl;
}
void center_polygon(double x, double y, int count, double angle, double radius)
{
double x_calc;
double y_calc;
for (int i = 0; i < count; ++i)
{
x_calc = cos(radians((360.0 / count) * i + angle)) * radius + x;
y_calc = sin(radians((360.0 / count) * i + angle)) * radius + y;
cout << x_calc << "," << y_calc << endl;
}
}
void corner_polygon(double x, double y, int count, double angle, double length)
{
double x_calc;
double y_calc;
x_calc = 0;
y_calc = 0;
cout << x << "," << y << endl;
for (int i = 0; i < count - 1; ++i)
{
x_calc = x_calc + cos(radians(angle)) * length;
y_calc = y_calc + sin(radians(angle)) * length;
cout << x_calc + x << "," << y_calc + y << endl;
angle += (360.0 / count);
}
}
int main(int argc, char **argv)
{
double x;
double y;
bool center;
int count;
double angle;
double length;
if (argc < 7)
{
usage(argv[0]);
cout << "Insufficient arguments" << endl;
return -1;
}
x = stod(argv[1]);
y = stod(argv[2]);
center = (0 != stoi(argv[3]));
count = stoi(argv[4]);
angle = stod(argv[5]);
length = stod(argv[6]);
if (count < 1)
{
usage(argv[0]);
cout << "Wrong ammount of points" << endl;
return -1;
}
if (center)
{
center_polygon(x, y, count, angle, length);
}
else
{
corner_polygon(x, y, count, angle, length);
}
return 0;
}