# Mesh transform

This tutorial describes how to apply simple geometrical mesh transformations with the toolbox `NIHU`.

## Contents

- Translate
- Scale
- Rotate
- Reflect
- Extrude
- Revolve
- Repeat

## Translate

Meshes can be translated using the toolbox function translate_mesh by defining the translation vector . In the following example, a sphere mesh is created and translated from the origin to a given location.

    sphere = create_sphere_boundary(1, 10);
    d = [1 1 1];                            % translation vector
    sphere = translate_mesh(sphere, d);

## Scale

Meshes can be scaled using the toolbox function scale_mesh by defining the scaling parameter. In the following example, a unit sphere surface is magnified to a larger radius.

    sphere = create_sphere_boundary(1, 10);
    scale = 5;
    sphere1 = scale_mesh(sphere, scale);

Meshes can be scaled without keepeng the aspect ratio, by defining the scaling parameters separately along the , and axes. In the following example, a unit sphere is generated and is scaled to an ellipse

    scale = [2 3 4];
    ellipse = scale_mesh(sphere, scale);

    figure;
    subplot(1,2,1); plot_mesh(sphere1);
    subplot(1,2,2); plot_mesh(ellipse);

## Rotate

Meshes can be rotated around a given vector of rotation, using the toolbox function rotate_mesh. In the present example, a line model is rotated around the axis by an angle of .

    lin = create_line([1 0 0;1 1 0], 10); % create a line to rotatae
    lin2 = rotate_mesh(lin, pi/3, [0 0 1]);

    figure;
    plot_mesh(lin);
    plot_mesh(lin2);

## Reflect

Meshes can be reflected to a symmetry plane using the toolbox function reflect_mesh. The present example reflects a straight line to the plane.

    lin = create_line([1 0 0; 2 1 0], 5);
    lin2 = reflect_mesh(lin, [1 0 0]);

    figure;
    plot_mesh(lin);
    plot_mesh(lin2);

## Extrude

Extrusions are performed by the function extrude_mesh can be used to

- Extrude 1D meshes to 2D surfaces
- Extrude 2D surfaces to volumes.

In the present example, a circle quadrant is extruded into a circular bar volume. The extrusion is governed by an extrusion direction vector and the number of repetitions .

    circle = create_circle_quadrant(1, 5);
    bar = extrude_mesh(circle, [0 0 .2], 10);

Similarly, 1D objects can be extruded to 2D surfaces as follows:

    line = create_line(1, 10);
    slab = extrude_mesh(line, [.1 .05 0], 10);

    figure;
    subplot(1,2,1); plot_mesh(bar);
    subplot(1,2,2); plot_mesh(slab);

## Revolve

Meshes can be revolved using the toolbox function revolve_mesh.

Revolution can be used to

- create surface meshes from line meshes
- and to create 3D volume meshes from surface meshes.

In the present example, a line is revolved in order to form an annular ring. The revolution is governed by the rotation vector, the rotation angle of a rotation segment and the number of rotation repetitions.

    lin = create_line(1, 10);
    base = [-1 0 0];    % base of rotation vector
    dir = [0 0 1];      % direction of rotation vector
    dphi = pi/50;       % amount of a rotation segment
    nPhi = 20;          % number of repetitions
    ring = revolve_mesh(lin, dphi, nPhi, dir, base);

In the next example, a slab is revolved in order to form a cylindrical annular solid volume.

    slab = create_slab([1 1], [10 10]);
    dir = [0 -1 0];     % direction of rotation vector
    solid = revolve_mesh(slab, dphi, nPhi, dir, base);

    figure;
    subplot(1,2,1); plot_mesh(ring);
    subplot(1,2,2); plot_mesh(solid);

## Repeat

Meshes can be repeated using the toolbox function repeat_mesh. In the example, a cat's eye will be repeated along two coordinate directions.

    cat = create_catseye(1, 10);
    dir1 = [5 0 1]; % direction of repetition in the first direction
    n1 = 3;         % number of repetitions
    dir2 = [0 3 1]; % direction of repetition in the second direction
    n2 = 5;         % number of repetitions
    cat = repeat_mesh(cat, dir1, n1);
    cat = repeat_mesh(cat, dir2, n2);

    figure;
    plot_mesh(cat); view([100 25]);