⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modelclosed.cpp

📁 用于GPU通用计算的编程语言BrookGPU 0.4
💻 CPP
字号:
#include <stdio.h>#include <list>#include <vector>#include <assert.h>using namespace std;struct Vec {  double x,y,z;  Vec(float xx, float yy, float zz) {    x=xx;y=yy;z=zz;  }  Vec(){}  bool operator == (const Vec &e) const{    return x==e.x&&y==e.y&&z==e.z;  }    void print ()const{    printf ("%lf, %lf, %lf\n",x,y,z);  }  bool operator <(const Vec &v)const{    if (x<v.x)      return true;    else if (x==v.x) {      if (y<v.y)        return true;      else if (y==v.y)         return z<v.z;      else        return false;    }else{      return false;    }  }};struct Edge {  Vec a,b;  Edge (Vec aa, Vec bb) {    a=aa;    b=bb;  }  void print()const {    //printf ("{");    a.print();    //printf(", ");    b.print();    //printf ("}\n");  }  bool operator <(const Edge &e)const {    if (a<e.a) return true;    if (a==e.a)      return b<e.b;    return false;  }  bool operator == (const Edge &e) const{    return (a==e.a&&b==e.b)||(a==e.b&&b==e.a);  }};vector<Vec> model;list<Edge> edges;int main (int argc, char** argv) {  char * modelfn="data";  if (argc>1){    modelfn = argv[1];  }  FILE * fp = fopen (modelfn,"r");  unsigned int nvertices=0;  fscanf(fp,"%d\n",&nvertices);  unsigned int i;  for (i=0;i<nvertices;++i) {    Vec next(-666,-666,-666);    int hits=    fscanf (fp,"%lf, %lf, %lf\n",&next.x,&next.y,&next.z);    assert (hits==3);    model.push_back(next);  }  fclose(fp);  for (i=0;i<model.size();i+=3) {    edges.push_back(Edge(model[i],model[i+1]));    edges.push_back(Edge(model[i],model[i+2]));    edges.push_back(Edge(model[i+1],model[i+2]));          }  edges.sort();  for (list<Edge>::iterator i=edges.begin();i!=edges.end();++i) {    //(*i).print();  }  for (list<Edge>::iterator i=edges.begin();i!=edges.end();) {    list<Edge>::iterator j=i;    j++;    bool found=false;    for (;j!=edges.end();++j) {      if (*i==*j) {        assert (i!=j);        edges.erase(j);        i=edges.erase(i);        found=true;        break;      }    }          if (!found){      //printf ("Edge missing:");      //(*i).print();      i++;    }  }  {    printf ("%d\n",edges.size()*3);    for (list<Edge>::iterator i=edges.begin();i!=edges.end();++i) {      (*i).print();      (*i).a.print();    }  }  fprintf (stderr,"%d Edges Left\n",edges.size());  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -