home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / scripts / loffset.irt < prev    next >
Encoding:
Text File  |  1994-09-15  |  3.5 KB  |  96 lines

  1. #
  2. # Some comparison tests with LOFFSET.
  3. #
  4. #            Gershon Elber, OCtober 1994.
  5. #
  6.  
  7. ComputeError = procedure(FName, Crv, Dist, OCrv):Dst:DstSqr:FFMin:FFMax:
  8.     Dst = symbdiff(Crv, OCrv):
  9.     DstSqr = symbdprod(Dst, Dst):
  10.     FFMin = max(coord(ffextreme(DstSqr, true), 1), 0):
  11.     FFMax = max(coord(ffextreme(DstSqr, false), 1), 0):
  12.     printf("%s: Min %lf, Max %lf, Max Error %lf (ctlpts = %1.0lf)",
  13.            list(FName, sqrt(FFMin), sqrt(FFMax),
  14.                 max(abs(sqrt(FFMin) - Dist),
  15.                     abs(sqrt(FFMax) - Dist)),
  16.                 sizeof(OCrv)));
  17.  
  18. CompareOffset = procedure(Crv, Dist, c1, c2, c3, c4):
  19.     ComputeError("OFFSET ", Crv, Dist, c1):
  20.     ComputeError("OFFSETI", Crv, Dist, c2):
  21.     ComputeError("AOFFSET", Crv, Dist, c3):
  22.     ComputeError("LOFFSET", Crv, Dist, c4);
  23.  
  24. CmpOffAllTols = procedure(Crv, Header, FName, Dist, Tol, Steps):c1:c2:c3:
  25.     for (i = 0, 1, Steps,
  26.          printf("\\\n\\\n%s: TOLERANCE = %lf, Dist = %lf",
  27.         list(Header, Tol, Dist)):
  28.          c1 = offset(Crv, Dist, Tol, off):
  29.          c2 = offset(Crv, Dist, Tol, on):
  30.          c3 = aoffset(Crv, Dist, Tol, false, off):
  31.          c4 = loffset(Crv, Dist, 300, sizeof(c2), 4):
  32.      attrib(c1, "dash", "[0.1 0.01] 0"):
  33.      color(c1, red):
  34.      attrib(c2, "dash", "[0.01 0.01] 0"):
  35.      color(c2, green):
  36.      attrib(c3, "dash", "[0.2 0.01 0.05 0.01] 0"):
  37.      color(c3, yellow):
  38.      attrib(c4, "dash", "[0.1 0.1 0.01 0.01] 0"):
  39.      color(c4, cyan):
  40.      save(FName + "_" + (i + 1), list(crv, c1, c2, c3, c4)):
  41.          CompareOffset(Crv, abs(Dist), c1, c2, c3, c4):
  42.          Tol = Tol * sqrt(0.1));
  43.  
  44. #############################################################################
  45.  
  46. bez = cbezier( list( ctlpt( E2, -0.95, 0.7 ),
  47.              ctlpt( E2, -0.3,  0.5 ),
  48.              ctlpt( E2,  0.3, -2.5 ),
  49.              ctlpt( E2,  0.9, -0.2 ) ) );
  50. CmpOffAllTols(bez, "BEZIER CURVE", "bez_0.4", 0.4, 1.0, 5);
  51.  
  52. cpawn = cbspline( 4,
  53.     list( ctlpt( E2, 0.95, 0.05 ),
  54.           ctlpt( E2, 0.95, 0.76 ),
  55.           ctlpt( E2, 0.30, 1.52 ),
  56.           ctlpt( E2, 0.30, 1.90 ),
  57.           ctlpt( E2, 0.50, 2.09 ),
  58.           ctlpt( E2, 0.72, 2.24 ),
  59.           ctlpt( E2, 0.72, 2.32 ),
  60.           ctlpt( E2, 0.38, 2.50 ),
  61.           ctlpt( E2, 0.42, 2.70 ),
  62.           ctlpt( E2, 0.57, 2.81 ),
  63.           ctlpt( E2, 0.57, 3.42 ),
  64.           ctlpt( E2, 0.19, 3.57 ),
  65.           ctlpt( E2, 0.00, 3.57 ) ),
  66.      list( KV_OPEN ) );
  67. CmpOffAllTols(cpawn, "CHESS PAWN CSECTION", "pawn_0.5", 0.5, 1.0, 4);
  68. CmpOffAllTols(cpawn, "CHESS PAWN CSECTION", "pawn_1.5", 1.5, 1.0, 3);
  69.  
  70. cross = cbspline( 4,
  71.                   list( ctlpt( E2,  0.5,  0.5 ),
  72.                         ctlpt( E2,  0.5, -0.5 ),
  73.                         ctlpt( E2, -0.5, -0.5 ),
  74.                         ctlpt( E2, -0.5,  0.5 ) ),
  75.                   list( KV_PERIODIC ) );
  76. cross = coerce( cross, kv_open );
  77. CmpOffAllTols(cross, "CROSS SECTION", "cross_0.3", 0.3, 0.1, 4);
  78.  
  79. circ = circle( vector(0, 0, 0), 1 );
  80. CmpOffAllTols(circ, "CIRC", "circ_0.5",  0.5, 0.1, 2);
  81. CmpOffAllTols(circ, "CIRC", "circ-0.6", -0.6, 0.1, 2);
  82.  
  83. Crv = cbspline( 3,
  84.                 list( ctlpt( E2, 0.7, 0.0 ),
  85.                       ctlpt( E2, 0.7, 0.06 ),
  86.                       ctlpt( E2, 0.1, 0.1 ),
  87.                       ctlpt( E2, 0.1, 0.6 ),
  88.                       ctlpt( E2, 0.6, 0.6 ),
  89.                       ctlpt( E2, 0.8, 0.8 ),
  90.                       ctlpt( E2, 0.8, 1.4 ),
  91.                       ctlpt( E2, 0.6, 1.6 ) ),
  92.                 list( KV_OPEN ) );
  93. CmpOffAllTols(Crv, "OFFSET DOCS CRV", "doc_crv_0.4", 0.4, 0.1, 2);
  94. CmpOffAllTols(Crv, "OFFSET DOCS CRV", "doc_crv-0.2", -0.2, 0.1, 2);
  95. # CmpOffAllTols(Crv, "OFFSET DOCS CRV", -0.8, 1.0, 2); creates NAN
  96.