summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/sphdthesis/example/algorithm.tex
blob: cab0e632b2ca0acdd595c22c63fb8790944cf867 (plain)
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
\begin{SgAlgorithm}[t]
    \SetKwInOut{Input}{Input}
    \SetKwInOut{Output}{Output}
    \SetKwFunction{GenerateAlphaVeins}{GenerateAlphaVeins}
    \SetKwFunction{GenerateUniLeaf}{GenerateUnilobedLeaf}
    \SetKwFunction{IntersectLobes}{IntersectLobes}
    \SetKwFunction{FitBSpline}{FitBSpline}
    \SetKwFunction{GenerateLaminarMargin}{GenerateLaminarMargin}
    \SetKwFunction{Index}{Index}
    \BlankLine
    \Input{Parameters of the leaf model.}
    \Output{Laminar shape $M$ as a triangle mesh.}
    \BlankLine
    $\{\alpha_i\} \leftarrow \GenerateAlphaVeins(s_0^l, s_0^r, \Delta s)$ \;
    $L\leftarrow \GenerateUniLeaf(\theta(B^l), \theta(B^r), \theta(A^l), \theta(A^r), \vect{W}^l, \vect{W}^r)$ \;
    \BlankLine
    \ForEach{$\alpha$-vein $\alpha_i$}
    {%
        $L_i \leftarrow L$ \;
        $L_i \leftarrow T_i\cdot L_i$ \;
    }
    \BlankLine
    \For{$i=1$ \KwTo $n-1$}
    {%
        $\vect{p}^I(v_i) \leftarrow$ \IntersectLobes{$L_i$, $L_{i+1}$} \;
        $\vect{d}(v_i) \leftarrow \dfrac{\vect{d}(\alpha_i) + \vect{d}(\alpha_{i+1})}{2}$ \;
        \If{$p(v)$ or $\theta(v)$ is specified}
        {%
            $\vect{p}(v_i) \leftarrow  \vect{p}^I(v_i) + p(v) l(\alpha_i) \vect{d}(v_i)$ \;
        }
    }
    \BlankLine
    \For{$i=1$ \KwTo $n-1$}
    {%
        \eIf{$p(v)$ or $\theta(v)$ is not specified}
        {%
            $M \leftarrow M \cup \left\{\vect{p}_j \mid j \in L_i \wedge \Index(\vect{q}(\alpha_i), L_i) \leq j \leq \Index(\vect{p}^I(v_i), L_i) \right\}$ \;
          $M \leftarrow M \cup \left\{\vect{p}_j \mid j \in L_{i+1} \wedge \Index(\vect{p}^I(v_i), L_{i+1}) < j \leq \Index(\vect{q}(\alpha_{i+1}), L_{i+1})\right\}$ \;
        }
        {%
           $b_1 \leftarrow \FitBSpline(\vect{q}(\alpha_i), \theta(\vect{q}(\alpha_i)), \vect{W}^l(\alpha_i), \vect{r}(v_i), \theta(v_i))$ \;
            $b_2 \leftarrow \FitBSpline(\vect{r}(v_i), \theta(v_i), \vect{W}^r(\alpha_{i+1}), \vect{q}(\alpha_{i+1}), \theta(\vect{q}(\alpha_{i+1})))$ \;
            Discretize $b_1$ and append the points to $M$ \;
            Discretize $b_2$ and append the points to $M$ \;
        }
    }
    \caption[Laminar shape generation algorithm for multilobed leaves]{Laminar shape generation algorithm for multilobed leaves.}
    \label{algo:Ch6-ShapeGen}
\end{SgAlgorithm}