/*************************************/
/* Auteur : Rémi Synave */
/* Date de création : 01/03/07 */
/* Date de modification : 15/03/15 */
/* Version : 0.4 */
/*************************************/
/***************************************************************************/
/* This file is part of a2ri. */
/* */
/* a2ri is free software: you can redistribute it and/or modify it */
/* under the terms of the GNU Lesser General Public License as published */
/* by the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* a2ri is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public */
/* License along with a2ri. */
/* If not, see . */
/***************************************************************************/
#ifndef POINT__H
#define POINT__H
#include
#include
#include "util.h"
/**
Structure point2d
*/
typedef struct
{
double x,
y;
int att_int;
double att_double;
} point2d;
/**
Structure point3d
*/
typedef struct
{
double x,
y,
z;
int att_int;
double att_double;
} point3d,
*pt_point3d;
/**
Initialisation d'un point2d (x,y)
@param p pointeur sur un point2d
@param x
@param y
@return aucun
*/
void point2d_init (
point2d * p,
double x,
double y);
/**
Initialisation d'un point3d (x,y,z)
@param p pointeur sur un point3d
@param x
@param y
@param z
@return aucun
*/
void point3d_init (
point3d * p,
double x,
double y,
double z);
/**
Affichage d'un point2d
@param p le point
@return aucun
**/
void point2d_display (
const point2d * const p);
/**
Affichage d'un point3d
@param p le point
@return aucun
**/
void point3d_display (
const point3d * const p);
/**
Teste l'égalité de 2 points. Retourne vrai si les composantes sont égales deux à deux.
@param p1 premier point
@param p2 second point
@return 1 si p1==p2, 0 sinon
*/
int point3d_equal (
const point3d * const p1,
const point3d * const p2);
/**
Retourne la position de la valeur tosearch, -1 sinon
@param list tableau de point3d
@param size taille du tableau
@param tosearch point3d à chercher
@return position de la première occurence, -1 s'il n'apparait pas dans le tableau
*/
int list_point3d_contains (
const point3d * const list,
int size,
const point3d * const tosearch);
/**
Clone la liste
@param list la liste à cloner
@param size taille de la liste
@param list_clone liste clonée
@return 1 si la liste est bien clonée, 0 sinon
**/
int list_point3d_clone (
const point3d * const list,
int size,
point3d ** list_clone);
/**
Ajoute le point3d toadd en fin de liste
@param list pointeur sur le premier élément du tableau
@param size pointeur sur la taille du tableau
@param toadd point3d à ajouter
@param add_type WITH_REDUNDANCE ou WITHOUT_REDUNDANCE
avec redondance : ajout simple
sans redondance : ajout si la valeur n'apparait pas dans la liste
@return 1 si succès, 0 sinon
*/
int list_point3d_add (
point3d ** list,
int *size,
const point3d * const toadd,
int add_type);
/**
Enlève le point3d à la position index
@param list pointeur sur le premier élément du tableau
@param size pointeur sur la taille du tableau
@param index position du réel à supprimer
@return 1 si succès, 0 sinon
*/
int list_point3d_remove (
point3d ** list,
int *size,
int index);
/**
Mélange la liste de point3d
@param list tableau de point3d
@param size taille du tableau
@return aucun
*/
void list_point3d_mix (
point3d * list,
int size);
/**
Affichage de la liste de point3d
@param list tableau de point3d
@param size taille du tableau
@return aucun
*/
void list_point3d_display (
const point3d * const list,
int size);
/**
Calcul le centre de gravite d'un ensemble de point
@param data liste de point3d
@param nbpoint nombre de point
@return le centre de gravité
*/
point3d *center_of_mass (
const point3d * const data,
int nbpoint);
#endif