|
From: <de...@us...> - 2004-02-12 15:28:02
|
Update of /cvsroot/fudaa/fudaa_devel/ctulu/src/org/fudaa/ctulu In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19092 Added Files: CtuluGeometrie.java Log Message: Fonction de base : distance en 2D --- NEW FILE: CtuluGeometrie.java --- /* * @file CtuluGeometrie.java * @creation 29 janv. 2004 * @modification $Date: 2004/02/12 15:23:01 $ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... */ package org.fudaa.ctulu; /** * @author deniger * @version $Id: CtuluGeometrie.java,v 1.1 2004/02/12 15:23:01 deniger Exp $ */ public class CtuluGeometrie { private CtuluGeometrie() {} /** * Renvoie la distance entre le point p1(_x1,_y1) et le * point p2(_x2,_y2) */ public final static double getDistance( double _x1, double _y1, double _x2, double _y2) { return Math.sqrt((_x2 - _x1) * (_x2 - _x1) + (_y2 - _y1) * (_y2 - _y1)); } /** * Renvoie la norme au carre. */ public final static double getD2( double _x1, double _y1, double _x2, double _y2) { return (_x2 - _x1) * (_x2 - _x1) + (_y2 - _y1) * (_y2 - _y1); } /** * Renvoie la distance entre le point p(_x,_y) et * le segment [P1,P2] P1=_segX1,_segY1. * Tester dans ebli */ public final static double distanceFromSegment( double _segX1, double _segY1, double _segX2, double _segY2, double _x, double _y) { if ((_segX1 == _segX2) && (_segY1 == _segY2)) { return getDistance(_segX1, _segY1, _x, _y); } //P1=(_x1,_y1) //P2=(_x2,_y2) //X=thisPoint //vecteur A=X-P1 //vecteur B=P2-P1 //On calcule la projection de A sur B //le produit scalaire double p= (_x - _segX1) * (_segX2 - _segX1) + (_y - _segY1) * (_segY2 - _segY1); //si le point est "en dehors" du segment ,on prend la distance X P1 if (p < 0) return getDistance(_x, _y, _segX1, _segY1); //le produit scalaire/norme de B p= p / ((_segX2 - _segX1) * (_segX2 - _segX1) + (_segY2 - _segY1) * (_segY2 - _segY1)); //si p>1 p est en dehors du segment if (p > 1) { return getDistance(_x, _y, _segX2, _segY2); } //le vecteur projete a pour coordonnees PROJ: double projx= p * (_segX2 - _segX1); double projy= p * (_segY2 - _segY1); //le vecteur de norme (on reutilise le variable projx) projx= (_x - _segX1) - projx; projy= (_y - _segY1) - projy; return Math.sqrt(projx * projx + projy * projy); } /** * Tester dans dodico TestMaillage */ public final static double aireTriangle( double _x1, double _y1, double _x2, double _y2, double _x3, double _y3) { double p= (_x3 - _x1) * (_x2 - _x1) + (_y3 - _y1) * (_y2 - _y1); double d1d2= getDistance(_x1, _y1, _x2, _y2); //le produit scalaire/norme de B p= p / (d1d2 * d1d2); //le vecteur projete a pour coordonnees PROJ: double projx= p * (_x2 - _x1); double projy= p * (_y2 - _y1); //le vecteur de norme (on reutilise le variable projx) projx= (_x3 - _x1) - projx; projy= (_y3 - _y1) - projy; return d1d2 * Math.sqrt(projx * projx + projy * projy) / 2; } } |