#include <iostream>
#include <fstream>
#include <random>
using namespace std;


struct R2{
    double x1, x2;
    R2(double x1, double x2){
        (*this).x1 = x1; (*this).x2 = x2;
    }
};
struct R2R2{
    double x11, x12, x21, x22;
};

R2 operator*(double s, R2 x){
    R2 r = R2(0, 0);
    r.x1 = s*x.x1;
    r.x2 = s*x.x2;
    return r;
}
R2 operator*(R2 x, double s){
    R2 r = R2(0, 0);
    r.x1 = x.x1*s;
    r.x2 = x.x2*s;
    return r;
}
R2 operator-(R2 x, R2 y){
    R2 r = R2(0, 0);
    r.x1 = x.x1 - y.x1;
    r.x2 = x.x2 - y.x2;
    return r;
}
R2 operator+(R2 x, R2 y){
    R2 r = R2(0, 0);
    r.x1 = x.x1 + y.x1;
    r.x2 = x.x2 + y.x2;
    return r;
}
R2 operator*(R2R2 m, R2 x){
    R2 r = R2(0, 0);
    r.x1 = x.x1*m.x11 + x.x2*m.x12;
    r.x2 = x.x1*m.x21 + x.x2*m.x22;
    return r;
}
R2R2 genRotate(double s){
    R2R2 m;
    m.x11 = cos(s); m.x12 = -sin(s);
    m.x21 = sin(s); m.x22 = cos(s);
    return m;
}
R2R2 operator*(R2R2 m1, R2R2 m2){
    R2R2 m;
    m.x11 = m1.x11*m2.x11 + m1.x12*m2.x21;
    m.x12 = m1.x11*m2.x12 + m1.x12*m2.x22;
    m.x21 = m1.x21*m2.x11 + m1.x22*m2.x21;
    m.x22 = m1.x21*m2.x12 + m1.x22*m2.x22;
    return m;
}

ostream& operator<<(ostream &os, R2 x){
    // ベクトルの表示関数．変更の必要なし
    os << "(" << x.x1 << ", " << x.x2 << ")" ;
    return os;
}
ostream& operator<<(ostream &os, R2R2 m){
    // 行列の表示関数．変更の必要なし
    os << "(" << m.x11 << " " << m.x12 << "\n" ;
    os << "" << m.x21 << " " << m.x22 << ")" ;
    return os;
}

int main(int argc, char *argv[])
{
    double pi=3.14159265358979;
    double Δt = 1;
    R2 rp(0,0), r(0, 0), vp(0, 0), v(-1 ,0);
    R2R2 M1 = genRotate(-2*pi/3 + 2*pi/5);
    R2R2 M2 = genRotate(2*pi/3);
    ofstream of("13th-star-ans.svg");
    of << "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-2.5 -0.5 4 3\">\n"; // Output Header，viewBox= x, y 座標の開始位置，幅，高さ

    for(int i=0;i<5;++i){
        vp = M1*v;
        rp = r + vp*Δt;
        of << "<line x1=\"" << r.x1 << "\" y1=\"" << -r.x2 << "\" x2=\"" << rp.x1 << "\" y2=\"" << -rp.x2 << "\" style=\"stroke:rgb(0,0,0);stroke-width:0.01\" />\n";

        v = M2*vp;
        r = rp + v*Δt;
        of << "<line x1=\"" << rp.x1 << "\" y1=\"" << -rp.x2 << "\" x2=\"" << r.x1 << "\" y2=\"" << -r.x2 << "\" style=\"stroke:rgb(0,0,0);stroke-width:0.01\" />\n";
    }
    of << "</svg>\n";
    return 0;
};