## amitk_point amitk_point |

## Synopsis

    enum                AmitkView;
    enum                AmitkAxis;
    enum                AmitkDim;
    enum                AmitkLengthUnit;
    #define             AMITK_TYPE_POINT
    #define             AMITK_TYPE_VOXEL
    #define             AMITK_TYPE_PIXEL
    #define             AMITK_TYPE_CANVAS_POINT
    #define             AMITK_TYPE_AXES
                        AmitkPoint;
                        AmitkVoxel;
                        AmitkPixel;
                        AmitkCanvasPoint;
    GType               amitk_point_get_type                (void);
    AmitkPoint*         amitk_point_copy                    (const AmitkPoint *point);
    void                amitk_point_free                    (AmitkPoint *point);
    AmitkPoint          amitk_point_read_xml                (xmlNodePtr nodes,
                                                             gchar *descriptor,
                                                             gchar **perror_buf);
    void                amitk_point_write_xml               (xmlNodePtr node,
                                                             gchar *descriptor,
                                                             AmitkPoint point);
    GType               amitk_voxel_get_type                (void);
    AmitkVoxel*         amitk_voxel_copy                    (const AmitkVoxel *voxel);
    void                amitk_voxel_free                    (AmitkVoxel *voxel);
    AmitkVoxel          amitk_voxel_read_xml                (xmlNodePtr nodes,
                                                             gchar *descriptor,
                                                             gchar **perror_buf);
    void                amitk_voxel_write_xml               (xmlNodePtr node,
                                                             gchar *descriptor,
                                                             AmitkVoxel voxel);
    GType               amitk_pixel_get_type                (void);
    AmitkPixel*         amitk_pixel_copy                    (const AmitkPixel *pixel);
    void                amitk_pixel_free                    (AmitkPixel *pixel);
    GType               amitk_canvas_point_get_type         (void);
    AmitkCanvasPoint*   amitk_canvas_point_copy             (const AmitkCanvasPoint *point);
    void                amitk_canvas_point_free             (AmitkCanvasPoint *point);
    typedef             AmitkAxes;
    GType               amitk_axes_get_type                 (void);
    AmitkAxes*          amitk_axes_copy                     (const AmitkAxes *axes);
    void                amitk_axes_free                     (AmitkAxes *axes);
    void                amitk_axes_copy_in_place            (AmitkAxes dest_axes,
                                                             const AmitkAxes src_axes);
    void                amitk_axes_transpose                (AmitkAxes axes);
    void                amitk_axes_mult                     (const AmitkAxes const_axes1,
                                                             const AmitkAxes const_axes2,
                                                             AmitkAxes dest_axes);
    void                amitk_axes_make_orthonormal         (AmitkAxes axes);
    void                amitk_axes_rotate_on_vector         (AmitkAxes axes,
                                                             AmitkPoint vector,
                                                             amide_real_t theta);
    AmitkPoint          amitk_axes_get_orthogonal_axis      (const AmitkAxes axes,
                                                             const AmitkView which_view,
                                                             const AmitkLayout which_layout,
                                                             const AmitkAxis which_axis);
    AmitkPoint          amitk_axes_get_normal_axis          (const AmitkAxes axes,
                                                             const AmitkView which_view);
    typedef             AmitkCorners;
    GType               amitk_corners_get_type              (void);
    void                amitk_corners_free                  (AmitkCorners *corners);
    AmitkCorners*       amitk_corners_copy                  (const AmitkCorners *corners);
    #define             EPSILON
    #define             CLOSE
    #define             EMPTY
    #define             SIGMA_TO_FWHM
    #define             SIGMA_TO_FWTM
    #define             REAL_EQUAL                          (x,y)
    #define             EQUAL_ZERO                          (fp1)
    #define             REAL_CLOSE                          (x,y)
    #define             POINT_EQUAL                         (point1,point2)
    #define             VOXEL_EQUAL                         (voxel1,voxel2)
    #define             VOXEL_TO_POINT                      (vox, vox_size, real)
    #define             POINT_TO_VOXEL                      (real, vox_size, frame, gate, vox)
    #define             VOXEL_CORNER                        (vox, vox_size, corner)
    #define             POINT_MAX                           (point1)
    #define             POINT_DOT_PRODUCT                   (point1,point2)
    #define             POINT_MAGNITUDE                     (point)
    #define             POINT_ABS                           (point1,point2)
    #define             POINT_ADD                           (point1,point2,point3)
    #define             POINT_SUB                           (point1,point2,point3)
    #define             POINT_MULT                          (point1,point2,point3)
    #define             POINT_DIV                           (point1,point2,point3)
    #define             POINT_DIFF                          (point1,point2,point3)
    #define             POINT_CMULT                         (cm,point1,point3)
    #define             POINT_CROSS_PRODUCT                 (point1, point2, point3)
    #define             POINT_MADD                          (cm,point1,dm,point2,point3)
    AmitkPoint          canvas_point_2_point                (AmitkPoint volume_corner,
                                                             gint width,
                                                             gint height,
                                                             gdouble x_offset,
                                                             gdouble y_offset,
                                                             AmitkCanvasPoint canvas_cpoint);
    AmitkCanvasPoint    point_2_canvas_point                (AmitkPoint volume_corner,
                                                             gint width,
                                                             gint height,
                                                             gdouble x_offset,
                                                             gdouble y_offset,
                                                             AmitkPoint canvas_point);
    void                voxel_print                         (gchar *message,
                                                             const AmitkVoxel voxel);
    amide_intpoint_t    voxel_get_dim                       (const AmitkVoxel voxel,
                                                             const AmitkDim which_dim);
    void                voxel_set_dim                       (AmitkVoxel *voxel,
                                                             const AmitkDim which_dim,
                                                             amide_intpoint_t value);
    void                point_print                         (gchar *message,
                                                             const AmitkPoint point);
    AmitkPoint          point_rotate_on_vector              (const AmitkPoint in,
                                                             const AmitkPoint vector,
                                                             const amide_real_t theta);
    amide_real_t        point_get_component                 (const AmitkPoint point,
                                                             const AmitkAxis which_axis);
    void                point_set_component                 (AmitkPoint *point,
                                                             const AmitkAxis which_axis,
                                                             const amide_real_t value);
    extern              const AmitkPoint zero_point;
    #define             ONE_POINT
    extern              const AmitkPoint one_point;
    extern              const AmitkPoint ten_point;
    extern              const AmitkVoxel zero_voxel;
    #define             ONE_VOXEL
    extern              const AmitkVoxel one_voxel;
    extern              const AmitkAxes base_axes;
    const gchar*        amitk_view_get_name                 (const AmitkView view);
    const gchar*        amitk_dim_get_name                  (const AmitkDim dim);
    const gchar*        amitk_axis_get_name                 (const AmitkAxis axis);
    const gchar*        amitk_length_unit_get_name          (const AmitkLengthUnit length_unit);

