15. Creación de archivo svg

/*
 * genera una archivo svg con la espiral de los primeros 1000 números primos
 * se representa cada número en coordenadas polares tal que (r,θ)=(p,p)
 * se utiliza como plantilla un archivo svg plano creado con inkscape
 * https://www.di-mgt.com.au/primes1000.txt
 * https://www.youtube.com/watch?v=EK32jo7i5LQ
 * 
 * <Germán Andrés Xander 2022>
 */


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

int main(int argc, char **argv){
    ifstream primos ("primos1000.txt");   //abro el archivo con los primeros 1000 primos
    ofstream salida ("espiral.svg", ofstream::out | ofstream::trunc);      // creo objeto salida 

    if (primos.is_open()){
        salida << "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"<<endl<<endl;
        salida<< "<!-- Creado por Germán Andrés Xander 2022 con C++ -->"<<endl;
        salida<< "<svg"<<endl;
        salida<< "   width=\"16000\""<<endl;
        salida<< "   height=\"16000\"";
        salida<< "   viewBox=\"0 0 16000 16000\""<<endl;
        salida<< "   version=\"1.1\""<<endl;
        salida<< "   id=\"svg5\""<<endl;
        salida<< "   xmlns=\"http://www.w3.org/2000/svg\""<<endl;
        salida<< "   xmlns:svg=\"http://www.w3.org/2000/svg\">"<<endl;
        salida<< "  <defs"<<endl;
        salida<< "     id=\"defs2\" />"<<endl;
        salida<< "  <text"<<endl;
        salida<< "     xml:space=\"preserve\""<<endl;
        salida<< "     style=\"font-size:276.602px;line-height:1.25;font-family:sans-serif;text-align:start;text-anchor:start;stroke-width:6.91506\""<<endl;
        salida<< "     x=\"173.1696\""<<endl;
        salida<< "     y=\"411.87714\""<<endl;
        salida<< "     id=\"text8850\"><tspan"<<endl;
        salida<< "       id=\"tspan8848\""<<endl;
        salida<< "       x=\"173.1696\""<<endl;
        salida<< "       y=\"411.87714\""<<endl;
        salida<< "       style=\"text-align:start;text-anchor:start;stroke-width:6.91506\">Espiral de los primeros 1000 números primos</tspan></text>"<<endl;
        
        string linea;
        int i=1, primo, x, y;
        while (getline(primos,linea)) {
            primo=stoi(linea);
            x = primo * cos(primo);
            y = primo * sin(primo);
            salida<<endl<< "  <circle"<<endl;
            salida<< "    id=\"path"<<i<<"\""<<endl;
            salida<< "    style=\"fill:#000000;stroke:none;stroke-width:0\""<<endl;
            salida<< "    cx=\""<<x+8000<<"\""<<endl;
            salida<< "    cy=\""<<y+8000<<"\""<<endl;
            salida<< "    r=\"50\" />"<<endl;
        }
        salida<< "</svg>";

        primos.close();
        salida.close();
    }
    else cout << "no se puede abrir el archivo"; 
    return 0;
}