|
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.
|