home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume38 / lic / part05 < prev    next >
Text File  |  1993-08-11  |  67KB  |  2,545 lines

  1. Newsgroups: comp.sources.misc
  2. From: casey@gauss.llnl.gov (Casey Leedom)
  3. Subject: v38i108:  lic - LLNL Line Integral Convolution, v1.2, Part05/10
  4. Message-ID: <1993Aug12.013850.14159@sparky.sterling.com>
  5. X-Md4-Signature: fa57ed27a0dfb0a6ea8b2945d6efcaa1
  6. Sender: kent@sparky.sterling.com (Kent Landfield)
  7. Organization: Sterling Software
  8. Date: Thu, 12 Aug 1993 01:38:50 GMT
  9. Approved: kent@sparky.sterling.com
  10.  
  11. Submitted-by: casey@gauss.llnl.gov (Casey Leedom)
  12. Posting-number: Volume 38, Issue 108
  13. Archive-name: lic/part05
  14. Environment: UNIX
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  lic.1.2/avs/LIC.c lic.1.2/doc/siggraph93/paper.ps.A
  21. # Wrapped by kent@sparky on Wed Aug 11 19:38:04 1993
  22. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  23. echo If this archive is complete, you will see the following message:
  24. echo '          "shar: End of archive 5 (of 10)."'
  25. if test -f 'lic.1.2/avs/LIC.c' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'lic.1.2/avs/LIC.c'\"
  27. else
  28.   echo shar: Extracting \"'lic.1.2/avs/LIC.c'\" \(14330 characters\)
  29.   sed "s/^X//" >'lic.1.2/avs/LIC.c' <<'END_OF_FILE'
  30. X/*
  31. X * $Header: /d/sisal/a/casey/tmp/lic/avs/RCS/LIC.c,v 1.18 1993/08/11 17:25:35 casey Exp $
  32. X */
  33. X
  34. X/*
  35. X * Copyright (c) 1993 The Regents of the University of California.
  36. X * All rights reserved.
  37. X *
  38. X * Redistribution and use in source and binary forms, with or without
  39. X * modification, are permitted provided that the following conditions
  40. X * are met:
  41. X * 1. Redistributions of source code must retain the above copyright
  42. X *    notice, this list of conditions and the following disclaimer.
  43. X * 2. Redistributions in binary form must reproduce the above copyright
  44. X *    notice, this list of conditions and the following disclaimer in the
  45. X *    documentation and/or other materials provided with the distribution.
  46. X * 3. All advertising materials mentioning features or use of this software
  47. X *    must display the following acknowledgement:
  48. X *    This product includes software developed by the University of
  49. X *    California, Lawrence Livermore National Laboratory and its
  50. X *    contributors.
  51. X * 4. Neither the name of the University nor the names of its contributors
  52. X *    may be used to endorse or promote products derived from this software
  53. X *    without specific prior written permission.
  54. X *
  55. X * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  56. X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  57. X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  58. X * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  59. X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  60. X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  61. X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  62. X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63. X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  64. X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  65. X * SUCH DAMAGE.
  66. X */
  67. X
  68. X#ifndef lint
  69. X    static char rcsid[] = "$Header: /d/sisal/a/casey/tmp/lic/avs/RCS/LIC.c,v 1.18 1993/08/11 17:25:35 casey Exp $";
  70. X    static char copyright[] =
  71. X    "Copyright (c) 1993 The Regents of the University of California.\n"
  72. X    "All rights reserved.\n";
  73. X#endif
  74. X
  75. X
  76. X/*
  77. X * AVS coroutine module interface to the LIC library.  Only handles
  78. X * two-dimensional input and output fields.
  79. X */
  80. X
  81. X
  82. X#include <stdlib.h>
  83. X#include <unistd.h>
  84. X#include <errno.h>
  85. X#include <string.h>
  86. X#include <stdio.h>
  87. X#include <time.h>
  88. X#include <sys/times.h>
  89. X#include <sys/types.h>
  90. X
  91. X#include <math.h>
  92. X
  93. X#include <avs/avs.h>
  94. X#include <avs/field.h>
  95. X
  96. X#include <lic.h>
  97. X
  98. X
  99. X#ifndef M_PI
  100. X#   define M_PI  3.141592653589793116
  101. X#endif
  102. X
  103. X
  104. X#ifdef OUTPUT_INTERMEDIATE_RESULTS
  105. X    AVSfield_char *OutputImage;
  106. X#endif
  107. X
  108. X
  109. X#define LIC_ANIMATION_FRAMES    10    /* number of frames in an animation */
  110. X
  111. X
  112. X/*
  113. X * Local support routines.
  114. X */
  115. Xstatic int  DescribeModule(void);
  116. Xstatic void UpdateStatus(double percent);
  117. Xstatic void ReportError(const char *message);
  118. X
  119. X
  120. Xint
  121. Xmain(int argc, char *argv[])
  122. X    /*
  123. X     * LIC AVS coroutine module main.
  124. X     */
  125. X{
  126. X    long clk_tck = sysconf(_SC_CLK_TCK);
  127. X
  128. X    /*
  129. X     * Tell AVS who and what we are.
  130. X     */
  131. X    AVScorout_init(argc, argv, DescribeModule);
  132. X
  133. X    /*
  134. X     * Loop forever waiting on module inputs and parameter changes.  For each
  135. X     * loop where both inputs are available, run LIC over them with the
  136. X     * current parameters.
  137. X     */
  138. X    while (TRUE)
  139. X    {
  140. X    float           ncells;
  141. X    int             p;
  142. X    LIC            *LICinstance;
  143. X
  144. X    /*
  145. X     * AVS interface input parameters.
  146. X     */
  147. X    AVSfield_char  *itexture, *oimage;
  148. X    AVSfield_float *ifield;
  149. X    int             length;
  150. X    float          *frequency;
  151. X    int             Vlength;
  152. X    int             Vspeed;
  153. X    char           *filter_name, *normalization_name;
  154. X    int             animate;
  155. X    int             Dr, Dg, Db, Da;
  156. X
  157. X    /*
  158. X     * Decoded AVS parameters and dummy placeholder.
  159. X     */
  160. X    char           *dummy;
  161. X    LIC_Filter      filter;
  162. X    int             normalization;
  163. X
  164. X    /* Wait for either a parameter change or input change */
  165. X    AVScorout_wait();
  166. X
  167. X    /* Fetch the module inputs */
  168. X    (void)AVScorout_input(&itexture, &ifield,
  169. X                  &dummy, &filter_name,
  170. X                  &dummy, &normalization_name,
  171. X                  &dummy, &length, &frequency, &Vlength, &Vspeed,
  172. X                  &dummy, &animate,
  173. X                  &dummy, &Dr, &Dg, &Db, &Da,
  174. X                  &dummy);
  175. X
  176. X
  177. X    /* decode filter type -- BOX is the default */
  178. X    if (strcmp(filter_name, "Box") == 0)
  179. X        filter = LIC_Box;
  180. X    else if (strcmp(filter_name, "Ripple") == 0)
  181. X        filter = LIC_Ripple;
  182. X    else if (strcmp(filter_name, "Ramp") == 0)
  183. X        filter = LIC_Ramp;
  184. X    else if (strcmp(filter_name, "Selection") == 0)
  185. X        filter = LIC_Select;
  186. X    else
  187. X        filter = LIC_Box;
  188. X
  189. X    /* decode normalization type -- VARIABLE is the default */
  190. X    if (strcmp(normalization_name, "Variable") == 0)
  191. X        normalization = LIC_VARIABLE;
  192. X    else if (strcmp(normalization_name, "Fixed") == 0)
  193. X        normalization = LIC_FIXED;
  194. X    else
  195. X        normalization = LIC_VARIABLE;
  196. X
  197. X    if (AVSparameter_changed("Filter type"))
  198. X    {
  199. X        /* change visibility of interface options based on filter type */
  200. X        if (filter == LIC_Ripple)
  201. X        {
  202. X        AVSparameter_visible("Frequency",                TRUE);
  203. X        AVSparameter_visible("Variable speed filtering", TRUE);
  204. X        AVSparameter_visible("Animate",                  TRUE);
  205. X        }
  206. X        else
  207. X        {
  208. X        AVSparameter_visible("Frequency",                FALSE);
  209. X        AVSparameter_visible("Variable speed filtering", FALSE);
  210. X        AVSparameter_visible("Animate",                  FALSE);
  211. X        }
  212. X    }
  213. X
  214. X    /* Don't really compute until we have both our input streams */
  215. X    if (itexture == NULL  || ifield == NULL)
  216. X        continue;
  217. X
  218. X    ncells = MAXX(ifield) * MAXY(ifield);
  219. X
  220. X    /*
  221. X     * Allocate space for output image, label it and set its extents.
  222. X     */
  223. X    {
  224. X        int dims[2];
  225. X        float min_extent[2], max_extent[2];
  226. X
  227. X        dims[0] = MAXX(ifield);
  228. X        dims[1] = MAXY(ifield);
  229. X        oimage = (AVSfield_char *)
  230. X        AVSdata_alloc("field 2D 4-vector 2-space byte", dims);
  231. X        AVSfield_set_labels((AVSfield *)oimage, "alpha;red;green;blue", ";");
  232. X        min_extent[0] = 0.0;
  233. X        max_extent[0] = (float) MAXX(oimage) - 1.0;
  234. X        min_extent[1] = 0.0;
  235. X        max_extent[1] = (float) MAXY(oimage) - 1.0;
  236. X        AVSfield_set_extent((AVSfield *)oimage, min_extent, max_extent);
  237. X#        ifdef OUTPUT_INTERMEDIATE_RESULTS
  238. X        OutputImage = oimage;
  239. X#        endif
  240. X    }
  241. X
  242. X    /*
  243. X     * Allow animation if and only if using the ripple filter ...
  244. X     */
  245. X    animate = animate && (filter == LIC_Ripple);
  246. X
  247. X    /*
  248. X     * Create an instance of the Line Integral Convolver object
  249. X     */
  250. X    LICinstance =
  251. X        LIC_Create(itexture->data, MAXX(itexture), MAXY(itexture), 1,
  252. X               ifield->data,   MAXX(ifield),   MAXY(ifield),   1,
  253. X               oimage->data,
  254. X               filter,
  255. X               normalization,
  256. X               FALSE,
  257. X               (double)length,
  258. X               (double)*frequency,
  259. X               Vlength,
  260. X               Vspeed && (filter == LIC_Ripple),
  261. X               Dr, Dg, Db, Da,
  262. X               UpdateStatus,
  263. X               ReportError);
  264. X
  265. X
  266. X    /*
  267. X     * Loop over all the phases if the animate flag is true
  268. X     * else only do one iteration with p == 0.
  269. X     */
  270. X    for (p = 0; animate ? p < LIC_ANIMATION_FRAMES : p == 0; p++)
  271. X    {
  272. X#if defined(HAS_OLD_TIMES)
  273. X        time_t     t0;
  274. X#endif
  275. X        clock_t    t0_clk, tN_clk;
  276. X        struct tms t0_tms, tN_tms;
  277. X        double     wall, cpu;
  278. X        char       PerformanceString[256];
  279. X
  280. X        LIC_ChangePhase(LICinstance, (double)p/LIC_ANIMATION_FRAMES * 2*M_PI);
  281. X
  282. X        /*
  283. X         * Build integral tables here so the build isn't computed as part
  284. X         * of time to compute the image.
  285. X         */
  286. X        LIC_BuildIntegralTables(LICinstance);
  287. X
  288. X        /*
  289. X         * Set the LIC performance counters to zero and grab the start
  290. X         * time.
  291. X         */
  292. X        LICinstance->TotalLoopCount = 0;
  293. X        LICinstance->TotalLength    = 0;
  294. X#if defined(HAS_OLD_TIMES)
  295. X        t0 = time(NULL);
  296. X#endif
  297. X        t0_clk = times(&t0_tms);
  298. X
  299. X        /*
  300. X         * Do the Line Integral Convolutions over the entire input data set
  301. X         */
  302. X        LIC_ComputeImage(LICinstance);
  303. X
  304. X        /*
  305. X         * Grab termination time and output performance statistics.
  306. X         */
  307. X        tN_clk = times(&tN_tms);
  308. X#if defined(HAS_OLD_TIMES)
  309. X        wall   = (double)(time(NULL)       - t0);
  310. X#else
  311. X        wall   = (double)(tN_clk           - t0_clk          )/clk_tck;
  312. X#endif
  313. X        cpu    = (double)(tN_tms.tms_utime - t0_tms.tms_utime)/clk_tck;
  314. X        if (wall == 0.0)
  315. X        wall = 1.0e-6;
  316. X        if (cpu == 0.0)
  317. X        cpu  = 1.0e-6;
  318. X        sprintf(PerformanceString,
  319. X            "Performance statistics\n"
  320. X            "--------------------------------\n"
  321. X            "Iteration = %d\n"
  322. X            "CPU utilization = %d%%\n"
  323. X            "CPU time (seconds) = %.2f\n"
  324. X            "Cells processed per second = %.2f\n"
  325. X            "Ave loop count = %.2f\n"
  326. X            "Ave length = %.2f\n",
  327. X            p,
  328. X            (int)(cpu/wall*100),
  329. X            cpu,
  330. X            ncells / cpu,
  331. X            (float)LICinstance->TotalLoopCount / ncells / 2,
  332. X            (float)LICinstance->TotalLength    / ncells / 2);
  333. X        AVSmodify_parameter("Performance stats", AVS_VALUE,
  334. X                PerformanceString, 0, 0);
  335. X
  336. X        /* Flush AVS's output port */
  337. X        AVScorout_output(oimage);
  338. X    }
  339. X
  340. X    /*
  341. X     * Destroy the LIC object, free the output image memory and loop
  342. X     * back for another round of watching our inputs and parameters ...
  343. X     */
  344. X    LIC_Destroy(LICinstance);
  345. X    AVSdata_free("field", (char *)oimage);
  346. X    }
  347. X    /*NOTREACHED*/
  348. X}
  349. X
  350. X
  351. Xstatic int
  352. XDescribeModule(void)
  353. X    /*
  354. X     * AVS LIC coroutine module description.
  355. X     */
  356. X{
  357. X    AVSset_module_name("LIC", MODULE_MAPPER);
  358. X
  359. X    /*
  360. X     * Create ports for the required input and output fields.
  361. X     */
  362. X    AVScreate_input_port("Input Texture", "field 4-vector byte", OPTIONAL);
  363. X    AVScreate_input_port("Input Field", "field 2D 2-vector float", OPTIONAL);
  364. X    AVScreate_output_port("Output Image", "field 2D 4-vector 2-space byte");
  365. X
  366. X    /*
  367. X     * Create input parameters to widgets.
  368. X     * -----------------------------------
  369. X     */
  370. X
  371. X    /*
  372. X     * Basic filter type and normalization.
  373. X     */
  374. X    AVSadd_parameter("Label 1", "string_block", "Filter type", 0, 0);
  375. X    AVSadd_parameter("Filter type", "choice", "Box", "Box!Ripple!Ramp!Select", "!");
  376. X    AVSadd_parameter("Label 2", "string_block", "Normalization type", 0, 0);
  377. X    AVSadd_parameter("Normalization type", "choice", "Variable",
  378. X             "Fixed!Variable", "!");
  379. X
  380. X    /*
  381. X     * Filter control: length, frequency, variable length and variable speed.
  382. X     */
  383. X    AVSadd_parameter("Label 3", "string_block", "Filter control", 0, 0);
  384. X    AVSadd_parameter("Length", "integer", 10, 0, 1000);
  385. X    AVSadd_float_parameter("Frequency", 3.0, 0.001, 100.0);
  386. X    AVSadd_parameter("Variable length filtering", "boolean", FALSE, FALSE,
  387. X             TRUE);
  388. X    AVSadd_parameter("Variable speed filtering", "boolean", FALSE, FALSE,
  389. X             TRUE);
  390. X
  391. X    /*
  392. X     * Animation control.
  393. X     */
  394. X    AVSadd_parameter("Label 4", "string_block", "Animation control", 0, 0);
  395. X    AVSadd_parameter("Animate", "boolean", FALSE, FALSE, TRUE);
  396. X
  397. X    /*
  398. X     * Default pixel value for zero vectors.
  399. X     */
  400. X    AVSadd_parameter("Label 5", "string_block", "Default pixel value", 0, 0);
  401. X    AVSadd_parameter("Red",   "integer", -1, -1, 255);
  402. X    AVSadd_parameter("Green", "integer", -1, -1, 255);
  403. X    AVSadd_parameter("Blue",  "integer", -1, -1, 255);
  404. X    AVSadd_parameter("Alpha", "integer", -1, -1, 255);
  405. X
  406. X    /*
  407. X     * Performance display.
  408. X     */
  409. X    AVSadd_parameter("Performance stats", "string_block",
  410. X             "Performance statistics\n"
  411. X             "-----------------------------",
  412. X             0, 0);
  413. X
  414. X    /*
  415. X     * Create widgets and bind them to the above parameters.
  416. X     * -----------------------------------------------------
  417. X     */
  418. X
  419. X#define MM(widget, pos, vis, type) \
  420. X    " manipulator $Module:\"" widget "\"" \
  421. X    " -w " type " -p $Module -xy " pos " " vis "\n"
  422. X
  423. X#define MM_LABEL( widget, pos, vis) MM(widget, pos, vis, "textblock")
  424. X#define MM_RADIO( widget, pos, vis) MM(widget, pos, vis, "radio_buttons")
  425. X#define MM_TOGGLE(widget, pos, vis) MM(widget, pos, vis, "toggle")
  426. X#define MM_INT(   widget, pos, vis) MM(widget, pos, vis, "typein_integer")
  427. X#define MM_REAL(  widget, pos, vis) MM(widget, pos, vis, "typein_real")
  428. X
  429. X    AVSadd_parameter_prop(0, "layout", "string_block",
  430. X    "panel $Module -w panel -p \"Top Level Stack\" -wh 210,800 -xy 0,50\n"
  431. X    MM_LABEL ("Label 1",                   "10,12",   "-show")
  432. X    MM_RADIO ("Filter type",               "10,39",   "-show")
  433. X    MM_LABEL ("Label 2",                   "10,135",  "-show")
  434. X    MM_RADIO ("Normalization type",        "10,164",  "-show")
  435. X    MM_LABEL ("Label 3",                   "10,223",  "-show")
  436. X    MM_INT   ("Length",                    "10,248",  "-show")
  437. X    MM_REAL  ("Frequency",                 "150,248", "-hide")
  438. X    MM_TOGGLE("Variable length filtering", "10,274",  "-show")
  439. X    MM_TOGGLE("Variable speed filtering",  "10,299",  "-hide")
  440. X    MM_LABEL ("Label 4",                   "10,332",  "-show")
  441. X    MM_TOGGLE("Animate",                   "10,358",  "-hide")
  442. X    MM_LABEL ("Label 5",                   "10,397",  "-show")
  443. X    MM_INT   ("Red",                       "10,423",  "-show")
  444. X    MM_INT   ("Green",                     "10,449",  "-show")
  445. X    MM_INT   ("Blue",                      "10,475",  "-show")
  446. X    MM_INT   ("Alpha",                     "10,501",  "-show")
  447. X    MM_LABEL ("Performance stats",         "10,530",  "-show"));
  448. X
  449. X#undef MM_LABEL
  450. X#undef MM_RADIO
  451. X#undef MM_TOGGLE
  452. X#undef MM_INT
  453. X#undef MM_REAL
  454. X#undef MM
  455. X
  456. X    /*
  457. X     * The width and hieght should be controlled by the previous call,
  458. X     * but an AVS "layout" bug prevents this, so we do it by hand.
  459. X     */
  460. X
  461. X#define WH(param, w, h) \
  462. X    AVSadd_parameter_prop(param,  "width",  "integer", w); \
  463. X    AVSadd_parameter_prop(param,  "height", "integer", h);
  464. X
  465. X    WH(0,  4, 1);    WH(1,  2, 2);    WH(2,  4, 1);    WH(3,  3, 4);
  466. X    WH(4,  4, 1);    WH(5,  2, 1);    WH(6,  2, 1);    WH(7,  5, 1);
  467. X    WH(8,  5, 1);    WH(9,  4, 1);    WH(10, 3, 1);    WH(11, 4, 1);
  468. X    WH(12, 3, 1);    WH(13, 3, 1);    WH(14, 3, 1);    WH(15, 3, 1);
  469. X    WH(16, 4, 6);
  470. X
  471. X#undef WH
  472. X
  473. X    return(1);
  474. X}
  475. X
  476. X
  477. Xstatic void
  478. XUpdateStatus(double percent)
  479. X    /*
  480. X     * Update callback routine, used by LIC_Compute to keep the user
  481. X     * informed of computation progress.
  482. X     */
  483. X{
  484. X    char str[32];
  485. X
  486. X    sprintf(str, "Convolving  %6.2f%%", percent);
  487. X    AVSmodule_status(str, (int)percent);
  488. X
  489. X#   ifdef OUTPUT_INTERMEDIATE_RESULTS
  490. X    AVScorout_output(OutputImage);
  491. X#   endif
  492. X}
  493. X
  494. X
  495. Xstatic void
  496. XReportError(const char *message)
  497. X    /*
  498. X     * Report a LIC error by having AVS display it for us.
  499. X     */
  500. X{
  501. X    (void)AVSerror((char *)message);
  502. X}
  503. END_OF_FILE
  504.   if test 14330 -ne `wc -c <'lic.1.2/avs/LIC.c'`; then
  505.     echo shar: \"'lic.1.2/avs/LIC.c'\" unpacked with wrong size!
  506.   fi
  507.   # end of 'lic.1.2/avs/LIC.c'
  508. fi
  509. if test -f 'lic.1.2/doc/siggraph93/paper.ps.A' -a "${1}" != "-c" ; then 
  510.   echo shar: Will not clobber existing file \"'lic.1.2/doc/siggraph93/paper.ps.A'\"
  511. else
  512.   echo shar: Extracting \"'lic.1.2/doc/siggraph93/paper.ps.A'\" \(47609 characters\)
  513.   sed "s/^X//" >'lic.1.2/doc/siggraph93/paper.ps.A' <<'END_OF_FILE'
  514. X%!
  515. X%%BoundingBox: (atend)
  516. X%%Pages: (atend)
  517. X%%DocumentFonts: (atend)
  518. X%%EndComments
  519. X%
  520. X% FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0
  521. X% Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation.
  522. X% All rights reserved.
  523. X%
  524. X% Known Problems:
  525. X%    Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
  526. X/FMversion (3.0) def 
  527. X% Set up Color vs. Black-and-White
  528. X    /FMPrintInColor systemdict /colorimage known
  529. X        systemdict /currentcolortransfer known or def
  530. X% Uncomment this line to force b&w on color printer
  531. X%   /FMPrintInColor false def
  532. X/FrameDict 195 dict def 
  533. Xsystemdict /errordict known not {/errordict 10 dict def
  534. X        errordict /rangecheck {stop} put} if
  535. X% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
  536. XFrameDict /tmprangecheck errordict /rangecheck get put 
  537. Xerrordict /rangecheck {FrameDict /bug true put} put 
  538. XFrameDict /bug false put 
  539. Xmark 
  540. X% Some PS machines read past the CR, so keep the following 3 lines together!
  541. Xcurrentfile 5 string readline
  542. X00
  543. X0000000000
  544. Xcleartomark 
  545. Xerrordict /rangecheck FrameDict /tmprangecheck get put 
  546. XFrameDict /bug get { 
  547. X    /readline {
  548. X        /gstring exch def
  549. X        /gfile exch def
  550. X        /gindex 0 def
  551. X        {
  552. X            gfile read pop 
  553. X            dup 10 eq {exit} if 
  554. X            dup 13 eq {exit} if 
  555. X            gstring exch gindex exch put 
  556. X            /gindex gindex 1 add def 
  557. X        } loop
  558. X        pop 
  559. X        gstring 0 gindex getinterval true 
  560. X        } def
  561. X    } if
  562. X/FMVERSION {
  563. X    FMversion ne {
  564. X        /Times-Roman findfont 18 scalefont setfont
  565. X        100 100 moveto
  566. X        (FrameMaker version does not match postscript_prolog!)
  567. X        dup =
  568. X        show showpage
  569. X        } if
  570. X    } def 
  571. X/FMLOCAL {
  572. X    FrameDict begin
  573. X    0 def 
  574. X    end 
  575. X    } def 
  576. X    /gstring FMLOCAL
  577. X    /gfile FMLOCAL
  578. X    /gindex FMLOCAL
  579. X    /orgxfer FMLOCAL
  580. X    /orgproc FMLOCAL
  581. X    /organgle FMLOCAL
  582. X    /orgfreq FMLOCAL
  583. X    /yscale FMLOCAL
  584. X    /xscale FMLOCAL
  585. X    /manualfeed FMLOCAL
  586. X    /paperheight FMLOCAL
  587. X    /paperwidth FMLOCAL
  588. X/FMDOCUMENT { 
  589. X    array /FMfonts exch def 
  590. X    /#copies exch def
  591. X    FrameDict begin
  592. X    0 ne dup {setmanualfeed} if
  593. X    /manualfeed exch def
  594. X    /paperheight exch def
  595. X    /paperwidth exch def
  596. X    /yscale exch def
  597. X    /xscale exch def
  598. X    currenttransfer cvlit /orgxfer exch def
  599. X    currentscreen cvlit /orgproc exch def
  600. X    /organgle exch def /orgfreq exch def
  601. X    setpapername 
  602. X    manualfeed {true} {papersize} ifelse 
  603. X    {manualpapersize} {false} ifelse 
  604. X    {desperatepapersize} if
  605. X    end 
  606. X    } def 
  607. X    /pagesave FMLOCAL
  608. X    /orgmatrix FMLOCAL
  609. X    /landscape FMLOCAL
  610. X/FMBEGINPAGE { 
  611. X    FrameDict begin 
  612. X    /pagesave save def
  613. X    3.86 setmiterlimit
  614. X    /landscape exch 0 ne def
  615. X    landscape { 
  616. X        90 rotate 0 exch neg translate pop 
  617. X        }
  618. X        {pop pop}
  619. X        ifelse
  620. X    xscale yscale scale
  621. X    /orgmatrix matrix def
  622. X    gsave 
  623. X    } def 
  624. X/FMENDPAGE {
  625. X    grestore 
  626. X    pagesave restore
  627. X    end 
  628. X    showpage
  629. X    } def 
  630. X/FMFONTDEFINE { 
  631. X    FrameDict begin
  632. X    findfont 
  633. X    ReEncode 
  634. X    1 index exch 
  635. X    definefont 
  636. X    FMfonts 3 1 roll 
  637. X    put
  638. X    end 
  639. X    } def 
  640. X/FMFILLS {
  641. X    FrameDict begin
  642. X    array /fillvals exch def
  643. X    end 
  644. X    } def 
  645. X/FMFILL {
  646. X    FrameDict begin
  647. X     fillvals 3 1 roll put
  648. X    end 
  649. X    } def 
  650. X/FMNORMALIZEGRAPHICS { 
  651. X    newpath
  652. X    0.0 0.0 moveto
  653. X    1 setlinewidth
  654. X    0 setlinecap
  655. X    0 0 0 sethsbcolor
  656. X    0 setgray 
  657. X    } bind def
  658. X    /fx FMLOCAL
  659. X    /fy FMLOCAL
  660. X    /fh FMLOCAL
  661. X    /fw FMLOCAL
  662. X    /llx FMLOCAL
  663. X    /lly FMLOCAL
  664. X    /urx FMLOCAL
  665. X    /ury FMLOCAL
  666. X/FMBEGINEPSF { 
  667. X    end 
  668. X    /FMEPSF save def 
  669. X    /showpage {} def 
  670. X    FMNORMALIZEGRAPHICS 
  671. X    [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
  672. X    fx fy translate 
  673. X    rotate
  674. X    fw urx llx sub div fh ury lly sub div scale 
  675. X    llx neg lly neg translate 
  676. X    } bind def
  677. X/FMENDEPSF {
  678. X    FMEPSF restore
  679. X    FrameDict begin 
  680. X    } bind def
  681. XFrameDict begin 
  682. X/setmanualfeed {
  683. X%%BeginFeature *ManualFeed True
  684. X     statusdict /manualfeed true put
  685. X%%EndFeature
  686. X    } def
  687. X/max {2 copy lt {exch} if pop} bind def
  688. X/min {2 copy gt {exch} if pop} bind def
  689. X/inch {72 mul} def
  690. X/pagedimen { 
  691. X    paperheight sub abs 16 lt exch 
  692. X    paperwidth sub abs 16 lt and
  693. X    {/papername exch def} {pop} ifelse
  694. X    } def
  695. X    /papersizedict FMLOCAL
  696. X/setpapername { 
  697. X    /papersizedict 14 dict def 
  698. X    papersizedict begin
  699. X    /papername /unknown def 
  700. X        /Letter 8.5 inch 11.0 inch pagedimen
  701. X        /LetterSmall 7.68 inch 10.16 inch pagedimen
  702. X        /Tabloid 11.0 inch 17.0 inch pagedimen
  703. X        /Ledger 17.0 inch 11.0 inch pagedimen
  704. X        /Legal 8.5 inch 14.0 inch pagedimen
  705. X        /Statement 5.5 inch 8.5 inch pagedimen
  706. X        /Executive 7.5 inch 10.0 inch pagedimen
  707. X        /A3 11.69 inch 16.5 inch pagedimen
  708. X        /A4 8.26 inch 11.69 inch pagedimen
  709. X        /A4Small 7.47 inch 10.85 inch pagedimen
  710. X        /B4 10.125 inch 14.33 inch pagedimen
  711. X        /B5 7.16 inch 10.125 inch pagedimen
  712. X    end
  713. X    } def
  714. X/papersize {
  715. X    papersizedict begin
  716. X        /Letter {lettertray letter} def
  717. X        /LetterSmall {lettertray lettersmall} def
  718. X        /Tabloid {11x17tray 11x17} def
  719. X        /Ledger {ledgertray ledger} def
  720. X        /Legal {legaltray legal} def
  721. X        /Statement {statementtray statement} def
  722. X        /Executive {executivetray executive} def
  723. X        /A3 {a3tray a3} def
  724. X        /A4 {a4tray a4} def
  725. X        /A4Small {a4tray a4small} def
  726. X        /B4 {b4tray b4} def
  727. X        /B5 {b5tray b5} def
  728. X        /unknown {unknown} def
  729. X    papersizedict dup papername known {papername} {/unknown} ifelse get
  730. X    end
  731. X    /FMdicttop countdictstack 1 add def 
  732. X    statusdict begin stopped end 
  733. X    countdictstack -1 FMdicttop {pop end} for 
  734. X    } def
  735. X/manualpapersize {
  736. X    papersizedict begin
  737. X        /Letter {letter} def
  738. X        /LetterSmall {lettersmall} def
  739. X        /Tabloid {11x17} def
  740. X        /Ledger {ledger} def
  741. X        /Legal {legal} def
  742. X        /Statement {statement} def
  743. X        /Executive {executive} def
  744. X        /A3 {a3} def
  745. X        /A4 {a4} def
  746. X        /A4Small {a4small} def
  747. X        /B4 {b4} def
  748. X        /B5 {b5} def
  749. X        /unknown {unknown} def
  750. X    papersizedict dup papername known {papername} {/unknown} ifelse get
  751. X    end
  752. X    stopped 
  753. X    } def
  754. X/desperatepapersize {
  755. X    statusdict /setpageparams known
  756. X        {
  757. X        paperwidth paperheight 0 1 
  758. X        statusdict begin
  759. X        {setpageparams} stopped pop 
  760. X        end
  761. X        } if
  762. X    } def
  763. X/savematrix {
  764. X    orgmatrix currentmatrix pop
  765. X    } bind def
  766. X/restorematrix {
  767. X    orgmatrix setmatrix
  768. X    } bind def
  769. X/dmatrix matrix def
  770. X/dpi    72 0 dmatrix defaultmatrix dtransform
  771. X    dup mul exch   dup mul add   sqrt def
  772. X/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def
  773. X/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
  774. X/DiacriticEncoding [
  775. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  776. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  777. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  778. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  779. X/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
  780. X/numbersign /dollar /percent /ampersand /quotesingle /parenleft
  781. X/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
  782. X/two /three /four /five /six /seven /eight /nine /colon /semicolon
  783. X/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
  784. X/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
  785. X/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
  786. X/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
  787. X/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
  788. X/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
  789. X/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
  790. X/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
  791. X/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
  792. X/udieresis /dagger /.notdef /cent /sterling /section /bullet
  793. X/paragraph /germandbls /registered /copyright /trademark /acute
  794. X/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
  795. X/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  796. X/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
  797. X/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
  798. X/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
  799. X/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
  800. X/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
  801. X/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
  802. X/periodcentered /quotesinglbase /quotedblbase /perthousand
  803. X/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
  804. X/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
  805. X/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
  806. X/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
  807. X] def
  808. X/ReEncode { 
  809. X    dup 
  810. X    length 
  811. X    dict begin 
  812. X    {
  813. X    1 index /FID ne 
  814. X        {def} 
  815. X        {pop pop} ifelse 
  816. X    } forall 
  817. X    0 eq {/Encoding DiacriticEncoding def} if 
  818. X    currentdict 
  819. X    end 
  820. X    } bind def
  821. X/graymode true def
  822. X    /bwidth FMLOCAL
  823. X    /bpside FMLOCAL
  824. X    /bstring FMLOCAL
  825. X    /onbits FMLOCAL
  826. X    /offbits FMLOCAL
  827. X    /xindex FMLOCAL
  828. X    /yindex FMLOCAL
  829. X    /x FMLOCAL
  830. X    /y FMLOCAL
  831. X/setpattern {
  832. X     /bwidth  exch def
  833. X     /bpside  exch def
  834. X     /bstring exch def
  835. X     /onbits 0 def  /offbits 0 def
  836. X     freq sangle landscape {90 add} if 
  837. X        {/y exch def
  838. X         /x exch def
  839. X         /xindex x 1 add 2 div bpside mul cvi def
  840. X         /yindex y 1 add 2 div bpside mul cvi def
  841. X         bstring yindex bwidth mul xindex 8 idiv add get
  842. X         1 7 xindex 8 mod sub bitshift and 0 ne
  843. X         {/onbits  onbits  1 add def 1}
  844. X         {/offbits offbits 1 add def 0}
  845. X         ifelse
  846. X        }
  847. X        setscreen
  848. X     {} settransfer
  849. X     offbits offbits onbits add div FMsetgray
  850. X    /graymode false def
  851. X    } bind def
  852. X/grayness {
  853. X    FMsetgray
  854. X    graymode not {
  855. X        /graymode true def
  856. X        orgxfer cvx settransfer
  857. X        orgfreq organgle orgproc cvx setscreen
  858. X        } if
  859. X    } bind def
  860. X    /HUE FMLOCAL
  861. X    /SAT FMLOCAL
  862. X    /BRIGHT FMLOCAL
  863. X    /Colors FMLOCAL
  864. XFMPrintInColor 
  865. X    
  866. X    {
  867. X    /HUE 0 def
  868. X    /SAT 0 def
  869. X    /BRIGHT 0 def
  870. X    % array of arrays Hue and Sat values for the separations [HUE BRIGHT]
  871. X    /Colors   
  872. X    [[0    0  ]    % black
  873. X     [0    0  ]    % white
  874. X     [0.00 1.0]    % red
  875. X     [0.37 1.0]    % green
  876. X     [0.60 1.0]    % blue
  877. X     [0.50 1.0]    % cyan
  878. X     [0.83 1.0]    % magenta
  879. X     [0.16 1.0]    % comment / yellow
  880. X     ] def
  881. X      
  882. X    /BEGINBITMAPCOLOR { 
  883. X        BITMAPCOLOR} def
  884. X    /BEGINBITMAPCOLORc { 
  885. X        BITMAPCOLORc} def
  886. X    /BEGINBITMAPTRUECOLOR { 
  887. X        BITMAPTRUECOLOR } def
  888. X    /BEGINBITMAPTRUECOLORc { 
  889. X        BITMAPTRUECOLORc } def
  890. X    /K { 
  891. X        Colors exch get dup
  892. X        0 get /HUE exch store 
  893. X        1 get /BRIGHT exch store
  894. X          HUE 0 eq BRIGHT 0 eq and
  895. X            {1.0 SAT sub setgray}
  896. X            {HUE SAT BRIGHT sethsbcolor} 
  897. X          ifelse
  898. X        } def
  899. X    /FMsetgray { 
  900. X        /SAT exch 1.0 exch sub store 
  901. X          HUE 0 eq BRIGHT 0 eq and
  902. X            {1.0 SAT sub setgray}
  903. X            {HUE SAT BRIGHT sethsbcolor} 
  904. X          ifelse
  905. X        } bind def
  906. X    }
  907. X    
  908. X    {
  909. X    /BEGINBITMAPCOLOR { 
  910. X        BITMAPGRAY} def
  911. X    /BEGINBITMAPCOLORc { 
  912. X        BITMAPGRAYc} def
  913. X    /BEGINBITMAPTRUECOLOR { 
  914. X        BITMAPTRUEGRAY } def
  915. X    /BEGINBITMAPTRUECOLORc { 
  916. X        BITMAPTRUEGRAYc } def
  917. X    /FMsetgray {setgray} bind def
  918. X    /K { 
  919. X        pop
  920. X        } def
  921. X    }
  922. Xifelse
  923. X/normalize {
  924. X    transform round exch round exch itransform
  925. X    } bind def
  926. X/dnormalize {
  927. X    dtransform round exch round exch idtransform
  928. X    } bind def
  929. X/lnormalize { 
  930. X    0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
  931. X    } bind def
  932. X/H { 
  933. X    lnormalize setlinewidth
  934. X    } bind def
  935. X/Z {
  936. X    setlinecap
  937. X    } bind def
  938. X    /fillvals FMLOCAL
  939. X/X { 
  940. X    fillvals exch get
  941. X    dup type /stringtype eq
  942. X    {8 1 setpattern} 
  943. X    {grayness}
  944. X    ifelse
  945. X    } bind def
  946. X/V { 
  947. X    gsave eofill grestore
  948. X    } bind def
  949. X/N { 
  950. X    stroke
  951. X    } bind def
  952. X/M {newpath moveto} bind def
  953. X/E {lineto} bind def
  954. X/D {curveto} bind def
  955. X/O {closepath} bind def
  956. X    /n FMLOCAL
  957. X/L { 
  958. X     /n exch def
  959. X    newpath
  960. X    normalize
  961. X    moveto 
  962. X    2 1 n {pop normalize lineto} for
  963. X    } bind def
  964. X/Y { 
  965. X    L 
  966. X    closepath
  967. X    } bind def
  968. X    /x1 FMLOCAL
  969. X    /x2 FMLOCAL
  970. X    /y1 FMLOCAL
  971. X    /y2 FMLOCAL
  972. X    /rad FMLOCAL
  973. X/R { 
  974. X    /y2 exch def
  975. X    /x2 exch def
  976. X    /y1 exch def
  977. X    /x1 exch def
  978. X    x1 y1
  979. X    x2 y1
  980. X    x2 y2
  981. X    x1 y2
  982. X    4 Y 
  983. X    } bind def
  984. X/RR { 
  985. X    /rad exch def
  986. X    normalize
  987. X    /y2 exch def
  988. X    /x2 exch def
  989. X    normalize
  990. X    /y1 exch def
  991. X    /x1 exch def
  992. X    newpath
  993. X    x1 y1 rad add moveto
  994. X    x1 y2 x2 y2 rad arcto
  995. X    x2 y2 x2 y1 rad arcto
  996. X    x2 y1 x1 y1 rad arcto
  997. X    x1 y1 x1 y2 rad arcto
  998. X    closepath
  999. X    16 {pop} repeat
  1000. X    } bind def
  1001. X/C { 
  1002. X    grestore
  1003. X    gsave
  1004. X    R 
  1005. X    clip
  1006. X    } bind def
  1007. X    /FMpointsize FMLOCAL
  1008. X/F { 
  1009. X    FMfonts exch get
  1010. X    FMpointsize scalefont
  1011. X    setfont
  1012. X    } bind def
  1013. X/Q { 
  1014. X    /FMpointsize exch def
  1015. X    F 
  1016. X    } bind def
  1017. X/T { 
  1018. X    moveto show
  1019. X    } bind def
  1020. X/RF { 
  1021. X    rotate
  1022. X    0 ne {-1 1 scale} if
  1023. X    } bind def
  1024. X/TF { 
  1025. X    gsave
  1026. X    moveto 
  1027. X    RF
  1028. X    show
  1029. X    grestore
  1030. X    } bind def
  1031. X/P { 
  1032. X    moveto
  1033. X    0 32 3 2 roll widthshow
  1034. X    } bind def
  1035. X/PF { 
  1036. X    gsave
  1037. X    moveto 
  1038. X    RF
  1039. X    0 32 3 2 roll widthshow
  1040. X    grestore
  1041. X    } bind def
  1042. X/S { 
  1043. X    moveto
  1044. X    0 exch ashow
  1045. X    } bind def
  1046. X/SF { 
  1047. X    gsave
  1048. X    moveto
  1049. X    RF
  1050. X    0 exch ashow
  1051. X    grestore
  1052. X    } bind def
  1053. X/B { 
  1054. X    moveto
  1055. X    0 32 4 2 roll 0 exch awidthshow
  1056. X    } bind def
  1057. X/BF { 
  1058. X    gsave
  1059. X    moveto
  1060. X    RF
  1061. X    0 32 4 2 roll 0 exch awidthshow
  1062. X    grestore
  1063. X    } bind def
  1064. X/G { 
  1065. X    gsave
  1066. X    newpath
  1067. X    normalize translate 0.0 0.0 moveto 
  1068. X    dnormalize scale 
  1069. X    0.0 0.0 1.0 5 3 roll arc 
  1070. X    closepath fill
  1071. X    grestore
  1072. X    } bind def
  1073. X/A { 
  1074. X    gsave
  1075. X    savematrix
  1076. X    newpath
  1077. X    2 index 2 div add exch 3 index 2 div sub exch 
  1078. X    normalize 2 index 2 div sub exch 3 index 2 div add exch 
  1079. X    translate 
  1080. X    scale 
  1081. X    0.0 0.0 1.0 5 3 roll arc 
  1082. X    restorematrix
  1083. X    stroke
  1084. X    grestore
  1085. X    } bind def
  1086. X    /x FMLOCAL
  1087. X    /y FMLOCAL
  1088. X    /w FMLOCAL
  1089. X    /h FMLOCAL
  1090. X    /xx FMLOCAL
  1091. X    /yy FMLOCAL
  1092. X    /ww FMLOCAL
  1093. X    /hh FMLOCAL
  1094. X    /FMsaveobject FMLOCAL
  1095. X    /FMoptop FMLOCAL
  1096. X    /FMdicttop FMLOCAL
  1097. X/BEGINPRINTCODE { 
  1098. X    /FMdicttop countdictstack 1 add def 
  1099. X    /FMoptop count 4 sub def 
  1100. X    /FMsaveobject save def
  1101. X    userdict begin 
  1102. X    /showpage {} def 
  1103. X    FMNORMALIZEGRAPHICS 
  1104. X    3 index neg 3 index neg translate
  1105. X    } bind def
  1106. X/ENDPRINTCODE {
  1107. X    count -1 FMoptop {pop pop} for 
  1108. X    countdictstack -1 FMdicttop {pop end} for 
  1109. X    FMsaveobject restore 
  1110. X    } bind def
  1111. X/gn { 
  1112. X    0 
  1113. X    {    46 mul 
  1114. X        cf read pop 
  1115. X        32 sub 
  1116. X        dup 46 lt {exit} if 
  1117. X        46 sub add 
  1118. X        } loop
  1119. X    add 
  1120. X    } bind def
  1121. X    /str FMLOCAL
  1122. X/cfs { 
  1123. X    /str sl string def 
  1124. X    0 1 sl 1 sub {str exch val put} for 
  1125. X    str def 
  1126. X    } bind def
  1127. X/ic [ 
  1128. X    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
  1129. X    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
  1130. X    0
  1131. X    {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
  1132. X    {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
  1133. X    {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
  1134. X    {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
  1135. X    {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
  1136. X    {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
  1137. X    {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
  1138. X    {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
  1139. X    {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
  1140. X    ] def
  1141. X    /sl FMLOCAL
  1142. X    /val FMLOCAL
  1143. X    /ws FMLOCAL
  1144. X    /im FMLOCAL
  1145. X    /bs FMLOCAL
  1146. X    /cs FMLOCAL
  1147. X    /len FMLOCAL
  1148. X    /pos FMLOCAL
  1149. X/ms { 
  1150. X    /sl exch def 
  1151. X    /val 255 def 
  1152. X    /ws cfs 
  1153. X    /im cfs 
  1154. X    /val 0 def 
  1155. X    /bs cfs 
  1156. X    /cs cfs 
  1157. X    } bind def
  1158. X400 ms 
  1159. X/ip { 
  1160. X    is 
  1161. X    0 
  1162. X    cf cs readline pop 
  1163. X    {    ic exch get exec 
  1164. X        add 
  1165. X        } forall 
  1166. X    pop 
  1167. X    
  1168. X    } bind def
  1169. X/wh { 
  1170. X    /len exch def 
  1171. X    /pos exch def 
  1172. X    ws 0 len getinterval im pos len getinterval copy pop
  1173. X    pos len 
  1174. X    } bind def
  1175. X/bl { 
  1176. X    /len exch def 
  1177. X    /pos exch def 
  1178. X    bs 0 len getinterval im pos len getinterval copy pop
  1179. X    pos len 
  1180. X    } bind def
  1181. X/s1 1 string def
  1182. X/fl { 
  1183. X    /len exch def 
  1184. X    /pos exch def 
  1185. X    /val cf s1 readhexstring pop 0 get def
  1186. X    pos 1 pos len add 1 sub {im exch val put} for
  1187. X    pos len 
  1188. X    } bind def
  1189. X/hx { 
  1190. X    3 copy getinterval 
  1191. X    cf exch readhexstring pop pop 
  1192. X    } bind def
  1193. X    /h FMLOCAL
  1194. X    /w FMLOCAL
  1195. X    /d FMLOCAL
  1196. X    /lb FMLOCAL
  1197. X    /bitmapsave FMLOCAL
  1198. X    /is FMLOCAL
  1199. X    /cf FMLOCAL
  1200. X/wbytes { 
  1201. X    dup 
  1202. X    8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse
  1203. X    } bind def
  1204. X/BEGINBITMAPBWc { 
  1205. X    1 {} COMMONBITMAPc
  1206. X    } bind def
  1207. X/BEGINBITMAPGRAYc { 
  1208. X    8 {} COMMONBITMAPc
  1209. X    } bind def
  1210. X/BEGINBITMAP2BITc { 
  1211. X    2 {} COMMONBITMAPc
  1212. X    } bind def
  1213. X/COMMONBITMAPc { 
  1214. X    /r exch def
  1215. X    /d exch def
  1216. X    gsave
  1217. X    translate rotate scale /h exch def /w exch def
  1218. X    /lb w d wbytes def 
  1219. X    sl lb lt {lb ms} if 
  1220. X    /bitmapsave save def 
  1221. X    r                    
  1222. X    /is im 0 lb getinterval def 
  1223. X    ws 0 lb getinterval is copy pop 
  1224. X    /cf currentfile def 
  1225. X    w h d [w 0 0 h neg 0 h] 
  1226. X    {ip} image 
  1227. X    bitmapsave restore 
  1228. X    grestore
  1229. X    } bind def
  1230. X/BEGINBITMAPBW { 
  1231. X    1 {} COMMONBITMAP
  1232. X    } bind def
  1233. X/BEGINBITMAPGRAY { 
  1234. X    8 {} COMMONBITMAP
  1235. X    } bind def
  1236. X/BEGINBITMAP2BIT { 
  1237. X    2 {} COMMONBITMAP
  1238. X    } bind def
  1239. X/COMMONBITMAP { 
  1240. X    /r exch def
  1241. X    /d exch def
  1242. X    gsave
  1243. X    translate rotate scale /h exch def /w exch def
  1244. X    /bitmapsave save def 
  1245. X    r                    
  1246. X    /is w d wbytes string def
  1247. X    /cf currentfile def 
  1248. X    w h d [w 0 0 h neg 0 h] 
  1249. X    {cf is readhexstring pop} image
  1250. X    bitmapsave restore 
  1251. X    grestore
  1252. X    } bind def
  1253. X    /proc1 FMLOCAL
  1254. X    /proc2 FMLOCAL
  1255. X    /newproc FMLOCAL
  1256. X/Fmcc {
  1257. X    /proc2 exch cvlit def
  1258. X    /proc1 exch cvlit def
  1259. X    /newproc proc1 length proc2 length add array def
  1260. X    newproc 0 proc1 putinterval
  1261. X    newproc proc1 length proc2 putinterval
  1262. X    newproc cvx
  1263. X} bind def
  1264. X/ngrayt 256 array def
  1265. X/nredt 256 array def
  1266. X/nbluet 256 array def
  1267. X/ngreent 256 array def
  1268. X    /gryt FMLOCAL
  1269. X    /blut FMLOCAL
  1270. X    /grnt FMLOCAL
  1271. X    /redt FMLOCAL
  1272. X    /indx FMLOCAL
  1273. X    /cynu FMLOCAL
  1274. X    /magu FMLOCAL
  1275. X    /yelu FMLOCAL
  1276. X    /k FMLOCAL
  1277. X    /u FMLOCAL
  1278. X/colorsetup {
  1279. X    currentcolortransfer
  1280. X    /gryt exch def
  1281. X    /blut exch def
  1282. X    /grnt exch def
  1283. X    /redt exch def
  1284. X    0 1 255 {
  1285. X        /indx exch def
  1286. X        /cynu 1 red indx get 255 div sub def
  1287. X        /magu 1 green indx get 255 div sub def
  1288. X        /yelu 1 blue indx get 255 div sub def
  1289. X        /k cynu magu min yelu min def
  1290. X        /u k currentundercolorremoval exec def
  1291. X        nredt indx 1 0 cynu u sub max sub redt exec put
  1292. X        ngreent indx 1 0 magu u sub max sub grnt exec put
  1293. X        nbluet indx 1 0 yelu u sub max sub blut exec put
  1294. X        ngrayt indx 1 k currentblackgeneration exec sub gryt exec put
  1295. X    } for
  1296. X    {255 mul cvi nredt exch get}
  1297. X    {255 mul cvi ngreent exch get}
  1298. X    {255 mul cvi nbluet exch get}
  1299. X    {255 mul cvi ngrayt exch get}
  1300. X    setcolortransfer
  1301. X    {pop 0} setundercolorremoval
  1302. X    {} setblackgeneration
  1303. X    } bind def
  1304. X    /tran FMLOCAL
  1305. X/fakecolorsetup {
  1306. X    /tran 256 string def
  1307. X    0 1 255 {/indx exch def 
  1308. X        tran indx
  1309. X        red indx get 77 mul
  1310. X        green indx get 151 mul
  1311. X        blue indx get 28 mul
  1312. X        add add 256 idiv put} for
  1313. X    currenttransfer
  1314. X    {255 mul cvi tran exch get 255.0 div}
  1315. X    exch Fmcc settransfer
  1316. X} bind def
  1317. X/BITMAPCOLOR { 
  1318. X    /d 8 def
  1319. X    gsave
  1320. X    translate rotate scale /h exch def /w exch def
  1321. X    /bitmapsave save def 
  1322. X    colorsetup
  1323. X    /is w d wbytes string def
  1324. X    /cf currentfile def 
  1325. X    w h d [w 0 0 h neg 0 h] 
  1326. X    {cf is readhexstring pop} {is} {is} true 3 colorimage 
  1327. X    bitmapsave restore 
  1328. X    grestore
  1329. X    } bind def
  1330. X/BITMAPCOLORc { 
  1331. X    /d 8 def
  1332. X    gsave
  1333. X    translate rotate scale /h exch def /w exch def
  1334. X    /lb w d wbytes def 
  1335. X    sl lb lt {lb ms} if 
  1336. X    /bitmapsave save def 
  1337. X    colorsetup
  1338. X    /is im 0 lb getinterval def 
  1339. X    ws 0 lb getinterval is copy pop 
  1340. X    /cf currentfile def 
  1341. X    w h d [w 0 0 h neg 0 h] 
  1342. X    {ip} {is} {is} true 3 colorimage
  1343. X    bitmapsave restore 
  1344. X    grestore
  1345. X    } bind def
  1346. X/BITMAPTRUECOLORc { 
  1347. X        gsave
  1348. X        translate rotate scale /h exch def /w exch def
  1349. X        /bitmapsave save def 
  1350. X        
  1351. X        /is w string def
  1352. X        
  1353. X        ws 0 w getinterval is copy pop 
  1354. X        /cf currentfile def 
  1355. X        w h 8 [w 0 0 h neg 0 h] 
  1356. X        {ip} {gip} {bip} true 3 colorimage
  1357. X        bitmapsave restore 
  1358. X        grestore
  1359. X        } bind def
  1360. X/BITMAPTRUECOLOR { 
  1361. X        gsave
  1362. X        translate rotate scale /h exch def /w exch def
  1363. X        /bitmapsave save def 
  1364. X        /is w string def
  1365. X        /gis w string def
  1366. X        /bis w string def
  1367. X        /cf currentfile def 
  1368. X        w h 8 [w 0 0 h neg 0 h] 
  1369. X        { cf is readhexstring pop } 
  1370. X        { cf gis readhexstring pop } 
  1371. X        { cf bis readhexstring pop } 
  1372. X        true 3 colorimage 
  1373. X        bitmapsave restore 
  1374. X        grestore
  1375. X        } bind def
  1376. X/BITMAPTRUEGRAYc { 
  1377. X        gsave
  1378. X        translate rotate scale /h exch def /w exch def
  1379. X        /bitmapsave save def 
  1380. X        
  1381. X        /is w string def
  1382. X        
  1383. X        ws 0 w getinterval is copy pop 
  1384. X        /cf currentfile def 
  1385. X        w h 8 [w 0 0 h neg 0 h] 
  1386. X        {ip gip bip w gray} image
  1387. X        bitmapsave restore 
  1388. X        grestore
  1389. X        } bind def
  1390. X/ww FMLOCAL
  1391. X/r FMLOCAL
  1392. X/g FMLOCAL
  1393. X/b FMLOCAL
  1394. X/i FMLOCAL
  1395. X/gray { 
  1396. X        /ww exch def
  1397. X        /b exch def
  1398. X        /g exch def
  1399. X        /r exch def
  1400. X        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
  1401. X            b i get .114 mul add add r i 3 -1 roll floor cvi put } for
  1402. X        r
  1403. X        } bind def
  1404. X/BITMAPTRUEGRAY { 
  1405. X        gsave
  1406. X        translate rotate scale /h exch def /w exch def
  1407. X        /bitmapsave save def 
  1408. X        /is w string def
  1409. X        /gis w string def
  1410. X        /bis w string def
  1411. X        /cf currentfile def 
  1412. X        w h 8 [w 0 0 h neg 0 h] 
  1413. X        { cf is readhexstring pop 
  1414. X          cf gis readhexstring pop 
  1415. X          cf bis readhexstring pop w gray}  image
  1416. X        bitmapsave restore 
  1417. X        grestore
  1418. X        } bind def
  1419. X/BITMAPGRAY { 
  1420. X    8 {fakecolorsetup} COMMONBITMAP
  1421. X    } bind def
  1422. X/BITMAPGRAYc { 
  1423. X    8 {fakecolorsetup} COMMONBITMAPc
  1424. X    } bind def
  1425. X/ENDBITMAP {
  1426. X    } bind def
  1427. Xend 
  1428. X    /ALDsave FMLOCAL
  1429. X    /ALDmatrix matrix def ALDmatrix currentmatrix pop
  1430. X/StartALD {
  1431. X    /ALDsave save def
  1432. X     savematrix
  1433. X     ALDmatrix setmatrix
  1434. X    } bind def
  1435. X/InALD {
  1436. X     restorematrix
  1437. X    } bind def
  1438. X/DoneALD {
  1439. X     ALDsave restore
  1440. X    } bind def
  1441. X%%EndProlog
  1442. X%%BeginSetup
  1443. X(3.0) FMVERSION
  1444. X1 1 612 792 0 1 21 FMDOCUMENT
  1445. X0 0 /Helvetica-Bold FMFONTDEFINE
  1446. X1 0 /Times-Roman FMFONTDEFINE
  1447. X2 0 /Times-Bold FMFONTDEFINE
  1448. X3 0 /Times-Italic FMFONTDEFINE
  1449. X4 1 /Symbol FMFONTDEFINE
  1450. X5 0 /AvantGarde-Book FMFONTDEFINE
  1451. X6 0 /AvantGarde-BookOblique FMFONTDEFINE
  1452. X7 0 /AvantGarde-DemiOblique FMFONTDEFINE
  1453. X32 FMFILLS
  1454. X0 0 FMFILL
  1455. X1 0.1 FMFILL
  1456. X2 0.3 FMFILL
  1457. X3 0.5 FMFILL
  1458. X4 0.7 FMFILL
  1459. X5 0.9 FMFILL
  1460. X6 0.97 FMFILL
  1461. X7 1 FMFILL
  1462. X8 <0f1e3c78f0e1c387> FMFILL
  1463. X9 <0f87c3e1f0783c1e> FMFILL
  1464. X10 <cccccccccccccccc> FMFILL
  1465. X11 <ffff0000ffff0000> FMFILL
  1466. X12 <8142241818244281> FMFILL
  1467. X13 <03060c183060c081> FMFILL
  1468. X14 <8040201008040201> FMFILL
  1469. X16 1 FMFILL
  1470. X17 0.9 FMFILL
  1471. X18 0.7 FMFILL
  1472. X19 0.5 FMFILL
  1473. X20 0.3 FMFILL
  1474. X21 0.1 FMFILL
  1475. X22 0.03 FMFILL
  1476. X23 0 FMFILL
  1477. X24 <f0e1c3870f1e3c78> FMFILL
  1478. X25 <f0783c1e0f87c3e1> FMFILL
  1479. X26 <3333333333333333> FMFILL
  1480. X27 <0000ffff0000ffff> FMFILL
  1481. X28 <7ebddbe7e7dbbd7e> FMFILL
  1482. X29 <fcf9f3e7cf9f3f7e> FMFILL
  1483. X30 <7fbfdfeff7fbfdfe> FMFILL
  1484. X%%EndSetup
  1485. X%%Page: "1" 1
  1486. X%%BeginPaperSize: Letter
  1487. X%%EndPaperSize
  1488. X612 792 0 FMBEGINPAGE
  1489. X0 9 Q
  1490. X0 X
  1491. X0 K
  1492. X(ABSTRACT) 54 560.71 T
  1493. X1 F
  1494. X-0.1 (Imaging vector \336elds has applications in science, art, image pro-) 63 550.67 P
  1495. X1.2 (cessing and special ef) 54 540.67 P
  1496. X1.2 (fects. An ef) 135.54 540.67 P
  1497. X1.2 (fective new approach is to use) 179.45 540.67 P
  1498. X1.04 (linear and curvilinear \336ltering techniques to locally blur textures) 54 530.67 P
  1499. X0.26 (along a vector \336eld. This approach builds on several previous tex-) 54 520.67 P
  1500. X0.25 (ture generation and \336ltering techniques[8, 9, 1) 54 510.67 P
  1501. X0.25 (1, 14, 15, 17, 23]. It) 221.38 510.67 P
  1502. X0.41 (is, however) 54 500.67 P
  1503. X0.41 (, unique because it is local, one-dimensional and inde-) 95.49 500.67 P
  1504. X1.04 (pendent of any prede\336ned geometry or texture. The technique is) 54 490.67 P
  1505. X1.42 (general and capable of imaging arbitrary two- and three-dimen-) 54 480.67 P
  1506. X0.37 (sional vector \336elds. The local one-dimensional nature of the algo-) 54 470.67 P
  1507. X0.53 (rithm lends itself to highly parallel and ef) 54 460.67 P
  1508. X0.53 (\336cient implementations.) 206.59 460.67 P
  1509. X0.15 (Furthermore, the curvilinear \336lter is capable of rendering detail on) 54 450.67 P
  1510. X1.2 (very intricate vector \336elds. Combining this technique with other) 54 440.67 P
  1511. X-0.2 (rendering and image processing techniques \321 like periodic motion) 54 430.67 P
  1512. X0.76 (\336ltering \321 results in richly informative and striking images. The) 54 420.67 P
  1513. X(technique can also produce novel special ef) 54 410.67 T
  1514. X(fects.) 210.08 410.67 T
  1515. X2 F
  1516. X3.8 (CR categories and subject descriptors:) 63 400.62 P
  1517. X1 F
  1518. X3.8 ( I.3.3 [Computer) 226.48 400.62 P
  1519. X1.33 (Graphics]: Picture/Image generation; I.3.7 [Computer Graphics]:) 54 390.62 P
  1520. X1.15 (Three-Dimensional Graphics and Realism; I.4.3 [Image Process-) 54 380.62 P
  1521. X(ing]: Enhancement.) 54 370.62 T
  1522. X1.12 (Keywords: convolution, \336ltering, rendering, visualization, tex-) 63 360.57 P
  1523. X-0.19 (ture synthesis, \337ow \336elds, special ef) 54 350.57 P
  1524. X-0.19 (fects, periodic motion \336ltering.) 182.97 350.57 P
  1525. X0 F
  1526. X(1.  INTRODUCTION) 54 333.52 T
  1527. X1 F
  1528. X-0.02 (Upon \336rst inspection, imaging vector \336elds appears to have lim-) 63 323.48 P
  1529. X1.4 (ited application \321 con\336ned primarily to scienti\336c visualization.) 54 313.48 P
  1530. X1.52 (However) 54 303.48 P
  1531. X1.52 (, much of the form and shape in our environment is a) 86.58 303.48 P
  1532. X0.88 (function of not only image intensity and color) 54 293.48 P
  1533. X0.88 (, but also of direc-) 224.83 293.48 P
  1534. X1.98 (tional information such as edges. Painters, sculptors, photogra-) 54 283.48 P
  1535. X0.28 (phers, image processors[16] and computer graphics researchers[9]) 54 273.48 P
  1536. X2.23 (have recognized the importance of direction in the process of) 54 263.48 P
  1537. X0.9 (image creation and form. Hence, algorithms that can image such) 54 253.48 P
  1538. X1.3 (directional information have wide application across both scien-) 54 243.48 P
  1539. X(ti\336c and artistic domains.) 54 233.48 T
  1540. X2.66 (Such algorithms should possess a number of desirable and) 63 223.43 P
  1541. X1.53 (sometimes con\337icting properties including: accuracy) 54 213.43 P
  1542. X1.53 (, locality of) 249.75 213.43 P
  1543. X0.21 (calculation, simplicity) 54 203.43 P
  1544. X0.21 (, controllability and generality) 133.52 203.43 P
  1545. X0.21 (. Line Integral) 242.41 203.43 P
  1546. X-0.16 (Convolution \050LIC\051 is a new technique that possesses many of these) 54 193.43 P
  1547. X1.98 (properties. Its generality allows for the introduction of a com-) 54 183.43 P
  1548. X1.95 (pletely new family of periodic motion \336lters which have wide) 317.29 561.43 P
  1549. X1.07 (application \050see section 4.1\051. It represents a con\337uence of signal) 317.29 551.43 P
  1550. X0.01 (and image processing and a variety of previous work done in com-) 317.29 541.43 P
  1551. X(puter graphics and scienti\336c visualization.) 317.29 531.43 T
  1552. X0 F
  1553. X(2.  BACKGROUND) 317.29 513.08 T
  1554. X1 F
  1555. X0.18 (There are currently few techniques which image vector \336elds in) 326.29 501.73 P
  1556. X-0.02 (a general manner) 317.29 491.73 P
  1557. X-0.02 (. These techniques can be quite ef) 378.64 491.73 P
  1558. X-0.02 (fective for visu-) 499.92 491.73 P
  1559. X0.33 (alizing vector data. However) 317.29 481.73 P
  1560. X0.33 (, they break down when operating on) 421.75 481.73 P
  1561. X1.26 (very dense \336elds and do not generalize to other applications. In) 317.29 471.73 P
  1562. X0.96 (particular) 317.29 461.73 P
  1563. X0.96 (, lar) 351.37 461.73 P
  1564. X0.96 (ge vector \336elds \050512x512 or greater\051 strain existing) 366.14 461.73 P
  1565. X(algorithms.) 317.29 451.73 T
  1566. X1.65 (Most vector visualization algorithms use spatial resolution to) 326.29 440.39 P
  1567. X-0.11 (represent the vector \336eld. These include sampling the \336eld, such as) 317.29 430.39 P
  1568. X1.93 (with stream lines[12] or particle traces, and using icons[19] at) 317.29 420.39 P
  1569. X2.01 (every vector \336eld coordinate. Stream lines and particle tracing) 317.29 410.39 P
  1570. X-0.21 (techniques depend critically on the placement of the \322streamers\323 or) 317.29 400.39 P
  1571. X0.4 (the particle sources. Depending on their placement, eddies or cur-) 317.29 390.39 P
  1572. X0.57 (rents in the data \336eld can be missed. Icons, on the other hand, do) 317.29 380.39 P
  1573. X0.49 (not miss data, but use up a considerable amount of spatial resolu-) 317.29 370.39 P
  1574. X(tion limiting their usefulness to small vector \336elds.) 317.29 360.39 T
  1575. X1.4 (Another general approach is to generate textures via a vector) 326.29 349.04 P
  1576. X1.29 (\336eld. V) 317.29 339.04 P
  1577. X1.29 (an W) 344.55 339.04 P
  1578. X1.29 (ijk\325) 364.69 339.04 P
  1579. X1.29 (s) 376.68 339.04 P
  1580. X3 F
  1581. X1.29 (spot noise) 383.72 339.04 P
  1582. X1 F
  1583. X1.29 ( algorithm[23] uses a vector \336eld to) 421.22 339.04 P
  1584. X0.7 (control the generation of bandlimited noise. The time complexity) 317.29 329.04 P
  1585. X1.01 (of the two types of implementation techniques presented by V) 317.29 319.04 P
  1586. X1.01 (an) 548.8 319.04 P
  1587. X0.31 (W) 317.29 309.04 P
  1588. X0.31 (ijk are relatively high. Furthermore the technique, by de\336nition,) 325.41 309.04 P
  1589. X0.17 (depends heavily on the form of the texture \050spot noise\051 itself. Spe-) 317.29 299.04 P
  1590. X-0.19 (ci\336cally) 317.29 289.04 P
  1591. X-0.19 (, it does not easily generalize to other forms of textures that) 345.66 289.04 P
  1592. X0.57 (might be better suited to a particular class of vector data \050such as) 317.29 279.04 P
  1593. X(\337uid \337ow versus electromagnetic\051.) 317.29 269.04 T
  1594. X1.5 (Reaction dif) 326.29 257.69 P
  1595. X1.5 (fusion techniques[20, 24] also provide an avenue) 371.81 257.69 P
  1596. X0.19 (for visualizing vector \336elds since the controlling dif) 317.29 247.69 P
  1597. X0.19 (ferential equa-) 504.94 247.69 P
  1598. X0.94 (tions are inherently vector in nature. It is possible to map vector) 317.29 237.69 P
  1599. X1.6 (data onto these dif) 317.29 227.69 P
  1600. X1.6 (ferential equations to come up with a vector) 388.08 227.69 P
  1601. X0.28 (visualization technique. Here too however) 317.29 217.69 P
  1602. X0.28 (, the time complexity of) 470.05 217.69 P
  1603. X(these algorithms limit their general usefulness.) 317.29 207.69 T
  1604. X2.59 (Three-dimensional vector \336elds can be visualized by three-) 326.29 196.35 P
  1605. X3.01 (dimensional texture generation techniques such as texels and) 317.29 186.35 P
  1606. X0.16 (hypertextures described in [1) 317.29 176.35 P
  1607. X0.16 (1, 15]. Both techniques take a texture) 422.02 176.35 P
  1608. X-0.16 (on a geometrically de\336ned surface and project the texture out some) 317.29 166.35 P
  1609. X-0.18 (distance from the surface. By de\336nition these techniques are bound) 317.29 156.35 P
  1610. X-0.12 (to the surface and do not compute an image for the entire \336eld as is) 317.29 146.35 P
  1611. X0.75 (done by V) 317.29 136.35 P
  1612. X0.75 (an W) 355.22 136.35 P
  1613. X0.75 (ijk[23]. This is limiting in that it requires a priori) 374.82 136.35 P
  1614. X0.99 (knowledge to place the surface. Like particle streams and vector) 317.29 126.35 P
  1615. X1.56 (streamers these visualization techniques are critically dependent) 317.29 116.35 P
  1616. X(on the placement of the sampling surface.) 317.29 106.35 T
  1617. X-0.05 (The technique presented by Haeberli[9] for algorithmicly gener-) 326.29 95 P
  1618. X0.31 (ating \322paintings\323 via vector) 317.29 85 P
  1619. X0.31 (-like brush strokes can also be thought) 417.13 85 P
  1620. X3.7 (of as a vector visualization technique. Craw\336s and Max[5]) 317.29 75 P
  1621. X54 576 558 738 R
  1622. X7 X
  1623. XV
  1624. X0 18 Q
  1625. X0 X
  1626. X(Imaging V) 74.57 726 T
  1627. X(ector Fields Using Line Integral Convolution) 159.56 726 T
  1628. X3 12 Q
  1629. X(Brian Cabral) 273.85 690 T
  1630. X(Leith \050Casey\051 Leedom*) 250.04 673 T
  1631. X1 F
  1632. X(Lawrence Livermore National Laboratory) 205.26 639 T
  1633. X54 139.03 293.98 175.03 R
  1634. X7 X
  1635. XV
  1636. X54 160.03 293.98 175.03 C
  1637. X63 173.03 207 173.03 2 L
  1638. X0.5 H
  1639. X2 Z
  1640. X0 X
  1641. X0 K
  1642. XN
  1643. X0 0 612 792 C
  1644. X1 8 Q
  1645. X0 X
  1646. X0 K
  1647. X(* Authors\325 current e-mail addresses are:) 54 154.7 T
  1648. X3 F
  1649. X(cabral@llnl.gov) 184.11 154.7 T
  1650. X1 F
  1651. X( and) 236.56 154.7 T
  1652. X3 F
  1653. X(casey@gauss.llnl.gov) 60 145.7 T
  1654. X1 F
  1655. X(.) 129.02 145.7 T
  1656. X54 72 293.98 126 C
  1657. X54 72 293.98 126 R
  1658. X7 X
  1659. X0 K
  1660. XV
  1661. X0 0 612 792 C
  1662. XFMENDPAGE
  1663. X%%EndPage: "1" 2
  1664. X%%Page: "2" 2
  1665. X612 792 0 FMBEGINPAGE
  1666. X1 9 Q
  1667. X0 X
  1668. X0 K
  1669. X-0.13 (describe a three-dimensional variation on this in which blurred cyl-) 54 732 P
  1670. X0.6 (inders represent three-dimensional brush strokes whose directions) 54 722 P
  1671. X0.23 (and colors are controlled by a three-dimensional vector \336eld. Both) 54 712 P
  1672. X2.33 (techniques represent a conceptual extension of traditional icon) 54 702 P
  1673. X1.07 (placement, where the icons are more sophisticated shapes. How-) 54 692 P
  1674. X2.52 (ever) 54 682 P
  1675. X2.52 (, these techniques break down as the density of the \336eld) 69.11 682 P
  1676. X(increases since they require spatial resolution to work.) 54 672 T
  1677. X-0.13 (What is needed is a technique that can image dense vector \336elds,) 63 661.02 P
  1678. X0.69 (is independent of both prede\336ned sampling placement constraints) 54 651.02 P
  1679. X0.86 (and texture generation techniques and can work in two and three) 54 641.02 P
  1680. X1.9 (dimensions. Such a technique would be very general and have) 54 631.02 P
  1681. X(wide application.) 54 621.02 T
  1682. X0 F
  1683. X(3.  DDA CONVOLUTION) 54 603.05 T
  1684. X1 F
  1685. X0.48 (One approach is a generalization of traditional DDA line draw-) 63 592.07 P
  1686. X0.19 (ing techniques[1] and the spatial convolution algorithms described) 54 582.07 P
  1687. X0.81 (by V) 54 572.07 P
  1688. X0.81 (an W) 71.53 572.07 P
  1689. X0.81 (ijk[23] and Perlin[14]. Each vector in a \336eld is used to) 91.19 572.07 P
  1690. X-0.03 (de\336ne a long, narrow) 54 562.07 P
  1691. X-0.03 (, DDA generated \336lter kernel tangential to the) 129.7 562.07 P
  1692. X-0.09 (vector and going in the positive and negative vector direction some) 54 552.07 P
  1693. X1.41 (\336xed distance,) 54 542.07 P
  1694. X3 F
  1695. X1.41 (L) 110.98 542.07 P
  1696. X1 F
  1697. X1.41 (. A texture is then mapped one-to-one onto the) 115.98 542.07 P
  1698. X1.68 (vector \336eld. The input texture pixels under the \336lter kernel are) 54 532.07 P
  1699. X1.78 (summed, normalized by the length of the \336lter kernel,) 54 522.07 P
  1700. X3 F
  1701. X1.78 (2L) 265.97 522.07 P
  1702. X1 F
  1703. X1.78 (, and) 275.46 522.07 P
  1704. X0.8 (placed in an output pixel image for the vector position. Figure 1,) 54 512.07 P
  1705. X(illustrates this operation for a single vector in a \336eld.) 54 502.07 T
  1706. X-0.03 (This ef) 63 491.1 P
  1707. X-0.03 (fectively \336lters the underlying texture as a function of the) 88.02 491.1 P
  1708. X1.01 (vector \336eld. The images in \336gure 2 are rendered using the DDA) 54 481.1 P
  1709. X0.18 (convolution algorithm. On the left is a simple circular vector \336eld;) 54 471.1 P
  1710. X-0.22 (to its right is the result of a computational \337uid dynamics code. The) 54 461.1 P
  1711. X0.13 (input texture image in these examples is white noise. Although the) 54 451.1 P
  1712. X0.02 (description above implies a box \336lter) 54 441.1 P
  1713. X0.02 (, any arbitrary \336lter shape can) 187.29 441.1 P
  1714. X0.03 (be used for the \336lter convolution kernel. It is important to note that) 54 431.1 P
  1715. X0.11 (this algorithm is very sensitive to symmetry of the DDA algorithm) 54 421.1 P
  1716. X0.13 (and \336lter) 54 411.1 P
  1717. X0.13 (. If the algorithm weights the forward direction more than) 85.84 411.1 P
  1718. X0.1 (the backward direction, the circular \336eld in \336gure 2 appears to spi-) 54 401.1 P
  1719. X1.03 (ral inward implying a vortical behavior that is not present in the) 54 391.1 P
  1720. X(vector \336eld.) 54 381.1 T
  1721. X0 F
  1722. X(3.1  LOCAL FIELD BEHA) 54 363.12 T
  1723. X(VIOR) 158.2 363.12 T
  1724. X1 F
  1725. X0.81 (The DDA approach, while ef) 63 352.14 P
  1726. X0.81 (\336cient, is inherently inaccurate. It) 170.66 352.14 P
  1727. X2.46 (assumes that the local vector \336eld can be approximated by a) 54 342.14 P
  1728. X0.85 (straight line. For points in vector \336elds where the local radius of) 317.29 587 P
  1729. X0.54 (curvature is lar) 317.29 577 P
  1730. X0.54 (ge, this assumption is valid. However) 372.12 577 P
  1731. X0.54 (, where there) 509.53 577 P
  1732. X-0.15 (are complex structures smaller than the length of the DDA line, the) 317.29 567 P
  1733. X-0.14 (local radius of curvature is small and is not well approximated by a) 317.29 557 P
  1734. X0.34 (straight line. In a sense, DDA convolution renders the vector \336eld) 317.29 547 P
  1735. X1.44 (unevenly) 317.29 537 P
  1736. X1.44 (, treating linear portions of the vector \336eld more accu-) 349.65 537 P
  1737. X1.39 (rately than small scale vortices. While this graceful degradation) 317.29 527 P
  1738. X0.46 (may be \336ne or even desirable for special ef) 317.29 517 P
  1739. X0.46 (fects applications, it is) 475.53 517 P
  1740. X0.34 (problematic for visualizing vector \336elds such as the ones in \336gure) 317.29 507 P
  1741. X(2, since detail in the small scale structures is lost.) 317.29 497 T
  1742. X0.07 (V) 326.29 485.88 P
  1743. X0.07 (an W) 331.78 485.88 P
  1744. X0.07 (ijk\325) 350.7 485.88 P
  1745. X0.07 (s spot noise algorithm[23] also suf) 362.69 485.88 P
  1746. X0.07 (fers from this prob-) 486.94 485.88 P
  1747. X1.51 (lem since the spots are elliptically stretched along a line in the) 317.29 475.88 P
  1748. X1.26 (direction of the local \336eld. If the ellipse major axis exceeds the) 317.29 465.88 P
  1749. X1.17 (local length scale of the vector \336eld, the spot noise will inaccu-) 317.29 455.88 P
  1750. X0.07 (rately represent the vector \336eld. An accurate measure of local \336eld) 317.29 445.88 P
  1751. X1.01 (behavior would require a global analysis of the \336eld. Such tech-) 317.29 435.88 P
  1752. X-0.14 (niques currently do not exist for arbitrary vector \336elds, would most) 317.29 425.88 P
  1753. X2.24 (likely be expensive to calculate[13] and are an area of active) 317.29 415.88 P
  1754. X(research[7].) 317.29 405.88 T
  1755. X0 F
  1756. X(4.  LINE INTEGRAL CONVOLUTION) 317.29 387.76 T
  1757. X1 F
  1758. X0.94 (The local behavior of the vector \336eld can be approximated by) 326.29 376.63 P
  1759. X-0.01 (computing a local stream line that starts at the center of pixel \050) 317.29 366.63 P
  1760. X3 F
  1761. X-0.01 (x) 541.83 366.63 P
  1762. X1 F
  1763. X-0.01 (,) 545.82 366.63 P
  1764. X3 F
  1765. X-0.01 (y) 550.3 366.63 P
  1766. X1 F
  1767. X-0.01 (\051) 554.29 366.63 P
  1768. X1.11 (and moves out in the positive and negative directions.) 317.29 356.63 P
  1769. X1 7 Q
  1770. X0.86 (1) 519.63 360.23 P
  1771. X1 9 Q
  1772. X1.11 ( The for-) 523.12 356.63 P
  1773. X(ward coordinate advection is given by equation \0501\051.) 317.29 346.63 T
  1774. X317.29 126 557.29 141 C
  1775. X326.29 139 470.29 139 2 L
  1776. X0.5 H
  1777. X2 Z
  1778. X0 X
  1779. X0 K
  1780. XN
  1781. X0 0 612 792 C
  1782. X1 6 Q
  1783. X0 X
  1784. X0 K
  1785. X0.32 (1.) 317.29 123.87 P
  1786. X1 8 Q
  1787. X0.43 (V) 323.61 120.67 P
  1788. X0.43 (ector \336eld lattice and image coordinates are usually speci\336ed in a left-) 328.49 120.67 P
  1789. X-0.1 (handed coordinate system while vector components are usually speci\336ed in) 317.29 111.67 P
  1790. X0.28 (a right-handed coordinate system. In this case, the) 317.29 102.67 P
  1791. X3 F
  1792. X0.28 (y) 481.62 102.67 P
  1793. X1 F
  1794. X0.28 (-component of the lat-) 485.17 102.67 P
  1795. X-0.06 (tice coordinate in equation \0501\051 must be re\337ected about the vertical center of) 317.29 93.67 P
  1796. X0.38 (the lattice to operate in a consistent coordinate system. This re\337ection has) 317.29 84.67 P
  1797. X(been omitted to preserve simplicity of presentation.) 317.29 75.67 T
  1798. X317.29 72 557.29 593 C
  1799. X317.3 141 557.27 343.63 C
  1800. X3 9 Q
  1801. X0 X
  1802. X0 K
  1803. X(P) 347.44 331.08 T
  1804. X1 7 Q
  1805. X(0) 353.28 327.96 T
  1806. X3 9 Q
  1807. X(x) 376.1 331.08 T
  1808. X1 F
  1809. X(0) 389.52 331.08 T
  1810. X(.) 394.01 331.08 T
  1811. X(5) 396.26 331.08 T
  1812. X3 F
  1813. X(y) 405.25 331.08 T
  1814. X1 F
  1815. X(0) 418.68 331.08 T
  1816. X(.) 423.17 331.08 T
  1817. X(5) 425.42 331.08 T
  1818. X4 F
  1819. X(+) 411.49 331.08 T
  1820. X(,) 400.76 331.08 T
  1821. X(+) 382.34 331.08 T
  1822. X(\050) 372.21 331.08 T
  1823. X(\051) 430.3 331.08 T
  1824. X(=) 361.28 331.08 T
  1825. X3 F
  1826. X(P) 347.6 300.72 T
  1827. X3 7 Q
  1828. X(i) 353.44 297.59 T
  1829. X3 9 Q
  1830. X(P) 369.32 300.72 T
  1831. X3 7 Q
  1832. X(i) 375.15 297.59 T
  1833. X1 F
  1834. X(1) 384.43 297.59 T
  1835. X4 F
  1836. X(-) 378.85 297.59 T
  1837. X3 9 Q
  1838. X(V) 404.11 309.31 T
  1839. X(P) 421.52 309.31 T
  1840. X3 7 Q
  1841. X(i) 427.36 306.18 T
  1842. X1 F
  1843. X(1) 436.64 306.18 T
  1844. X4 F
  1845. X(-) 431.05 306.18 T
  1846. X4 9 Q
  1847. X(\050) 411.63 309.31 T
  1848. X(\051) 446.52 309.31 T
  1849. X3 F
  1850. X(V) 404.11 294.52 T
  1851. X(P) 421.52 294.52 T
  1852. X3 7 Q
  1853. X(i) 427.36 291.39 T
  1854. X1 F
  1855. X(1) 436.64 291.39 T
  1856. X4 F
  1857. X(-) 431.05 291.39 T
  1858. X4 9 Q
  1859. X(\050) 411.63 294.52 T
  1860. X(\051) 446.52 294.52 T
  1861. X(D) 458.3 300.72 T
  1862. X3 F
  1863. X(s) 464.33 300.72 T
  1864. X3 7 Q
  1865. X(i) 468.17 297.59 T
  1866. X1 F
  1867. X(1) 477.45 297.59 T
  1868. X4 F
  1869. X(-) 471.86 297.59 T
  1870. X4 9 Q
  1871. X(+) 390.18 300.72 T
  1872. X(=) 359.88 300.72 T
  1873. X416.52 305.67 416.52 315.46 2 L
  1874. X0.33 H
  1875. X0 Z
  1876. XN
  1877. X416.52 305.67 419.52 305.67 2 L
  1878. XN
  1879. X444.13 305.67 444.13 315.46 2 L
  1880. XN
  1881. X444.13 305.67 441.13 305.67 2 L
  1882. XN
  1883. X416.52 290.87 416.52 300.67 2 L
  1884. XN
  1885. X416.52 290.87 419.52 290.87 2 L
  1886. XN
  1887. X444.13 290.87 444.13 300.67 2 L
  1888. XN
  1889. X444.13 290.87 441.13 290.87 2 L
  1890. XN
  1891. X399.11 290.87 399.11 300.67 2 L
  1892. XN
  1893. X401.11 290.87 401.11 300.67 2 L
  1894. XN
  1895. X455.02 290.87 455.02 300.67 2 L
  1896. XN
  1897. X453.02 290.87 453.02 300.67 2 L
  1898. XN
  1899. X398.11 302.67 456.77 302.67 2 L
  1900. XN
  1901. X3 F
  1902. X(V) 346.85 270.2 T
  1903. X(P) 364.26 270.2 T
  1904. X4 F
  1905. X(\050) 354.37 270.2 T
  1906. X(\051) 376.14 270.2 T
  1907. X1 F
  1908. X(t) 394.57 270.2 T
  1909. X(h) 397.07 270.2 T
  1910. X(e) 401.56 270.2 T
  1911. X(v) 407.08 270.2 T
  1912. X(e) 411.58 270.2 T
  1913. X(c) 415.57 270.2 T
  1914. X(t) 419.56 270.2 T
  1915. X(o) 422.06 270.2 T
  1916. X(r) 426.55 270.2 T
  1917. X(f) 431.07 270.2 T
  1918. X(r) 434.07 270.2 T
  1919. X(o) 437.06 270.2 T
  1920. X(m) 441.55 270.2 T
  1921. X(t) 450.07 270.2 T
  1922. X(h) 452.57 270.2 T
  1923. X(e) 457.07 270.2 T
  1924. X(i) 462.58 270.2 T
  1925. X(n) 465.08 270.2 T
  1926. X(p) 469.58 270.2 T
  1927. X(u) 474.07 270.2 T
  1928. X(t) 478.57 270.2 T
  1929. X(v) 482.59 270.2 T
  1930. X(e) 487.09 270.2 T
  1931. X(c) 491.08 270.2 T
  1932. X(t) 495.07 270.2 T
  1933. X(o) 497.57 270.2 T
  1934. X(r) 502.06 270.2 T
  1935. X4 F
  1936. X(=) 385.14 270.2 T
  1937. X359.26 269.35 359.26 276.35 2 L
  1938. XN
  1939. X359.26 269.35 362.26 269.35 2 L
  1940. XN
  1941. X373.75 269.35 373.75 276.35 2 L
  1942. XN
  1943. X373.75 269.35 370.75 269.35 2 L
  1944. XN
  1945. X1 F
  1946. X(f) 395.94 259.9 T
  1947. X(i) 398.93 259.9 T
  1948. X(e) 401.43 259.9 T
  1949. X(l) 405.42 259.9 T
  1950. X(d) 407.92 259.9 T
  1951. X(a) 413.94 259.9 T
  1952. X(t) 417.93 259.9 T
  1953. X(l) 421.96 259.9 T
  1954. X(a) 424.46 259.9 T
  1955. X(t) 428.45 259.9 T
  1956. X(t) 430.95 259.9 T
  1957. X(i) 433.45 259.9 T
  1958. X(c) 435.94 259.9 T
  1959. X(e) 439.93 259.9 T
  1960. X(p) 445.45 259.9 T
  1961. X(o) 449.95 259.9 T
  1962. X(i) 454.44 259.9 T
  1963. X(n) 456.94 259.9 T
  1964. X(t) 461.43 259.9 T
  1965. X3 F
  1966. X(P) 476.85 259.9 T
  1967. X3 7 Q
  1968. X(x) 482.68 256.77 T
  1969. X3 9 Q
  1970. X(P) 502.29 259.9 T
  1971. X3 7 Q
  1972. X(y) 508.12 256.77 T
  1973. X4 9 Q
  1974. X(,) 491.79 259.9 T
  1975. X(\050) 466.96 259.9 T
  1976. X(\051) 517.62 259.9 T
  1977. X471.85 256.33 471.85 266.05 2 L
  1978. XN
  1979. X471.85 256.33 474.85 256.33 2 L
  1980. XN
  1981. X489.79 256.33 489.79 266.05 2 L
  1982. XN
  1983. X489.79 256.33 486.79 256.33 2 L
  1984. XN
  1985. X497.29 256.33 497.29 266.05 2 L
  1986. XN
  1987. X497.29 256.33 500.29 256.33 2 L
  1988. XN
  1989. X515.22 256.33 515.22 266.05 2 L
  1990. XN
  1991. X515.22 256.33 512.22 256.33 2 L
  1992. XN
  1993. X536.87 298.39 559.02 307.44 R
  1994. X7 X
  1995. XV
  1996. X1 F
  1997. X0 X
  1998. X(\0501\051) 536.87 301.44 T
  1999. X3 F
  2000. X(s) 356.96 149.79 T
  2001. X3 7 Q
  2002. X(i) 360.8 146.66 T
  2003. X4 9 Q
  2004. X(D) 347.96 149.79 T
  2005. X1 F
  2006. X(m) 376.68 149.79 T
  2007. X(i) 383.67 149.79 T
  2008. X(n) 386.17 149.79 T
  2009. X3 F
  2010. X(s) 397.58 149.79 T
  2011. X3 7 Q
  2012. X(t) 401.42 146.66 T
  2013. X(o) 403.9 146.66 T
  2014. X(p) 407.93 146.66 T
  2015. X3 9 Q
  2016. X(s) 414.21 149.79 T
  2017. X4 F
  2018. X(,) 411.96 149.79 T
  2019. X3 7 Q
  2020. X(b) 418.05 146.09 T
  2021. X(o) 422.08 146.09 T
  2022. X(t) 426.11 146.09 T
  2023. X(t) 428.6 146.09 T
  2024. X(o) 431.08 146.09 T
  2025. X(m) 435.11 146.09 T
  2026. X3 9 Q
  2027. X(s) 442.93 149.79 T
  2028. X3 7 Q
  2029. X(l) 446.77 146.66 T
  2030. X(e) 449.25 146.66 T
  2031. X(f) 452.89 146.66 T
  2032. X(t) 455.38 146.66 T
  2033. X4 9 Q
  2034. X(,) 440.68 149.79 T
  2035. X3 F
  2036. X(s) 460.1 149.79 T
  2037. X3 7 Q
  2038. X(r) 463.94 146.66 T
  2039. X(i) 467.2 146.66 T
  2040. X(g) 469.68 146.66 T
  2041. X(h) 473.71 146.66 T
  2042. X(t) 477.74 146.66 T
  2043. X4 9 Q
  2044. X(,) 457.85 149.79 T
  2045. X(\050) 393.69 149.79 T
  2046. X(\051) 480.08 149.79 T
  2047. X(=) 367.24 149.79 T
  2048. X3 F
  2049. X(s) 320.33 205.78 T
  2050. X3 7 Q
  2051. X(e) 324.17 202.65 T
  2052. X4 9 Q
  2053. X(\245) 348.41 236.08 T
  2054. X1 F
  2055. X(\021) 355.35 236.08 T
  2056. X(i) 357.6 236.08 T
  2057. X(f) 360.09 236.08 T
  2058. X(\021) 363.09 236.08 T
  2059. X3 F
  2060. X(V) 366.86 236.08 T
  2061. X1 F
  2062. X(\021) 372.88 236.08 T
  2063. X(|) 375.13 236.08 T
  2064. X(|) 377.67 236.08 T
  2065. X(\021) 379.47 236.08 T
  2066. X3 F
  2067. X(e) 383.25 236.08 T
  2068. X1 F
  2069. X(\021) 387.77 236.08 T
  2070. X(\021) 390.02 236.08 T
  2071. X(\021) 392.26 236.08 T
  2072. X(\021) 394.51 236.08 T
  2073. X(\021) 396.76 236.08 T
  2074. X(\021) 399 236.08 T
  2075. X(\021) 401.25 236.08 T
  2076. X(\021) 403.5 236.08 T
  2077. X(\021) 405.74 236.08 T
  2078. X(\021) 407.99 236.08 T
  2079. X(\021) 410.24 236.08 T
  2080. X(\021) 412.48 236.08 T
  2081. X(\021) 414.73 236.08 T
  2082. X(\021) 416.98 236.08 T
  2083. X(\021) 419.22 236.08 T
  2084. X(\021) 421.47 236.08 T
  2085. X(\021) 423.72 236.08 T
  2086. X(0) 347.91 213.93 T
  2087. X(\021) 352.94 213.93 T
  2088. X(i) 355.18 213.93 T
  2089. X(f) 357.68 213.93 T
  2090. X(\021) 360.67 213.93 T
  2091. X3 F
  2092. X(P) 371.2 222.44 T
  2093. X3 7 Q
  2094. X(c) 377.04 219.31 T
  2095. X3 9 Q
  2096. X(P) 395.58 222.44 T
  2097. X3 7 Q
  2098. X(c) 401.41 219.31 T
  2099. X4 9 Q
  2100. X(-) 388.39 222.44 T
  2101. X3 F
  2102. X(V) 380.39 207.72 T
  2103. X3 7 Q
  2104. X(c) 386.23 204.59 T
  2105. X1 9 Q
  2106. X(0) 414.7 213.93 T
  2107. X(\021) 419.72 213.93 T
  2108. X(\021) 421.97 213.93 T
  2109. X(\021) 424.22 213.93 T
  2110. X4 F
  2111. X(<) 407.52 213.93 T
  2112. X3 F
  2113. X(P) 354.67 192.5 T
  2114. X3 7 Q
  2115. X(c) 360.51 189.37 T
  2116. X3 9 Q
  2117. X(P) 379.05 192.5 T
  2118. X3 7 Q
  2119. X(c) 384.88 189.37 T
  2120. X4 9 Q
  2121. X(-) 371.86 192.5 T
  2122. X3 F
  2123. X(V) 363.86 177.78 T
  2124. X3 7 Q
  2125. X(c) 369.7 174.65 T
  2126. X1 9 Q
  2127. X(\021) 389.27 183.99 T
  2128. X(o) 391.51 183.99 T
  2129. X(t) 396.01 183.99 T
  2130. X(h) 398.5 183.99 T
  2131. X(e) 403 183.99 T
  2132. X(r) 406.99 183.99 T
  2133. X(w) 409.98 183.99 T
  2134. X(i) 416.47 183.99 T
  2135. X(s) 418.97 183.99 T
  2136. X(e) 422.46 183.99 T
  2137. X4 F
  2138. X(\356) 342.71 176.55 T
  2139. X(\357) 342.71 185.59 T
  2140. X(\357) 342.71 194.71 T
  2141. X(\355) 342.71 203.88 T
  2142. X(\357) 342.71 213 T
  2143. X(\357) 342.71 222.12 T
  2144. X(\354) 342.71 231.2 T
  2145. X(=) 331.77 205.78 T
  2146. X366.2 218.87 366.2 228.59 2 L
  2147. XN
  2148. X366.2 218.87 369.2 218.87 2 L
  2149. XN
  2150. X384.14 218.87 384.14 228.59 2 L
  2151. XN
  2152. X384.14 218.87 381.14 218.87 2 L
  2153. XN
  2154. X365.2 215.87 404.27 215.87 2 L
  2155. XN
  2156. X349.67 188.93 349.67 198.65 2 L
  2157. XN
  2158. X349.67 188.93 352.67 188.93 2 L
  2159. XN
  2160. X367.61 188.93 367.61 198.65 2 L
  2161. XN
  2162. X367.61 188.93 364.61 188.93 2 L
  2163. XN
  2164. X348.67 185.93 387.73 185.93 2 L
  2165. XN
  2166. X1 F
  2167. X(f) 426.5 204.95 T
  2168. X(o) 429.49 204.95 T
  2169. X(r) 433.98 204.95 T
  2170. X3 F
  2171. X(e) 443.89 204.95 T
  2172. X(c) 452.38 204.95 T
  2173. X4 F
  2174. X(,) 447.88 204.95 T
  2175. X(\050) 440.01 204.95 T
  2176. X(\051) 456.76 204.95 T
  2177. X3 F
  2178. X(t) 491.79 225.78 T
  2179. X(o) 494.82 225.78 T
  2180. X(p) 499.84 225.78 T
  2181. X(y) 508.83 225.78 T
  2182. X4 F
  2183. X(,) 504.33 225.78 T
  2184. X(\050) 487.9 225.78 T
  2185. X(\051) 513.22 225.78 T
  2186. X3 F
  2187. X(b) 484.26 212.14 T
  2188. X(o) 489.28 212.14 T
  2189. X(t) 494.3 212.14 T
  2190. X(t) 497.33 212.14 T
  2191. X(o) 500.36 212.14 T
  2192. X(m) 505.38 212.14 T
  2193. X(y) 516.37 212.14 T
  2194. X4 F
  2195. X(,) 511.87 212.14 T
  2196. X(\050) 480.37 212.14 T
  2197. X(\051) 520.75 212.14 T
  2198. X3 F
  2199. X(l) 491.53 198.5 T
  2200. X(e) 494.55 198.5 T
  2201. X(f) 499.07 198.5 T
  2202. X(t) 502.1 198.5 T
  2203. X(x) 509.1 198.5 T
  2204. X4 F
  2205. X(,) 504.6 198.5 T
  2206. X(\050) 487.64 198.5 T
  2207. X(\051) 513.48 198.5 T
  2208. X3 F
  2209. X(r) 488.26 184.86 T
  2210. X(i) 492.29 184.86 T
  2211. X(g) 495.32 184.86 T
  2212. X(h) 500.34 184.86 T
  2213. X(t) 505.36 184.86 T
  2214. X(x) 512.36 184.86 T
  2215. X4 F
  2216. X(,) 507.86 184.86 T
  2217. X(\050) 484.38 184.86 T
  2218. X(\051) 516.74 184.86 T
  2219. X(\356) 473.66 184.84 T
  2220. X(\376) 525.76 184.84 T
  2221. X(\357) 473.66 193.89 T
  2222. X(\357) 525.76 193.89 T
  2223. X(\355) 473.66 203.05 T
  2224. X(\375) 525.76 203.05 T
  2225. X(\357) 473.66 212.18 T
  2226. X(\357) 525.76 212.18 T
  2227. X(\354) 473.66 221.25 T
  2228. X(\374) 525.76 221.25 T
  2229. X(\316) 463.51 204.95 T
  2230. X537.02 203.5 559.16 212.55 R
  2231. X7 X
  2232. XV
  2233. X1 F
  2234. X0 X
  2235. X(\0502\051) 537.02 206.55 T
  2236. X317.29 72 557.29 593 C
  2237. X0 0 612 792 C
  2238. X317.3 598.46 557.28 738 C
  2239. X317.3 598.46 557.28 738 R
  2240. X7 X
  2241. X0 K
  2242. XV
  2243. X317.3 598.46 557.28 616.46 R
  2244. XV
  2245. X5 8 Q
  2246. X0 X
  2247. X(Figur) 317.3 611.13 T
  2248. X(e 2: Cir) 335.4 611.13 T
  2249. X(cular and turbulent \337uid dynamics vector \336elds) 362.12 611.13 T
  2250. X(imaged using DDA convolution over white noise.) 317.3 602.13 T
  2251. X318.02 621.72 556.56 737.28 R
  2252. X7 X
  2253. XV
  2254. X0.1 H
  2255. X2 Z
  2256. X14 X
  2257. XN
  2258. X0 0 612 792 C
  2259. X54 72 293.98 334.51 C
  2260. X54 72 293.98 90 R
  2261. X7 X
  2262. X0 K
  2263. XV
  2264. X5 8 Q
  2265. X0 X
  2266. X(Figur) 54 84.67 T
  2267. X(e 1: The mapping of a vector onto a DDA line and input) 72.09 84.67 T
  2268. X(pixel \336eld generating a single output pixel.) 54 75.67 T
  2269. X0 -5 -30 395 370 239.98 239.98 54 94.54 FMBEGINEPSF
  2270. X%%BeginDocument: /home/u06/cabral/avs/data/final.paper/figure1.eps
  2271. X%!PS-Adobe-3.0 EPSF-3.0
  2272. X%%Creator: LIC
  2273. X%%DocumentFonts: AvantGarde-Book
  2274. X%%BoundingBox: -5 -30 395 370
  2275. X%%Pages: 1
  2276. X%%EndComments
  2277. X%%EndProlog
  2278. X%%Page: 1 1
  2279. X
  2280. Xgsave
  2281. X/AvantGarde-Book findfont 25.0 scalefont setfont
  2282. X
  2283. X/Xrange 200.0 def
  2284. X/Yrange 200.0 def
  2285. X/Xmin   0.0   def
  2286. X/Xmax   200.0 def
  2287. X/Ymin   0.0   def
  2288. X/Ymax   200.0 def
  2289. X/dx     10.0  def
  2290. X/dy     10.0  def
  2291. X
  2292. X/arrow
  2293. X{
  2294. X   gsave
  2295. X   300 -300 scale
  2296. X   translate
  2297. X   atan neg rotate
  2298. X   newpath
  2299. X    0.0 0.0  moveto
  2300. X    0.2 0.0  lineto
  2301. X   -0.05 0.03  rlineto
  2302. X    0.2 0.0   moveto
  2303. X    -0.05 -0.03 rlineto
  2304. X   0.0 setgray
  2305. X   0.01 setlinewidth
  2306. X   stroke
  2307. X   grestore
  2308. X} def
  2309. X
  2310. X/vector
  2311. X{
  2312. X   gsave
  2313. X   300 -300 scale
  2314. X   translate
  2315. X   atan neg rotate
  2316. X   newpath
  2317. X    -0.3 0.0  moveto
  2318. X     0.3 0.0  lineto
  2319. X   0.0 setgray
  2320. X   0.005 setlinewidth
  2321. X   stroke
  2322. X   grestore
  2323. X} def
  2324. X
  2325. X/SetWorld
  2326. X{
  2327. X   144.0 Xrange div 72.0 Yrange div scale
  2328. X} def
  2329. X
  2330. X/verticals
  2331. X{
  2332. X   newpath
  2333. X   Xmin dx Xmax
  2334. X   {
  2335. X         Ymin moveto
  2336. X     Xmax Ymax rlineto
  2337. X   } for
  2338. X   stroke
  2339. X} def
  2340. X
  2341. X/horizontals
  2342. X{
  2343. X   newpath
  2344. X   Ymin dy Ymax
  2345. X   {
  2346. X      dup moveto
  2347. X      Xmax 0   rlineto
  2348. X   } for
  2349. X   stroke
  2350. X} def
  2351. X
  2352. X/layer
  2353. X{
  2354. X   gsave
  2355. X   0 exch translate
  2356. X   verticals
  2357. X   horizontals
  2358. X   grestore
  2359. X} def
  2360. X
  2361. X/outline
  2362. X{
  2363. X   gsave
  2364. X   0 exch translate
  2365. X   newpath
  2366. X   0 0 moveto
  2367. X   Xmax 0    rlineto
  2368. X   Xmax Ymax rlineto
  2369. X   Xmax neg 0    rlineto
  2370. X   Xmax neg Ymax neg  rlineto
  2371. X   stroke
  2372. X   grestore
  2373. X} def
  2374. X
  2375. X/graybox
  2376. X{
  2377. X   gsave
  2378. X   newpath
  2379. X   moveto
  2380. X   dx 0  rlineto
  2381. X   dx dy rlineto
  2382. X   dx neg 0  rlineto
  2383. X   dx neg dy neg  rlineto
  2384. X   closepath
  2385. X   setgray
  2386. X   fill
  2387. X   grestore
  2388. X} def
  2389. X
  2390. X/dropline
  2391. X{
  2392. X   gsave
  2393. X   newpath
  2394. X   dy 2 div add exch
  2395. X   dx add exch
  2396. X   moveto
  2397. X   0 -250  rlineto
  2398. X   setgray
  2399. X   stroke
  2400. X   grestore
  2401. X} def
  2402. X
  2403. X/randomlayer
  2404. X{
  2405. X   gsave
  2406. X   0 exch translate
  2407. X   31601 srand
  2408. X   Ymin dy Ymax dy sub
  2409. X   {
  2410. X      dup
  2411. X      dup dx 2 copy pop Xmax dx sub add
  2412. X      {
  2413. X         exch
  2414. X     rand 2 31 exp div
  2415. X         0.5 mul 0.5 add
  2416. X         3 1 roll
  2417. X         graybox
  2418. X         dup
  2419. X      } for
  2420. X   } for
  2421. X   grestore
  2422. X} def
  2423. X
  2424. X/graylayer
  2425. X{
  2426. X   gsave
  2427. X   0 exch translate
  2428. X   31601 srand
  2429. X   Ymin dy Ymax dy sub
  2430. X   {
  2431. X      dup
  2432. X      dup dx 2 copy pop Xmax dx sub add
  2433. X      {
  2434. X         exch
  2435. X     0.7
  2436. X         3 1 roll
  2437. X         graybox
  2438. X         dup
  2439. X      } for
  2440. X   } for
  2441. X   grestore
  2442. X} def
  2443. X
  2444. X
  2445. X/ddalayer
  2446. X{
  2447. X   gsave
  2448. X   translate
  2449. X  
  2450. X   3 1 roll
  2451. X   atan dup cos exch sin
  2452. X   3 -1 roll
  2453. X
  2454. X   dup
  2455. X   4 1 roll
  2456. X
  2457. X   /y1 5 1 roll mul neg 4 -1 roll exch truncate def
  2458. X   /x1 3 1 roll mul neg truncate def
  2459. X   /y2 y1  neg def
  2460. X   /x2 x1  neg def
  2461. X
  2462. X   /yy y1 def
  2463. X   /xx x1 1 sub def
  2464. X
  2465. X   /Dy y2 y1 sub abs def
  2466. X   /Dx x2 x1 sub abs def
  2467. X
  2468. X   /e Dy 2 mul Dx sub def
  2469. X
  2470. X   1 1 Dx
  2471. X   {
  2472. X      0.4 xx dx mul yy dy mul dropline
  2473. X
  2474. X      0.65 xx dx mul yy dy mul graybox
  2475. X     
  2476. X      e 0 gt {/yy yy 1 add def
  2477. X              /e 2 Dy mul 2 Dx mul sub e add def}
  2478. X             {/e 2 Dy mul e add def} ifelse
  2479. X      /xx xx 1 add def
  2480. X   } for
  2481. X
  2482. X   grestore
  2483. X} def
  2484. X
  2485. X/label
  2486. X{
  2487. X   gsave
  2488. X   0.0 setgray
  2489. X   3 1 roll
  2490. X   moveto
  2491. X   Xmax Ymax rmoveto
  2492. X   0.5 1.0 scale
  2493. X   show
  2494. X   grestore
  2495. X} def
  2496. X
  2497. X/centerline
  2498. X{
  2499. X   gsave
  2500. X
  2501. X   dup
  2502. X   3 2 roll
  2503. X   dup
  2504. X   4 1 roll
  2505. X   exch
  2506. X
  2507. X   0 setgray
  2508. X   newpath
  2509. X   moveto
  2510. X   0 155 rlineto
  2511. X   stroke
  2512. X
  2513. X   0.55 setgray
  2514. END_OF_FILE
  2515.   if test 47609 -ne `wc -c <'lic.1.2/doc/siggraph93/paper.ps.A'`; then
  2516.     echo shar: \"'lic.1.2/doc/siggraph93/paper.ps.A'\" unpacked with wrong size!
  2517.   elif test -f 'lic.1.2/doc/siggraph93/paper.ps.B' && test -f 'lic.1.2/doc/siggraph93/paper.ps.C'; then
  2518.     echo shar: Combining  \"'lic.1.2/doc/siggraph93/paper.ps'\" \(170079 characters\)
  2519.     cat 'lic.1.2/doc/siggraph93/paper.ps.A' 'lic.1.2/doc/siggraph93/paper.ps.B' 'lic.1.2/doc/siggraph93/paper.ps.C' > 'lic.1.2/doc/siggraph93/paper.ps'
  2520.     if test 170079 -ne `wc -c <'lic.1.2/doc/siggraph93/paper.ps'`; then
  2521.       echo shar: \"'lic.1.2/doc/siggraph93/paper.ps'\" combined with wrong size!
  2522.     else 
  2523.       rm lic.1.2/doc/siggraph93/paper.ps.A lic.1.2/doc/siggraph93/paper.ps.B lic.1.2/doc/siggraph93/paper.ps.C
  2524.     fi
  2525.   fi
  2526.   # end of 'lic.1.2/doc/siggraph93/paper.ps.A'
  2527. fi
  2528. echo shar: End of archive 5 \(of 10\).
  2529. cp /dev/null ark5isdone
  2530. MISSING=""
  2531. for I in 1 2 3 4 5 6 7 8 9 10 ; do
  2532.     if test ! -f ark${I}isdone ; then
  2533.     MISSING="${MISSING} ${I}"
  2534.     fi
  2535. done
  2536. if test "${MISSING}" = "" ; then
  2537.     echo You have unpacked all 10 archives.
  2538.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2539. else
  2540.     echo You still must unpack the following archives:
  2541.     echo "        " ${MISSING}
  2542. fi
  2543. exit 0
  2544. exit 0 # Just in case...
  2545.