20 |
vec3 pos = seedPoint; |
vec3 pos = seedPoint; |
21 |
//// principleEvec : tensor[3,3] -> vec3 |
//// principleEvec : tensor[3,3] -> vec3 |
22 |
//// * : real x vec3 -> vec3 |
//// * : real x vec3 -> vec3 |
23 |
vec3 guide = seedSign * principleEvec(F@seedPoint); |
vec3 guide = real(seedSign) * principleEvec(F@seedPoint); |
24 |
real aniso = 0.0; |
real aniso = 0.0; |
25 |
|
|
26 |
update |
update |
31 |
//// CL : tensor[3,3] -> real |
//// CL : tensor[3,3] -> real |
32 |
aniso = CL(ten); // "CL" is a linear anisotropy measure |
aniso = CL(ten); // "CL" is a linear anisotropy measure |
33 |
//// < : real x real -> bool |
//// < : real x real -> bool |
34 |
if (aniso < clmin) { |
if (aniso < CLmin) { |
35 |
// terminate because anisotropy went too low |
// terminate because anisotropy went too low |
36 |
stabilize; |
stabilize; |
37 |
} |
} |
39 |
vec3 evec = principleEvec(ten); |
vec3 evec = principleEvec(ten); |
40 |
//// dot : vec3 x vec3 -> real |
//// dot : vec3 x vec3 -> real |
41 |
//// - : vec3 -> vec3 |
//// - : vec3 -> vec3 |
42 |
if (dot(evec, guide) < 0) { evec = -evec; } // fix eigenvector sign |
if (dot(evec, guide) < 0.0) { evec = -evec; } // fix eigenvector sign |
43 |
//// * : real x real -> real |
//// * : real x real -> real |
44 |
//// * : real x vec3 -> vec3 |
//// * : real x vec3 -> vec3 |
45 |
//// + : vec3 x vec3 -> vec3 |
//// + : vec3 x vec3 -> vec3 |
46 |
evec = principleEvec(F @ (pos + 0.5*stepSz*evec)); |
evec = principleEvec(F @ (pos + 0.5*stepSz*evec)); |
47 |
if (dot(evec, guide) < 0) { evec = -evec; } // fix eigenvector sign |
if (dot(evec, guide) < 0.0) { evec = -evec; } // fix eigenvector sign |
48 |
guide = evec; |
guide = evec; |
49 |
pos = pos + stepSz*evec; |
pos = pos + stepSz*evec; |
50 |
//// + : int x int -> int |
//// + : int x int -> int |