Changeset 335

Show
Ignore:
Timestamp:
03/26/08 18:45:18 (8 months ago)
Author:
powell
Message:

Better free energy clipping procedure.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/matml/src/ternary/qhull.c

    r333 r335  
    4242                   int *numfacets, int **facetverts, char **version) 
    4343{ 
    44   int i; 
     44  int i, corner1, corner2, corner3; 
    4545  coordT *qpoints; 
    4646  facetT *facet; 
     
    6060      qpoints[3*i]   = (coordT) points[i].C2; 
    6161      qpoints[3*i+1] = (coordT) points[i].C3; 
    62       /* TODO: find corners and clip at that plane, not just G=0 */ 
    63       qpoints[3*i+2] = (coordT) fmin (points[i].G, 0.); 
     62 
     63      if (points[i].C2 == 0. && points[i].C3 == 0.) 
     64        corner1 = i; 
     65      if (points[i].C2 == 0. && points[i].C3 == 1.) 
     66        corner2 = i; 
     67      if (points[i].C2 == 1. && points[i].C3 == 0.) 
     68        corner3 = i; 
    6469    } 
     70 
     71  /* Clip the free energy at the plane given by the corners */ 
     72  for (i=0; i<numpoints; i++) 
     73    qpoints[3*i+2] = (coordT) 
     74      fmin (points[i].G, points[corner1].G + 
     75            (points[corner2].G-points[corner1].G) * points[i].C3 + 
     76            (points[corner3].G-points[corner1].G) * points[i].C2); 
    6577 
    6678  qh_init_A (stdin, stdout, stderr, 0, NULL);