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

📄 showme.c

📁 一个用于三角剖分的类.实用性非常好。对于需要从多边形
💻 C
📖 第 1 页 / 共 5 页
字号:
  printf("  ele:  Loads an .ele file (and associated .node file).\n");  printf("  edge:  Loads an .edge file (and associated .node file).\n");  printf("  part:  Loads a .part file (and associated .node and .ele files).\n");  printf("  adj:  Loads an .adj file (and associated .node, .ele, and .part files).\n");  printf("  voro:  Loads a .v.node and .v.edge file for a Voronoi diagram.\n");  printf("\n");  printf("  Each row represents a different iteration number of the geometry files.\n");  printf("  For a full explanation of iteration numbers, read the instructions for\n");  printf("  Triangle.  Briefly, iteration numbers are used to allow a user to easily\n");  printf("  represent a sequence of related triangulations.  Iteration numbers are\n");  printf("  used in the names of geometry files; for instance, mymesh.3.ele is a\n");  printf("  triangle file with iteration number three, and mymesh.ele has an implicit\n");  printf("  iteration number of zero.\n\n");  printf("  The control buttons at the right end of each row display the two\n");  printf("  iterations currently under view.  These buttons can be clicked to\n");  printf("  increase or decrease the iteration numbers, and thus conveniently view\n");  printf("  a sequence of meshes.\n\n");  printf("  Show Me keeps each file in memory after loading it, but you can force\n");  printf("  Show Me to reread a set of files (for one iteration number) by reclicking\n");  printf("  the button that corresponds to the current image.  This is convenient if\n");  printf("  you have changed a geometry file.\n\n");  printf("File Formats:\n\n");  printf("  All files may contain comments prefixed by the character '#'.  Points,\n");  printf("  segments, holes, triangles, edges, and subdomains must be numbered\n");  printf("  consecutively, starting from either 1 or 0.  Whichever you choose, all\n");  printf("  input files must be consistent (for any single iteration number); if the\n");  printf("  nodes are numbered from 1, so must be all other objects.  Show Me\n");  printf("  automatically detects your choice while reading a .node (or .poly) file.\n");  printf("  Examples of these file formats are given below.\n\n");  printf("  .node files:\n");  printf("    First line:  <# of points> <dimension (must be 2)> <# of attributes>\n");  printf("                                           <# of boundary markers (0 or 1)>\n");  printf("    Remaining lines:  <point #> <x> <y> [attributes] [boundary marker]\n");  printf("\n");  printf("    The attributes, which are typically floating-point values of physical\n");  printf("    quantities (such as mass or conductivity) associated with the nodes of\n");  printf("    a finite element mesh, are ignored by Show Me.  Show Me also ignores\n");  printf("    boundary markers.  See the instructions for Triangle to find out what\n");  printf("    attributes and boundary markers are.\n\n");  printf("  .poly files:\n");  printf("    First line:  <# of points> <dimension (must be 2)> <# of attributes>\n");  printf("                                           <# of boundary markers (0 or 1)>\n");  printf("    Following lines:  <point #> <x> <y> [attributes] [boundary marker]\n");  printf("    One line:  <# of segments> <# of boundary markers (0 or 1)>\n");  printf("    Following lines:  <segment #> <endpoint> <endpoint> [boundary marker]\n");  printf("    One line:  <# of holes>\n");  printf("    Following lines:  <hole #> <x> <y>\n");  printf("    [Optional additional lines that are ignored]\n\n");  printf("    A .poly file represents a Planar Straight Line Graph (PSLG), an idea\n");  printf("    familiar to computational geometers.  By definition, a PSLG is just a\n");  printf("    list of points and edges.  A .poly file also contains some additional\n");  printf("    information.\n\n");  printf("    The first section lists all the points, and is identical to the format\n");  printf("    of .node files.  <# of points> may be set to zero to indicate that the\n");  printf("    points are listed in a separate .node file; .poly files produced by\n");  printf("    Triangle always have this format.  When Show Me reads such a file, it\n");  printf("    also reads the corresponding .node file.\n\n");  printf("    The second section lists the segments.  Segments are edges whose\n");  printf("    presence in a triangulation produced from the PSLG is enforced.  Each\n");  printf("    segment is specified by listing the indices of its two endpoints.  This\n");  printf("    means that its endpoints must be included in the point list.  Each\n");  printf("    segment, like each point, may have a boundary marker, which is ignored\n");  printf("    by Show Me.\n\n");  printf("    The third section lists holes and concavities that are desired in any\n");  printf("    triangulation generated from the PSLG.  Holes are specified by\n");  printf("    identifying a point inside each hole.\n\n");  printf("  .ele files:\n");  printf("    First line:  <# of triangles> <points per triangle> <# of attributes>\n");  printf("    Remaining lines:  <triangle #> <point> <point> <point> ... [attributes]\n");  printf("\n");  printf("    Points are indices into the corresponding .node file.  Show Me ignores\n");  printf("    all but the first three points of each triangle; these should be the\n");  printf("    corners listed in counterclockwise order around the triangle.  The\n");  printf("    attributes are ignored by Show Me.\n\n");  printf("  .edge files:\n");  printf("    First line:  <# of edges> <# of boundary markers (0 or 1)>\n");  printf("    Following lines:  <edge #> <endpoint> <endpoint> [boundary marker]\n");  printf("\n");  printf("    Endpoints are indices into the corresponding .node file.  The boundary\n");  printf("    markers are ignored by Show Me.\n\n");  printf("    In Voronoi diagrams, one also finds a special kind of edge that is an\n");  printf("    infinite ray with only one endpoint.  For these edges, a different\n");  printf("    format is used:\n\n");  printf("        <edge #> <endpoint> -1 <direction x> <direction y>\n\n");  printf("    The `direction' is a floating-point vector that indicates the direction\n");  printf("    of the infinite ray.\n\n");  printf("  .part files:\n");  printf("    First line:  <# of triangles> <# of subdomains>\n");  printf("    Remaining lines:  <triangle #> <subdomain #>\n\n");  printf("    The set of triangles is partitioned by a .part file; each triangle is\n");  printf("    mapped to a subdomain.\n\n");  printf("  .adj files:\n");  printf("    First line:  <# of subdomains>\n");  printf("    Remaining lines:  <adjacency matrix entry>\n\n");  printf("    An .adj file represents adjacencies between subdomains (presumably\n");  printf("    computed by a partitioner).  The first line is followed by\n");  printf("    (subdomains X subdomains) lines, each containing one entry of the\n");  printf("    adjacency matrix.  A nonzero entry indicates that two subdomains are\n");  printf("    adjacent (share a point).\n\n");  printf("Example:\n\n");  printf("  Here is a sample file `box.poly' describing a square with a square hole:\n");  printf("\n");  printf("    # A box with eight points in 2D, no attributes, no boundary marker.\n");  printf("    8 2 0 0\n");  printf("    # Outer box has these vertices:\n");  printf("     1   0 0\n");  printf("     2   0 3\n");  printf("     3   3 0\n");  printf("     4   3 3\n");  printf("    # Inner square has these vertices:\n");  printf("     5   1 1\n");  printf("     6   1 2\n");  printf("     7   2 1\n");  printf("     8   2 2\n");  printf("    # Five segments without boundary markers.\n");  printf("    5 0\n");  printf("     1   1 2          # Left side of outer box.\n");  printf("     2   5 7          # Segments 2 through 5 enclose the hole.\n");  printf("     3   7 8\n");  printf("     4   8 6\n");  printf("     5   6 5\n");  printf("    # One hole in the middle of the inner square.\n");  printf("    1\n");  printf("     1   1.5 1.5\n\n");  printf("  After this PSLG is triangulated by Triangle, the resulting triangulation\n");  printf("  consists of a .node and .ele file.  Here is the former, `box.1.node',\n");  printf("  which duplicates the points of the PSLG:\n\n");  printf("    8  2  0  0\n");  printf("       1    0  0\n");  printf("       2    0  3\n");  printf("       3    3  0\n");  printf("       4    3  3\n");  printf("       5    1  1\n");  printf("       6    1  2\n");  printf("       7    2  1\n");  printf("       8    2  2\n");  printf("    # Generated by triangle -pcBev box\n");  printf("\n");  printf("  Here is the triangulation file, `box.1.ele'.\n");  printf("\n");  printf("    8  3  0\n");  printf("       1       1     5     6\n");  printf("       2       5     1     3\n");  printf("       3       2     6     8\n");  printf("       4       6     2     1\n");  printf("       5       7     3     4\n");  printf("       6       3     7     5\n");  printf("       7       8     4     2\n");  printf("       8       4     8     7\n");  printf("    # Generated by triangle -pcBev box\n\n");  printf("  Here is the edge file for the triangulation, `box.1.edge'.\n\n");  printf("    16  0\n");  printf("       1   1  5\n");  printf("       2   5  6\n");  printf("       3   6  1\n");  printf("       4   1  3\n");  printf("       5   3  5\n");  printf("       6   2  6\n");  printf("       7   6  8\n");  printf("       8   8  2\n");  printf("       9   2  1\n");  printf("      10   7  3\n");  printf("      11   3  4\n");  printf("      12   4  7\n");  printf("      13   7  5\n");  printf("      14   8  4\n");  printf("      15   4  2\n");  printf("      16   8  7\n");  printf("    # Generated by triangle -pcBev box\n");  printf("\n");  printf("  Here's a file `box.1.part' that partitions the mesh into four subdomains.\n");  printf("\n");  printf("    8  4\n");  printf("       1    3\n");  printf("       2    3\n");  printf("       3    4\n");  printf("       4    4\n");  printf("       5    1\n");  printf("       6    1\n");  printf("       7    2\n");  printf("       8    2\n");  printf("    # Generated by slice -s4 box.1\n\n");  printf("  Here's a file `box.1.adj' that represents the resulting adjacencies.\n");  printf("\n");  printf("    4\n");  printf("      9\n");  printf("      2\n");  printf("      2\n");  printf("      0\n");  printf("      2\n");  printf("      9\n");  printf("      0\n");  printf("      2\n");  printf("      2\n");  printf("      0\n");  printf("      9\n");  printf("      2\n");  printf("      0\n");  printf("      2\n");  printf("      2\n");  printf("      9\n");  printf("\n");  printf("Display Speed:\n");  printf("\n");  printf("  It is worthwhile to note that .edge files typically plot and print twice\n");  printf("  as quickly as .ele files, because .ele files cause each internal edge to\n");  printf("  be drawn twice.  For the same reason, PostScript files created from edge\n");  printf("  sets are smaller than those created from triangulations.\n\n");  printf("Show Me on the Web:\n\n");  printf("  To see an illustrated, updated version of these instructions, check out\n");  printf("\n");  printf("    http://www.cs.cmu.edu/~quake/showme.html\n");  printf("\n");  printf("A Brief Plea:\n");  printf("\n");  printf("  If you use Show Me (or Triangle), and especially if you use it to\n");  printf("  accomplish real work, I would like very much to hear from you.  A short\n");  printf("  letter or email (to jrs@cs.cmu.edu) describing how you use Show Me (and\n");  printf("  its sister programs) will mean a lot to me.  The more people I know\n");  printf("  are using my programs, the more easily I can justify spending time on\n");  printf("  improvements, which in turn will benefit you.  Also, I can put you\n");  printf("  on a list to receive email whenever new versions are available.\n");  printf("\n");  printf("  If you use a PostScript file generated by Show Me in a publication,\n");  printf("  please include an acknowledgment as well.\n\n");  exit(0);}void set_filenames(filename, lowermeshnumber)char *filename;int lowermeshnumber;{  char numberstring[100];  int i;  for (i = 0; i < 2; i++) {    strcpy(nodefilename[i], filename);    strcpy(polyfilename[i], filename);    strcpy(elefilename[i], filename);    strcpy(edgefilename[i], filename);    strcpy(partfilename[i], filename);    strcpy(adjfilename[i], filename);    strcpy(vnodefilename[i], filename);    strcpy(vedgefilename[i], filename);    if (lowermeshnumber + i > 0) {      sprintf(numberstring, ".%d", lowermeshnumber + i);      strcat(nodefilename[i], numberstring);      strcat(polyfilename[i], numberstring);      strcat(elefilename[i], numberstring);      strcat(edgefilename[i], numberstring);      strcat(partfilename[i], numberstring);      strcat(adjfilename[i], numberstring);      strcat(vnodefilename[i], numberstring);      strcat(vedgefilename[i], numberstring);    }    strcat(nodefilename[i], ".node");    strcat(polyfilename[i], ".poly");    strcat(elefilename[i], ".ele");    strcat(edgefilename[i], ".edge");    strcat(partfilename[i], ".part");    strcat(adjfilename[i], ".adj");    strcat(vnodefilename[i], ".v.node");    strcat(vedgefilename[i], ".v.edge");  }}void parsecommandline(argc, argv)int argc;char **argv;{  int increment;  int meshnumber;  int i, j;  quiet = 0;  fillelem = 0;  line_width = 1;  bw_ps = 0;  start_image = ELE;  filename[0] = '\0';  for (i = 1; i < argc; i++) {    if (argv[i][0] == '-') {      for (j = 1; argv[i][j] != '\0'; j++) {        if (argv[i][j] == 'f') {          fillelem = 1;	}        if (argv[i][j] == 'w') {          if ((argv[i][j + 1] >= '1') && (argv[i][j + 1] <= '9')) {            line_width = 0;            while ((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) {              j++;              line_width = line_width * 10 + (int) (argv[i][j] - '0');            }            if (line_width > 100) {              printf("Error:  Line width cannot exceed 100.\n");              line_width = 1;	    }	  }	}        if (argv[i][j] == 'b') {          bw_ps = 1;	}        if (argv[i][j] == 'Q') {          quiet = 1;	}        if ((argv[i][j] == 'h') || (argv[i][j] == 'H') ||            (argv[i][j] == '?')) {          info();	}      }    } else {      strcpy(filename, argv[i]);    }  }  if (filename[0] == '\0') {

⌨️ 快捷键说明

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