## Description

## Details

### enum AmitkView

    typedef enum {
      AMITK_VIEW_TRANSVERSE,
      AMITK_VIEW_CORONAL,
      AMITK_VIEW_SAGITTAL,
      AMITK_VIEW_NUM
    } AmitkView;

### enum AmitkAxis

    typedef enum {
      AMITK_AXIS_X,
      AMITK_AXIS_Y,
      AMITK_AXIS_Z,
      AMITK_AXIS_NUM
    } AmitkAxis;

### enum AmitkDim

    typedef enum {
      AMITK_DIM_X,
      AMITK_DIM_Y,
      AMITK_DIM_Z,
      AMITK_DIM_G,
      AMITK_DIM_T,
      AMITK_DIM_NUM
    } AmitkDim;

### enum AmitkLengthUnit

    typedef enum {
      AMITK_LENGTH_UNIT_MM,
      AMITK_LENGTH_UNIT_CM,
      AMITK_LENGTH_UNIT_M,
      AMITK_LENGTH_UNIT_INCHES,
      AMITK_LENGTH_UNIT_FEET,
      AMITK_LENGTH_UNIT_NUM
    } AmitkLengthUnit;

### AMITK_TYPE_POINT

    #define	AMITK_TYPE_POINT		(amitk_point_get_type ())

### AMITK_TYPE_VOXEL

    #define AMITK_TYPE_VOXEL                (amitk_voxel_get_type ())

### AMITK_TYPE_PIXEL

    #define AMITK_TYPE_PIXEL                (amitk_pixel_get_type ())

### AMITK_TYPE_CANVAS_POINT

    #define AMITK_TYPE_CANVAS_POINT         (amitk_canvas_point_get_type ())

