From: <emm...@us...> - 2008-12-04 15:02:28
|
Revision: 4269 http://fudaa.svn.sourceforge.net/fudaa/?rev=4269&view=rev Author: emmanuel_martin Date: 2008-12-04 15:02:10 +0000 (Thu, 04 Dec 2008) Log Message: ----------- petite am?\195?\169lioration du calcul de la projection dans l'algo de test de l'interpolation de profil a partir d'une trace de profil Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java 2008-12-04 13:33:31 UTC (rev 4268) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java 2008-12-04 15:02:10 UTC (rev 4269) @@ -195,20 +195,17 @@ /** Projection de a(x, y, z) sur la droite passant par o et e. */ private Coordinate projection(GISPoint o, GISPoint e, double x, double y, double z) { - // Calcul de vecteur u=vec oe et normalisation - Coordinate vecU=new Coordinate(e.getX()-o.getX(), e.getY()-o.getY(), e.getZ()-o.getZ()); - double normeU=Math.sqrt(vecU.x*vecU.x+vecU.y*vecU.y+vecU.z*vecU.z); - vecU.x=vecU.x/normeU; - vecU.y=vecU.y/normeU; - vecU.z=vecU.z/normeU; - // Calcul du produit scalaire u et oa =k - double k=(x-o.getX())*vecU.x+(y-o.getY())*vecU.y+(z-o.getZ())*vecU.z; - // OP=ku - Coordinate p=new Coordinate(k*vecU.x+o.getX(), k*vecU.y+o.getY(), k*vecU.z+o.getZ()); - if(dist(o.getCoordinate(), p)+dist(p, e.getCoordinate())!=dist(o.getCoordinate(), e.getCoordinate())) + Coordinate vOE=new Coordinate(e.getX()-o.getX(), e.getY()-o.getY(), e.getZ()-o.getZ()); + Coordinate vOA=new Coordinate(x-o.getX(), y-o.getY(), z-o.getZ()); + double normeOE=Math.sqrt(vOE.x*vOE.x+vOE.y*vOE.y+vOE.z*vOE.z); + double produitScalaireOEOA=vOE.x*vOA.x+vOE.y*vOA.y+vOE.z*vOA.z; + + double rapportSurAB=produitScalaireOEOA/(normeOE*normeOE); + + if(rapportSurAB<0||rapportSurAB>1) return null; else - return p; + return new Coordinate(vOE.x*rapportSurAB+o.getX(), vOE.y*rapportSurAB+o.getY(), vOE.z*rapportSurAB+o.getZ()); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |