Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /examples/iso2d-demo/iso2d.diderot
ViewVC logotype

Annotation of /examples/iso2d-demo/iso2d.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2044 - (view) (download)

1 : jhr 1880 // iso2d
2 :     //
3 :     // Demo of finding isocontours via Newton-Raphson method.
4 :     // Initializes positions on a grid, and each update applies one
5 :     // step of Newton-Raphson.
6 :     //
7 :     // Process output with:
8 :     // unu jhisto -i iso2d.txt -b 512 512 -min 0 0 -max 1 1 | unu 2op neq - 0 | unu quantize -b 8 -o iso2d.png
9 :    
10 :     int gridSize = 300;
11 : jhr 2044 image(2)[] diderot = image("data/ddro-80.nrrd");
12 : jhr 1880 field#1(2)[] F = ctmr ⊛ diderot;
13 : jhr 1921 input int stepsMax = 12;
14 : jhr 1880 real epsilon = 0.0001;
15 :    
16 :     strand sample (int ui, int vi) {
17 : jhr 1920 // world is 1x1 centered at (0.5, 0.5)
18 : jhr 1880 output vec2 pos = [lerp(0.0, 1.0, -0.5, real(ui), real(gridSize)-0.5),
19 :     lerp(0.0, 1.0, -0.5, real(vi), real(gridSize)-0.5)];
20 : jhr 1920 // set the isvalue to 50, 30, or 10, depending on whichever we're closest to
21 : jhr 1880 real isoval = 50.0 if F(pos) >= 40.0
22 :     else 30.0 if F(pos) >= 20.0
23 :     else 10.0;
24 :     int steps = 0;
25 :     update {
26 : jhr 1920 // We bail if we're no longer inside or taken too many steps.
27 : jhr 1880 if (!inside(pos, F) || steps > stepsMax) {
28 :     die;
29 :     }
30 :     vec2 grad = ∇F(pos);
31 :     if (|grad| == 0.0) { // can't compute step if |∇F|, so have to bail
32 :     die;
33 :     }
34 :     vec2 norm = normalize(grad);
35 :     vec2 delta = -((F(pos) - isoval)/|grad|)*norm; // Newton-Raphson step
36 :     if (|delta| < epsilon) { // we've converged if step is small enough
37 :     stabilize;
38 :     }
39 :     pos += delta;
40 :     steps += 1;
41 :     }
42 :     }
43 :    
44 :     initially { sample(ui, vi) | vi in 0..(gridSize-1), ui in 0..(gridSize-1) };

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0