### AMITK_TYPE_AXES

    #define AMITK_TYPE_AXES                 (amitk_axes_get_type ())

### AmitkPoint

    typedef struct {
      amide_real_t x;
      amide_real_t y;
      amide_real_t z;
    } AmitkPoint;

### AmitkVoxel

    typedef struct {
      amide_intpoint_t x;
      amide_intpoint_t y;
      amide_intpoint_t z;
      amide_intpoint_t g;
      amide_intpoint_t t;
    } AmitkVoxel;

### AmitkPixel

    typedef struct {
      amide_intpoint_t x;
      amide_intpoint_t y;
    } AmitkPixel;

### AmitkCanvasPoint

    typedef struct {
      amide_real_t x;
      amide_real_t y;
    } AmitkCanvasPoint;

### amitk_point_get_type ()

    GType               amitk_point_get_type                (void);

Returns : |

### amitk_point_copy ()

    AmitkPoint*         amitk_point_copy                    (const AmitkPoint *point);

`point` : |
Returns : |

### amitk_point_free ()

    void                amitk_point_free                    (AmitkPoint *point);

`point` : |

### amitk_point_read_xml ()

    AmitkPoint          amitk_point_read_xml                (xmlNodePtr nodes,
                                                             gchar *descriptor,
                                                             gchar **perror_buf);

`nodes` : |
`descriptor` : |
`perror_buf` : |
Returns : |

### amitk_point_write_xml ()

    void                amitk_point_write_xml               (xmlNodePtr node,
                                                             gchar *descriptor,
                                                             AmitkPoint point);

`node` : |
`descriptor` : |
`point` : |

### amitk_voxel_get_type ()

    GType               amitk_voxel_get_type                (void);

Returns : |

### amitk_voxel_copy ()

    AmitkVoxel*         amitk_voxel_copy                    (const AmitkVoxel *voxel);

`voxel` : |
Returns : |

### amitk_voxel_free ()

    void                amitk_voxel_free                    (AmitkVoxel *voxel);

`voxel` : |

### amitk_voxel_read_xml ()

    AmitkVoxel          amitk_voxel_read_xml                (xmlNodePtr nodes,
                                                             gchar *descriptor,
                                                             gchar **perror_buf);

`nodes` : |
`descriptor` : |
`perror_buf` : |
Returns : |

### amitk_voxel_write_xml ()

    void                amitk_voxel_write_xml               (xmlNodePtr node,
                                                             gchar *descriptor,
                                                             AmitkVoxel voxel);

`node` : |
`descriptor` : |
`voxel` : |

### amitk_pixel_get_type ()

    GType               amitk_pixel_get_type                (void);

Returns : |

### amitk_pixel_copy ()

    AmitkPixel*         amitk_pixel_copy                    (const AmitkPixel *pixel);

`pixel` : |
Returns : |

### amitk_pixel_free ()

    void                amitk_pixel_free                    (AmitkPixel *pixel);

`pixel` : |

### amitk_canvas_point_get_type ()

    GType               amitk_canvas_point_get_type         (void);

Returns : |

### amitk_canvas_point_copy ()

    AmitkCanvasPoint*   amitk_canvas_point_copy             (const AmitkCanvasPoint *point);

`point` : |
Returns : |

### amitk_canvas_point_free ()

    void                amitk_canvas_point_free             (AmitkCanvasPoint *point);

`point` : |

### AmitkAxes

    typedef AmitkPoint AmitkAxes[AMITK_AXIS_NUM];

### amitk_axes_get_type ()

    GType               amitk_axes_get_type                 (void);

Returns : |

### amitk_axes_copy ()

    AmitkAxes*          amitk_axes_copy                     (const AmitkAxes *axes);

`axes` : |
Returns : |

### amitk_axes_free ()

    void                amitk_axes_free                     (AmitkAxes *axes);

`axes` : |

### amitk_axes_copy_in_place ()

    void                amitk_axes_copy_in_place            (AmitkAxes dest_axes,
                                                             const AmitkAxes src_axes);

`dest_axes` : |
`src_axes` : |

### amitk_axes_transpose ()

    void                amitk_axes_transpose                (AmitkAxes axes);

`axes` : |

### amitk_axes_mult ()

    void                amitk_axes_mult                     (const AmitkAxes const_axes1,
                                                             const AmitkAxes const_axes2,
                                                             AmitkAxes dest_axes);

