File: Compute

package info (click to toggle)
dxsamples 4.4.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 26,348 kB
  • ctags: 1,513
  • sloc: ansic: 10,079; sh: 8,445; java: 1,772; makefile: 1,101
file content (107 lines) | stat: -rw-r--r-- 3,915 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
macro main() {
    // Import the data
electrondensity = Import("watermolecule");
    // Partition the data
//electrondensity = Partition(electrondensity);
    // Compute the field squared
esquared = Compute("$0^2",electrondensity);
    // Take the gradient of the original field 
gradient = Gradient(electrondensity);
    // Extract only the x component of the gradient field
xcomponent = Compute("$0.x",gradient);


    // Create two isosurfaces, don't create normals for shading
iso1 = Isosurface(electrondensity,0.3,flag=0);
iso2 = Isosurface(electrondensity,0.35,flag=0);
    // Create a camera
camera = AutoCamera(iso1);
    // Create two images and display them
image1 = Render(iso1,camera);
Display(image1);
image2 = Render(iso2,camera);
Display(image2);


    // Mark the "colors" component in each images as the "data" component
    // so that Compute can operate on them
image1 = Mark(image1,"colors");
image2 = Mark(image2,"colors");
    // Compute the difference between the two images
difference = Compute("$0 - $1",image1,image2);
image = Unmark(difference,"colors");
    // Display the result
Display(image);


    // Create a 2D slice of the data, through the center
slice = Slice(electrondensity, "z", 5);
    // Color the slice
slice = AutoColor(slice);
    // Display the slice
camera = AutoCamera(slice);
caption = Caption("Original Slice");
collected = Collect(caption, slice);
Display(collected,camera);
    // Mark the positions so that they can be computed on
    // The original x positions go from -1 to 2.9 
    // The original y positions go from -3 to 2.9 
markedslice = Mark(slice,"positions");
    // Warp the positions onto the shape of a cylinder
pi = 3.14159;
function = "[sin(2*$1*($0.x+1)/3.9), $0.y,-cos(2*$1*($0.x+1)/3.9)]"; 
warped = Compute(function, markedslice, pi);
    // Unmark the warped positions, returning them to the positions 
    // component
warped = Unmark(warped, "positions");
    // Add shading
warped = Normals(warped);
camera = AutoCamera(warped,"off-diagonal");
caption = Caption("Warped into the shape of a cylinder");
collected = Collect(caption,warped);
Display(collected, camera);

    // Now warp the positions onto the shape of a doubled cone 
    // by multiplying the x and z positions by the original 
    // y value, which goes from -3 to 2.9 
fnctn="[$0.y*sin(2*$1*($0.x+1)/3.9),$0.y,-$0.y*cos(2*$1*($0.x+1)/3.9)]";
warped = Compute(fnctn, markedslice, pi);
    // Unmark the warped positions, returning them to the positions 
    // component
warped = Unmark(warped, "positions");
    // Add shading
warped = Normals(warped);
caption = Caption("Warped into the shape of a double cone");
collected = Collect(caption,warped);
Display(collected, camera);

    // For illustration, Construct a 2D grid which represents longitude (x 
    // positions) and latitude (y positions). 
grid = Construct([0, -90], [5 5], [73, 37], {-1350 .. 1350});
grid = Compute("abs($0)",grid);
    // convert the positions of the grid from degrees to radians for convenience
grid = Mark(grid,"positions");
markedgrid = Compute("($0*$1)/180.0", pi, grid);
grid = Unmark(markedgrid,"positions");
colored = AutoColor(grid);
camera = AutoCamera(grid); 
colored = AutoAxes(colored,camera);
caption = Caption("Original latitude and longitude grid (radians)");
collected = Collect(caption,colored);
Display(collected, camera);

    // Now warp the grid into the shape of a sphere. 
fnctn="[cos($0.x)*cos($0.y), sin($0.y), sin($0.x)*cos($0.y)]";
warped = Compute(fnctn, markedgrid, pi);
    // Unmark the warped positions, returning them to the positions 
    // component
warped = Unmark(warped, "positions");
    // Add shading and colors
colored = AutoColor(warped);
colored = Normals(colored);
caption = Caption("Warped into the shape of a sphere");
collected = Collect(caption,colored);
camera = AutoCamera(colored,"off-diagonal");
Display(collected, camera);
}
main();