#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

struct Point
{
   double x,y,z;

   Point() {};
   Point(const double&  _x, const double& _y, const double& _z)
     : x(_x), y(_y),z(_z)
   {}
   Point(const Point&  _p)
     : x(_p.x), y(_p.y),z(_p.z)
   {}
   
   Point& operator=(const Point& _p)
   {
     x = _p.x;
     y = _p.y;
     z = _p.z;
     return *this;
   }
};

struct Triangle
{
  Point p1,p2,p3;

  Triangle() {};
  Triangle(const Point& _p1, const Point& _p2, const Point& _p3)
   : p1(_p1), p2(_p2), p3(_p3)
  {};
  Triangle(const Triangle& _t)
   : p1(_t.p1), p2(_t.p2), p3(_t.p3)
  {};
};


ostream& operator<<(ostream& o, const Point& _pt)
{
  o << ' ' << _pt.x << ' ' << _pt.y << ' ' << _pt.z << ' ';
  return o;
}
ostream& operator<<(ostream& o, const Triangle& _t)
{
  o << " p1=\"" << _t.p1 << "\"";
  o << " p2=\"" << _t.p2 << "\"";
  o << " p3=\"" << _t.p3 << "\" ";
  return o;
}



int main()
{
  // on remplit notre liste de point
  vector<Point*> points;
  ifstream in1("coords.txt");
      double x,y,z;
      while (in1 >> x >> y >> z)
         points.push_back(new Point(320+160*x,320+160*y,320+160*z));
  in1.close();

  // on cherches nos triangles
  vector<Triangle*> triangles;
  ifstream in2("tri.txt");
      unsigned u,v,w;
      while (in2 >> u >> v >> w)
         triangles.push_back(new Triangle(*(points[u]),*(points[v]),*(points[w])));
  in2.close();

  ofstream out("tri.xml");

  for (vector<Triangle*>::iterator i=triangles.begin(); i!=triangles.end(); ++i)
  {
     out << "<triangle";
     out << **i;
     out << "idMat=\"4\" />";
     out << endl;
  }

  out.close();
  
  


  return 1;
}