`const_axes1` : |
`const_axes2` : |
`dest_axes` : |

### amitk_axes_make_orthonormal ()

    void                amitk_axes_make_orthonormal         (AmitkAxes axes);

`axes` : |

### amitk_axes_rotate_on_vector ()

    void                amitk_axes_rotate_on_vector         (AmitkAxes axes,
                                                             AmitkPoint vector,
                                                             amide_real_t theta);

`axes` : |
`vector` : |
`theta` : |

### amitk_axes_get_orthogonal_axis ()

    AmitkPoint          amitk_axes_get_orthogonal_axis      (const AmitkAxes axes,
                                                             const AmitkView which_view,
                                                             const AmitkLayout which_layout,
                                                             const AmitkAxis which_axis);

`axes` : |
`which_view` : |
`which_layout` : |
`which_axis` : |
Returns : |

### amitk_axes_get_normal_axis ()

    AmitkPoint          amitk_axes_get_normal_axis          (const AmitkAxes axes,
                                                             const AmitkView which_view);

`axes` : |
`which_view` : |
Returns : |

### AmitkCorners

    typedef AmitkPoint AmitkCorners[2];

### amitk_corners_get_type ()

    GType               amitk_corners_get_type              (void);

Returns : |

### amitk_corners_free ()

    void                amitk_corners_free                  (AmitkCorners *corners);

`corners` : |

### amitk_corners_copy ()

    AmitkCorners*       amitk_corners_copy                  (const AmitkCorners *corners);

`corners` : |
Returns : |

### EPSILON

    #define EPSILON 1.4901161193847656e-08 /* what's close enough to be equal.... */

### CLOSE

    #define CLOSE 0.0001 /* within 0.01% */

### EMPTY

    #define EMPTY 0.0

### SIGMA_TO_FWHM

    #define SIGMA_TO_FWHM 2.354820045

### SIGMA_TO_FWTM

    #define SIGMA_TO_FWTM 4.291932053

### REAL_EQUAL()

    #define REAL_EQUAL(x,y) (fabs(x-y)/MAX(MAX(fabs(x),fabs(y)),DBL_MIN) < EPSILON)

`x` : |
`y` : |

### EQUAL_ZERO()

    #define EQUAL_ZERO(fp1) (REAL_EQUAL((fp1), 0.0))

`fp1` : |

### REAL_CLOSE()

    #define REAL_CLOSE(x,y) (fabs(x-y)/MAX(MAX(fabs(x),fabs(y)),DBL_MIN) < CLOSE)

`x` : |
`y` : |

### POINT_EQUAL()

    #define             POINT_EQUAL(point1,point2)

`point1` : |
`point2` : |

### VOXEL_EQUAL()

    #define             VOXEL_EQUAL(voxel1,voxel2)

`voxel1` : |
`voxel2` : |

### VOXEL_TO_POINT()

    #define             VOXEL_TO_POINT(vox, vox_size, real)

`vox` : |
`vox_size` : |
`real` : |

### POINT_TO_VOXEL()

    #define             POINT_TO_VOXEL(real, vox_size, frame, gate, vox)

`real` : |
`vox_size` : |
`frame` : |
`gate` : |
`vox` : |

### VOXEL_CORNER()

    #define             VOXEL_CORNER(vox, vox_size, corner)

`vox` : |
`vox_size` : |
`corner` : |

### POINT_MAX()

    #define POINT_MAX(point1) (MAX( MAX((point1).x, (point1).y), (point1).z))

`point1` : |

### POINT_DOT_PRODUCT()

    #define POINT_DOT_PRODUCT(point1,point2) ((point1).x*(point2).x+(point1).y*(point2).y+(point1).z*(point2).z)

`point1` : |
`point2` : |

### POINT_MAGNITUDE()

    #define POINT_MAGNITUDE(point) (sqrt(POINT_DOT_PRODUCT((point), (point))))

`point` : |

### POINT_ABS()

    #define             POINT_ABS(point1,point2)

`point1` : |
`point2` : |

### POINT_ADD()

    #define             POINT_ADD(point1,point2,point3)

`point1` : |
`point2` : |
`point3` : |

### POINT_SUB()

    #define             POINT_SUB(point1,point2,point3)

`point1` : |
`point2` : |
`point3` : |

