Manejo de archivos
Condições de conclusão
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;
}