1- scenario (nx = 60 , ny = 60 , nz = 60 ; case = :torus2 ) = begin
2- F = Float32
1+ scenario (nx = 60 , ny = 60 , nz = 60 ; F = Float32, I = Int32, case = :torus2 ) = begin
32 vol = zeros (F, nx, ny, nz)
43
54 sx, sy, sz = size (vol) ./ F (16 )
@@ -10,46 +9,37 @@ scenario(nx = 60, ny = 60, nz = 60; case = :torus2) = begin
109 r = F (1.85 )
1110 R = F (4 )
1211
13- cushin (x, y, z) =
14- z^ 2 * x^ 2 - z^ 4 - 2 z * x^ 2 + 2 z^ 3 + x^ 2 - z^ 2 - (x^ 2 - z)^ 2 - y^ 4 - 2 x^ 2 * y^ 2 -
15- y^ 2 * z^ 2 +
16- 2 y^ 2 * z +
17- y^ 2
18-
19- torus2 (x, y, z) =
20- ((x^ 2 + y^ 2 + z^ 2 + R^ 2 - r^ 2 )^ 2 - 4 R^ 2 * (x^ 2 + y^ 2 )) *
21- ((x^ 2 + (y + R)^ 2 + z^ 2 + R^ 2 - r^ 2 )^ 2 - 4 R^ 2 * ((y + R)^ 2 + z^ 2 ))
22-
23- sphere (x, y, z) = (
24- ((x - 2 )^ 2 + (y - 2 )^ 2 + (z - 2 )^ 2 - 1 ) *
25- ((x + 2 )^ 2 + (y - 2 )^ 2 + (z - 2 )^ 2 - 1 ) *
26- ((x - 2 )^ 2 + (y + 2 )^ 2 + (z - 2 )^ 2 - 1 )
27- )
28-
29- plane (x, y, z) = x + y + z - 3
30-
31- cassini (x, y, z) =
32- (x^ 2 + y^ 2 + z^ 2 + F (0.45 )^ 2 )^ 2 - 16 * F (0.45 )^ 2 * (x^ 2 + z^ 2 ) - F (0.5 )^ 2
33-
34- blooby (x, y, z) = x^ 4 - 5 x^ 2 + y^ 4 - 5 y^ 2 + z^ 4 - 5 z^ 2 + F (11.8 )
35-
36- hyperboloid (x, y, z) = x^ 2 + y^ 2 - z^ 2 - 1
37-
38- callback = (;
39- cushin = cushin,
40- torus2 = torus2,
41- sphere = sphere,
42- plane = plane,
43- cassini = cassini,
44- blooby = blooby,
45- hyperboloid = hyperboloid,
46- )[case]
12+ callback = if case ≡ :cushin
13+ (x, y, z) ->
14+ z^ 2 * x^ 2 - z^ 4 - 2 z * x^ 2 + 2 z^ 3 + x^ 2 - z^ 2 - (x^ 2 - z)^ 2 - y^ 4 - 2 x^ 2 * y^ 2 - y^ 2 * z^ 2 +
15+ 2 y^ 2 * z +
16+ y^ 2
17+ elseif case ≡ :torus2
18+ (x, y, z) ->
19+ ((x^ 2 + y^ 2 + z^ 2 + R^ 2 - r^ 2 )^ 2 - 4 R^ 2 * (x^ 2 + y^ 2 )) *
20+ ((x^ 2 + (y + R)^ 2 + z^ 2 + R^ 2 - r^ 2 )^ 2 - 4 R^ 2 * ((y + R)^ 2 + z^ 2 ))
21+ elseif case ≡ :sphere
22+ (x, y, z) -> (
23+ ((x - 2 )^ 2 + (y - 2 )^ 2 + (z - 2 )^ 2 - 1 ) *
24+ ((x + 2 )^ 2 + (y - 2 )^ 2 + (z - 2 )^ 2 - 1 ) *
25+ ((x - 2 )^ 2 + (y + 2 )^ 2 + (z - 2 )^ 2 - 1 )
26+ )
27+ elseif case ≡ :plane
28+ (x, y, z) -> x + y + z - 3
29+ elseif case ≡ :cassini
30+ (x, y, z) ->
31+ (x^ 2 + y^ 2 + z^ 2 + F (0.45 )^ 2 )^ 2 - 16 * F (0.45 )^ 2 * (x^ 2 + z^ 2 ) - F (0.5 )^ 2
32+ elseif case ≡ :blooby
33+ (x, y, z) -> x^ 4 - 5 x^ 2 + y^ 4 - 5 y^ 2 + z^ 4 - 5 z^ 2 + F (11.8 )
34+ elseif case ≡ :hyperboloid
35+ (x, y, z) -> x^ 2 + y^ 2 - z^ 2 - 1
36+ end
4737
4838 for k ∈ 1 : nz, j ∈ 1 : ny, i ∈ 1 : nx
4939 vol[i, j, k] = callback ((i - 1 ) / sx - tx, (j - 1 ) / sy - ty, (k - 1 ) / sz - tz)
5040 end
5141
52- MC (vol, Int32 )
42+ MC (vol, I )
5343end
5444
5545output (PlyIO:: Module , m:: MC , fn:: AbstractString = " test.ply" ) = begin
0 commit comments