//---------------------------------------------------------------------------------
Arrow::Arrow(Point p1, Point p2) {
    add(p1);
    add(p2);
    double r = 10;
    double slope = (double(p2.y-p1.y)/(p2.x-p1.x));
    double angle = atan(slope);
    double angle1 = 3*M_PI/4+angle;
    if(p2.x>=p1.x) {
        add(Point{int(p2.x+r*cos(angle1)),int(p2.y+r*sin(angle1))});
        add(Point{int(p2.x+r*cos(angle)),int(p2.y+r*sin(angle))});
        double angle2 = angle-3*M_PI/4;
        add(Point{int(p2.x+r*cos(angle2)),int(p2.y+r*sin(angle2))});
        add(p2);
    }
    else {
        angle += M_PI;
        angle1 = 3*M_PI/4+angle;
        add(Point{int(p2.x+r*cos(angle1)),int(p2.y+r*sin(angle1))});
        add(Point{int(p2.x+r*cos(angle)),int(p2.y+r*sin(angle))});
        double angle2 = angle-3*M_PI/4;
        add(Point{int(p2.x+r*cos(angle2)),int(p2.y+r*sin(angle2))});
        add(p2);
    }
}

//---------------------------------------------------------------------------------

Reg_polygon::Reg_polygon(int sides, Point p1, double radius) {    // number of sides, center and distance from center
    for(int i = 0; i < sides; ++i)
        add(Point{p1.x+radius*cos(2*M_PI*i/sides),p1.y+radius*sin(2*M_PI*i/sides)});
}