### POINT_MULT()

    #define             POINT_MULT(point1,point2,point3)

`point1` : |
`point2` : |
`point3` : |

### POINT_DIV()

    #define             POINT_DIV(point1,point2,point3)

`point1` : |
`point2` : |
`point3` : |

### POINT_DIFF()

    #define             POINT_DIFF(point1,point2,point3)

`point1` : |
`point2` : |
`point3` : |

### POINT_CMULT()

    #define             POINT_CMULT(cm,point1,point3)

`cm` : |
`point1` : |
`point3` : |

### POINT_CROSS_PRODUCT()

    #define             POINT_CROSS_PRODUCT(point1, point2, point3)

`point1` : |
`point2` : |
`point3` : |

### POINT_MADD()

    #define             POINT_MADD(cm,point1,dm,point2,point3)

`cm` : |
`point1` : |
`dm` : |
`point2` : |
`point3` : |

### canvas_point_2_point ()

    AmitkPoint          canvas_point_2_point                (AmitkPoint volume_corner,
                                                             gint width,
                                                             gint height,
                                                             gdouble x_offset,
                                                             gdouble y_offset,
                                                             AmitkCanvasPoint canvas_cpoint);

`volume_corner` : |
`width` : |
`height` : |
`x_offset` : |
`y_offset` : |
`canvas_cpoint` : |
Returns : |

### point_2_canvas_point ()

    AmitkCanvasPoint    point_2_canvas_point                (AmitkPoint volume_corner,
                                                             gint width,
                                                             gint height,
                                                             gdouble x_offset,
                                                             gdouble y_offset,
                                                             AmitkPoint canvas_point);

`volume_corner` : |
`width` : |
`height` : |
`x_offset` : |
`y_offset` : |
`canvas_point` : |
Returns : |

### voxel_print ()

    void                voxel_print                         (gchar *message,
                                                             const AmitkVoxel voxel);

`message` : |
`voxel` : |

### voxel_get_dim ()

    amide_intpoint_t    voxel_get_dim                       (const AmitkVoxel voxel,
                                                             const AmitkDim which_dim);

`voxel` : |
`which_dim` : |
Returns : |

### voxel_set_dim ()

    void                voxel_set_dim                       (AmitkVoxel *voxel,
                                                             const AmitkDim which_dim,
                                                             amide_intpoint_t value);

`voxel` : |
`which_dim` : |
`value` : |

### point_print ()

    void                point_print                         (gchar *message,
                                                             const AmitkPoint point);

`message` : |
`point` : |

### point_rotate_on_vector ()

    AmitkPoint          point_rotate_on_vector              (const AmitkPoint in,
                                                             const AmitkPoint vector,
                                                             const amide_real_t theta);

`in` : |
`vector` : |
`theta` : |
Returns : |

### point_get_component ()

    amide_real_t        point_get_component                 (const AmitkPoint point,
                                                             const AmitkAxis which_axis);

`point` : |
`which_axis` : |
Returns : |

### point_set_component ()

    void                point_set_component                 (AmitkPoint *point,
                                                             const AmitkAxis which_axis,
                                                             const amide_real_t value);

`point` : |
`which_axis` : |
`value` : |

### zero_point

    extern const AmitkPoint zero_point;

### ONE_POINT

    #define ONE_POINT {1.0,1.0,1.0}

### one_point

    extern const AmitkPoint one_point;

### ten_point

    extern const AmitkPoint ten_point;

### zero_voxel

    extern const AmitkVoxel zero_voxel;

### ONE_VOXEL

    #define ONE_VOXEL {1,1,1,1,1}

### one_voxel

    extern const AmitkVoxel one_voxel;

### base_axes

    extern const AmitkAxes base_axes;

### amitk_view_get_name ()

    const gchar*        amitk_view_get_name                 (const AmitkView view);

`view` : |
Returns : |

### amitk_dim_get_name ()

    const gchar*        amitk_dim_get_name                  (const AmitkDim dim);

`dim` : |
Returns : |

### amitk_axis_get_name ()

    const gchar*        amitk_axis_get_name                 (const AmitkAxis axis);

`axis` : |
Returns : |

### amitk_length_unit_get_name ()

    const gchar*        amitk_length_unit_get_name          (const AmitkLengthUnit length_unit);

`length_unit` : |
Returns : |