|
From: <de...@us...> - 2012-06-07 07:38:37
|
Revision: 7282
http://fudaa.svn.sourceforge.net/fudaa/?rev=7282&view=rev
Author: deniger
Date: 2012-06-07 07:38:31 +0000 (Thu, 07 Jun 2012)
Log Message:
-----------
Modified Paths:
--------------
trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java
Modified: trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java
===================================================================
--- trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java 2012-06-07 06:22:33 UTC (rev 7281)
+++ trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java 2012-06-07 07:38:31 UTC (rev 7282)
@@ -54,7 +54,8 @@
* @param _z2 z du point 2
* @return Renvoie la distance entre le point p1(_x1,_y1,_z1) et le point p2(_x2,_y2,_z2)
*/
- public static double getDistance3D(final double _x1, final double _y1, final double _z1, final double _x2, final double _y2, final double _z2) {
+ public static double getDistance3D(final double _x1, final double _y1, final double _z1, final double _x2, final double _y2,
+ final double _z2) {
return Math.sqrt((_x2 - _x1) * (_x2 - _x1) + (_y2 - _y1) * (_y2 - _y1) + (_z2 - _z1) * (_z2 - _z1));
}
@@ -90,8 +91,9 @@
* @param _y y du point a considerer
* @return Renvoie la distance entre le point p(_x,_y) et le segment [P1,P2] P1=_segX1,_segY1. Tester dans ebli
*/
- public static double distanceFromSegment(final double _segX1, final double _segY1, final double _segX2, final double _segY2, final double _x,
- final double _y) {
+ public static double distanceFromSegment(final double _segX1, final double _segY1, final double _segX2, final double _segY2,
+ final double _x,
+ final double _y) {
if ((_segX1 == _segX2) && (_segY1 == _segY2)) {
return getDistance(_segX1, _segY1, _x, _y);
}
@@ -149,10 +151,9 @@
// projy = (_y - _segY1) - projy;
// return projx * projx + projy * projy;
// }
-
/**
* Tester dans dodico TestMaillage.
- *
+ *
* @param _x1 x de P1
* @param _y1 y de P1
* @param _x2 x de P2
@@ -161,7 +162,8 @@
* @param _y3 y de P3
* @return l'aire du triangle P1P2P3
*/
- public static double aireTriangle(final double _x1, final double _y1, final double _x2, final double _y2, final double _x3, final double _y3) {
+ public static double aireTriangle(final double _x1, final double _y1, final double _x2, final double _y2, final double _x3,
+ final double _y3) {
// ERROR aie
double p = (_x3 - _x1) * (_x2 - _x1) + (_y3 - _y1) * (_y2 - _y1);
final double d1d2 = getDistance(_x1, _y1, _x2, _y2);
@@ -177,8 +179,9 @@
}
/**
- * Donne la valeur de l'angle <code>_angleInit</code> dans l'intervalle [-360;360].
- *
+ * Donne la valeur de l'angle
+ * <code>_angleInit</code> dans l'intervalle [-360;360].
+ *
* @param _angleInit l'angle a ajuster dans l'intervalle [-360;360]
* @return l'equivalent dans l'intervalle [-360;360]
*/
@@ -186,17 +189,50 @@
return ((_angleInit > 360) || (_angleInit < -360)) ? _angleInit % 360 : _angleInit;
}
+ /**
+ * une projection simple sans rotation ni d\xE9formation de l'image.
+ * @param _ptImages
+ * @param _ptReels
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public static AffineTransform projection2Points(final Point2D[] _ptImages, final Point2D[] _ptReels) throws IllegalArgumentException {
+ if ((_ptImages.length != _ptReels.length) || (_ptImages.length < 2)) {
+ throw new IllegalArgumentException("badData");
+ }
+ Point2D ptImage1 = _ptImages[0];
+ Point2D ptReel1 = _ptReels[0];
+ double dx = ptReel1.getX() - ptImage1.getX();
+ double dy = ptReel1.getY() - ptImage1.getY();
+
+ double distReel = _ptReels[0].distance(_ptReels[1]);
+ if (distReel < 1E-5) {
+ return null;
+ }
+ double distPixel = _ptImages[0].distance(_ptImages[1]);
+ if (distPixel < 1E-5) {
+ return null;
+ }
+ Point2D[] newPtImage = new Point2D[3];
+ Point2D[] newPtReel = new Point2D[3];
+ newPtImage[0] = _ptImages[0];
+ newPtImage[1] = _ptImages[1];
+ newPtImage[2] = new Point2D.Double(_ptImages[0].getX(), _ptImages[1].getY());
+
+ newPtReel[0] = _ptReels[0];
+ newPtReel[1] = _ptReels[1];
+ newPtReel[2] = new Point2D.Double(_ptReels[0].getX(), _ptReels[1].getY());
+ return projection(newPtImage, newPtReel);
+ }
+
public static AffineTransform projection(final Point2D[] _ptImages, final Point2D[] _ptReels) throws IllegalArgumentException {
double[] proj = new double[6];
if (_ptImages == null || _ptReels == null) {
return null;
- // double[] projInv = new double[6];
- // double[] m_MatZoom = new double[6];
- // initialiser avec la matrice I
- /*
- * m_MatZoom[0]=1; m_MatZoom[4]=1;
- */
}
+ if (_ptImages.length == 2) {
+ return projection2Points(_ptImages, _ptReels);
+ }
if ((_ptImages.length != _ptReels.length) || (_ptImages.length < 3)) {
throw new IllegalArgumentException("badData");
@@ -206,37 +242,37 @@
try {
// modif Gilbert : la division par 0 ne leve plus d'exception !!!
final double diviseur = -_ptImages[2].getY() * _ptImages[0].getX() + _ptImages[2].getY() * _ptImages[1].getX() - _ptImages[0].getY()
- * _ptImages[1].getX() + _ptImages[1].getY() * _ptImages[0].getX() + _ptImages[0].getY() * _ptImages[2].getX() - _ptImages[1].getY()
- * _ptImages[2].getX();
+ * _ptImages[1].getX() + _ptImages[1].getY() * _ptImages[0].getX() + _ptImages[0].getY() * _ptImages[2].getX() - _ptImages[1].getY()
+ * _ptImages[2].getX();
if (Math.abs(diviseur) < 0.0001) {
throw new Exception("div0");
}
proj[0] = (float) ((-_ptImages[1].getY() * _ptReels[2].getX() - _ptImages[0].getY() * _ptReels[1].getX() + _ptImages[2].getY()
- * _ptReels[1].getX() + _ptImages[1].getY() * _ptReels[0].getX() + _ptImages[0].getY() * _ptReels[2].getX() - _ptImages[2].getY()
- * _ptReels[0].getX()) / diviseur);
+ * _ptReels[1].getX() + _ptImages[1].getY() * _ptReels[0].getX() + _ptImages[0].getY() * _ptReels[2].getX() - _ptImages[2].getY()
+ * _ptReels[0].getX()) / diviseur);
proj[1] = (float) (-(-_ptImages[1].getX() * _ptReels[2].getX() + _ptImages[2].getX() * _ptReels[1].getX() + _ptImages[1].getX()
- * _ptReels[0].getX() - _ptImages[0].getX() * _ptReels[1].getX() + _ptImages[0].getX() * _ptReels[2].getX() - _ptImages[2].getX()
- * _ptReels[0].getX()) / diviseur);
+ * _ptReels[0].getX() - _ptImages[0].getX() * _ptReels[1].getX() + _ptImages[0].getX() * _ptReels[2].getX() - _ptImages[2].getX()
+ * _ptReels[0].getX()) / diviseur);
proj[2] = (float) ((_ptImages[2].getX() * _ptImages[0].getY() * _ptReels[1].getX() - _ptImages[1].getX() * _ptImages[0].getY()
- * _ptReels[2].getX() + _ptImages[1].getY() * _ptImages[0].getX() * _ptReels[2].getX() + _ptImages[2].getY() * _ptImages[1].getX()
- * _ptReels[0].getX() - _ptImages[2].getY() * _ptImages[0].getX() * _ptReels[1].getX() - _ptImages[1].getY() * _ptImages[2].getX()
- * _ptReels[0].getX()) / diviseur);
+ * _ptReels[2].getX() + _ptImages[1].getY() * _ptImages[0].getX() * _ptReels[2].getX() + _ptImages[2].getY() * _ptImages[1].getX()
+ * _ptReels[0].getX() - _ptImages[2].getY() * _ptImages[0].getX() * _ptReels[1].getX() - _ptImages[1].getY() * _ptImages[2].getX()
+ * _ptReels[0].getX()) / diviseur);
proj[3] = (float) (-1 / diviseur * (_ptImages[1].getY() * _ptReels[2].getY() - _ptImages[0].getY() * _ptReels[2].getY() - _ptImages[2].getY()
- * _ptReels[1].getY() - _ptImages[1].getY() * _ptReels[0].getY() + _ptImages[0].getY() * _ptReels[1].getY() + _ptImages[2].getY()
- * _ptReels[0].getY()));
+ * _ptReels[1].getY() - _ptImages[1].getY() * _ptReels[0].getY() + _ptImages[0].getY() * _ptReels[1].getY() + _ptImages[2].getY()
+ * _ptReels[0].getY()));
proj[4] = (float) ((_ptImages[1].getX() * _ptReels[2].getY() - _ptImages[1].getX() * _ptReels[0].getY() + _ptImages[0].getX()
- * _ptReels[1].getY() - _ptImages[0].getX() * _ptReels[2].getY() + _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[2].getX()
- * _ptReels[1].getY()) / diviseur);
+ * _ptReels[1].getY() - _ptImages[0].getX() * _ptReels[2].getY() + _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[2].getX()
+ * _ptReels[1].getY()) / diviseur);
proj[5] = (float) (-(_ptImages[2].getY() * _ptImages[0].getX() * _ptReels[1].getY() - _ptImages[2].getY() * _ptImages[1].getX()
- * _ptReels[0].getY() + _ptImages[1].getY() * _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[1].getY() * _ptImages[0].getX()
- * _ptReels[2].getY() + _ptImages[1].getX() * _ptImages[0].getY() * _ptReels[2].getY() - _ptImages[2].getX() * _ptImages[0].getY()
- * _ptReels[1].getY()) / diviseur);
+ * _ptReels[0].getY() + _ptImages[1].getY() * _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[1].getY() * _ptImages[0].getX()
+ * _ptReels[2].getY() + _ptImages[1].getX() * _ptImages[0].getY() * _ptReels[2].getY() - _ptImages[2].getX() * _ptImages[0].getY()
+ * _ptReels[1].getY()) / diviseur);
} catch (final Exception e) {
// MsgInfo erW = new MsgInfo(parent, MsgInfo.ERROR,"Verifiez que les points ne sont pas alignes !");
@@ -275,5 +311,4 @@
}
return new AffineTransform(proj[0], proj[3], proj[1], proj[4], proj[2], proj[5]);
}
-
-}
\ No newline at end of file
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <de...@us...> - 2012-07-10 14:09:43
|
Revision: 7473
http://fudaa.svn.sourceforge.net/fudaa/?rev=7473&view=rev
Author: deniger
Date: 2012-07-10 14:09:31 +0000 (Tue, 10 Jul 2012)
Log Message:
-----------
$
Modified Paths:
--------------
trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java
Modified: trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java
===================================================================
--- trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java 2012-07-10 08:27:41 UTC (rev 7472)
+++ trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java 2012-07-10 14:09:31 UTC (rev 7473)
@@ -55,7 +55,7 @@
* @return Renvoie la distance entre le point p1(_x1,_y1,_z1) et le point p2(_x2,_y2,_z2)
*/
public static double getDistance3D(final double _x1, final double _y1, final double _z1, final double _x2, final double _y2,
- final double _z2) {
+ final double _z2) {
return Math.sqrt((_x2 - _x1) * (_x2 - _x1) + (_y2 - _y1) * (_y2 - _y1) + (_z2 - _z1) * (_z2 - _z1));
}
@@ -92,8 +92,8 @@
* @return Renvoie la distance entre le point p(_x,_y) et le segment [P1,P2] P1=_segX1,_segY1. Tester dans ebli
*/
public static double distanceFromSegment(final double _segX1, final double _segY1, final double _segX2, final double _segY2,
- final double _x,
- final double _y) {
+ final double _x,
+ final double _y) {
if ((_segX1 == _segX2) && (_segY1 == _segY2)) {
return getDistance(_segX1, _segY1, _x, _y);
}
@@ -163,7 +163,7 @@
* @return l'aire du triangle P1P2P3
*/
public static double aireTriangle(final double _x1, final double _y1, final double _x2, final double _y2, final double _x3,
- final double _y3) {
+ final double _y3) {
// ERROR aie
double p = (_x3 - _x1) * (_x2 - _x1) + (_y3 - _y1) * (_y2 - _y1);
final double d1d2 = getDistance(_x1, _y1, _x2, _y2);
@@ -191,6 +191,7 @@
/**
* une projection simple sans rotation ni d\xE9formation de l'image.
+ *
* @param _ptImages
* @param _ptReels
* @return
@@ -217,11 +218,14 @@
Point2D[] newPtReel = new Point2D[3];
newPtImage[0] = _ptImages[0];
newPtImage[1] = _ptImages[1];
- newPtImage[2] = new Point2D.Double(_ptImages[0].getX(), _ptImages[1].getY());
+ newPtImage[2] = new Point2D.Double(_ptImages[0].getX() + _ptImages[0].getY() - _ptImages[1].getY(),
+ _ptImages[0].getY() + _ptImages[1].getX() - _ptImages[0].getX());
newPtReel[0] = _ptReels[0];
newPtReel[1] = _ptReels[1];
- newPtReel[2] = new Point2D.Double(_ptReels[0].getX(), _ptReels[1].getY());
+ newPtReel[2] = new Point2D.Double(
+ _ptReels[0].getX() + _ptReels[0].getY() - _ptReels[1].getY(),
+ _ptReels[0].getY() + _ptReels[1].getX() - _ptReels[0].getX());
return projection(newPtImage, newPtReel);
}
@@ -242,37 +246,37 @@
try {
// modif Gilbert : la division par 0 ne leve plus d'exception !!!
final double diviseur = -_ptImages[2].getY() * _ptImages[0].getX() + _ptImages[2].getY() * _ptImages[1].getX() - _ptImages[0].getY()
- * _ptImages[1].getX() + _ptImages[1].getY() * _ptImages[0].getX() + _ptImages[0].getY() * _ptImages[2].getX() - _ptImages[1].getY()
- * _ptImages[2].getX();
+ * _ptImages[1].getX() + _ptImages[1].getY() * _ptImages[0].getX() + _ptImages[0].getY() * _ptImages[2].getX() - _ptImages[1].getY()
+ * _ptImages[2].getX();
if (Math.abs(diviseur) < 0.0001) {
throw new Exception("div0");
}
proj[0] = (float) ((-_ptImages[1].getY() * _ptReels[2].getX() - _ptImages[0].getY() * _ptReels[1].getX() + _ptImages[2].getY()
- * _ptReels[1].getX() + _ptImages[1].getY() * _ptReels[0].getX() + _ptImages[0].getY() * _ptReels[2].getX() - _ptImages[2].getY()
- * _ptReels[0].getX()) / diviseur);
+ * _ptReels[1].getX() + _ptImages[1].getY() * _ptReels[0].getX() + _ptImages[0].getY() * _ptReels[2].getX() - _ptImages[2].getY()
+ * _ptReels[0].getX()) / diviseur);
proj[1] = (float) (-(-_ptImages[1].getX() * _ptReels[2].getX() + _ptImages[2].getX() * _ptReels[1].getX() + _ptImages[1].getX()
- * _ptReels[0].getX() - _ptImages[0].getX() * _ptReels[1].getX() + _ptImages[0].getX() * _ptReels[2].getX() - _ptImages[2].getX()
- * _ptReels[0].getX()) / diviseur);
+ * _ptReels[0].getX() - _ptImages[0].getX() * _ptReels[1].getX() + _ptImages[0].getX() * _ptReels[2].getX() - _ptImages[2].getX()
+ * _ptReels[0].getX()) / diviseur);
proj[2] = (float) ((_ptImages[2].getX() * _ptImages[0].getY() * _ptReels[1].getX() - _ptImages[1].getX() * _ptImages[0].getY()
- * _ptReels[2].getX() + _ptImages[1].getY() * _ptImages[0].getX() * _ptReels[2].getX() + _ptImages[2].getY() * _ptImages[1].getX()
- * _ptReels[0].getX() - _ptImages[2].getY() * _ptImages[0].getX() * _ptReels[1].getX() - _ptImages[1].getY() * _ptImages[2].getX()
- * _ptReels[0].getX()) / diviseur);
+ * _ptReels[2].getX() + _ptImages[1].getY() * _ptImages[0].getX() * _ptReels[2].getX() + _ptImages[2].getY() * _ptImages[1].getX()
+ * _ptReels[0].getX() - _ptImages[2].getY() * _ptImages[0].getX() * _ptReels[1].getX() - _ptImages[1].getY() * _ptImages[2].getX()
+ * _ptReels[0].getX()) / diviseur);
proj[3] = (float) (-1 / diviseur * (_ptImages[1].getY() * _ptReels[2].getY() - _ptImages[0].getY() * _ptReels[2].getY() - _ptImages[2].getY()
- * _ptReels[1].getY() - _ptImages[1].getY() * _ptReels[0].getY() + _ptImages[0].getY() * _ptReels[1].getY() + _ptImages[2].getY()
- * _ptReels[0].getY()));
+ * _ptReels[1].getY() - _ptImages[1].getY() * _ptReels[0].getY() + _ptImages[0].getY() * _ptReels[1].getY() + _ptImages[2].getY()
+ * _ptReels[0].getY()));
proj[4] = (float) ((_ptImages[1].getX() * _ptReels[2].getY() - _ptImages[1].getX() * _ptReels[0].getY() + _ptImages[0].getX()
- * _ptReels[1].getY() - _ptImages[0].getX() * _ptReels[2].getY() + _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[2].getX()
- * _ptReels[1].getY()) / diviseur);
+ * _ptReels[1].getY() - _ptImages[0].getX() * _ptReels[2].getY() + _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[2].getX()
+ * _ptReels[1].getY()) / diviseur);
proj[5] = (float) (-(_ptImages[2].getY() * _ptImages[0].getX() * _ptReels[1].getY() - _ptImages[2].getY() * _ptImages[1].getX()
- * _ptReels[0].getY() + _ptImages[1].getY() * _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[1].getY() * _ptImages[0].getX()
- * _ptReels[2].getY() + _ptImages[1].getX() * _ptImages[0].getY() * _ptReels[2].getY() - _ptImages[2].getX() * _ptImages[0].getY()
- * _ptReels[1].getY()) / diviseur);
+ * _ptReels[0].getY() + _ptImages[1].getY() * _ptImages[2].getX() * _ptReels[0].getY() - _ptImages[1].getY() * _ptImages[0].getX()
+ * _ptReels[2].getY() + _ptImages[1].getX() * _ptImages[0].getY() * _ptReels[2].getY() - _ptImages[2].getX() * _ptImages[0].getY()
+ * _ptReels[1].getY()) / diviseur);
} catch (final Exception e) {
// MsgInfo erW = new MsgInfo(parent, MsgInfo.ERROR,"Verifiez que les points ne sont pas alignes !");
@@ -298,8 +302,8 @@
proj = LocalSolve.leastsquare(a, b, 2 * n, nc);
/*
- * System.out.println(ResourceManager.get("projMatrix")+"\n"+proj[0]+" "+proj[1]+" "+proj[2]+" ");
- * System.out.println(proj[3]+" "+proj[4]+" "+proj[5]+" ");
+ * System.out.println(ResourceManager.get("projMatrix")+"\n"+proj[0]+" "+proj[1]+" "+proj[2]+" "); System.out.println(proj[3]+" "+proj[4]+"
+ * "+proj[5]+" ");
*/
} catch (final Exception e) {
FuLog.error(e);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <de...@us...> - 2013-01-18 14:48:45
|
Revision: 8219
http://fudaa.svn.sourceforge.net/fudaa/?rev=8219&view=rev
Author: deniger
Date: 2013-01-18 14:48:38 +0000 (Fri, 18 Jan 2013)
Log Message:
-----------
optimisation maillage important
Modified Paths:
--------------
trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java
Modified: trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java
===================================================================
--- trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java 2013-01-18 14:43:37 UTC (rev 8218)
+++ trunk/framework/ctulu-gis/src/main/java/org/fudaa/ctulu/gis/CtuluLibGeometrie.java 2013-01-18 14:48:38 UTC (rev 8219)
@@ -192,7 +192,7 @@
/**
* une projection simple sans rotation ni d\xE9formation de l'image.
- *
+ * Attention pour l'axe des y des images, l'axe est invers\xE9
* @param _ptImages
* @param _ptReels
* @return
@@ -204,7 +204,6 @@
}
Point2D ptImage1 = _ptImages[0];
Point2D ptReel1 = _ptReels[0];
- double dx = ptReel1.getX() - ptImage1.getX();
double dy = ptReel1.getY() - ptImage1.getY();
double distReel = _ptReels[0].distance(_ptReels[1]);
@@ -219,7 +218,8 @@
Point2D[] newPtReel = new Point2D[3];
newPtImage[0] = _ptImages[0];
newPtImage[1] = _ptImages[1];
- newPtImage[2] = new Point2D.Double(_ptImages[0].getX() + _ptImages[0].getY() - _ptImages[1].getY(),
+ //y inverse
+ newPtImage[2] = new Point2D.Double(_ptImages[0].getX() - _ptImages[0].getY() + _ptImages[1].getY(),
_ptImages[0].getY() + _ptImages[1].getX() - _ptImages[0].getX());
newPtReel[0] = _ptReels[0];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|