|
From: <de...@us...> - 2013-02-20 21:28:07
|
Revision: 8286
http://fudaa.svn.sourceforge.net/fudaa/?rev=8286&view=rev
Author: deniger
Date: 2013-02-20 21:28:00 +0000 (Wed, 20 Feb 2013)
Log Message:
-----------
support VariableFC
Modified Paths:
--------------
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfBilanHelper.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfDataIntegrale.java
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfBilanHelper.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfBilanHelper.java 2013-02-20 14:37:52 UTC (rev 8285)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfBilanHelper.java 2013-02-20 21:28:00 UTC (rev 8286)
@@ -3,6 +3,7 @@
*/
package org.fudaa.dodico.ef.cubature;
+import org.fudaa.ctulu.math.BilanHelper;
import org.fudaa.dodico.ef.EfData;
import org.fudaa.dodico.ef.operation.EfLineIntersection;
import org.fudaa.dodico.ef.operation.EfLineIntersectionsResultsI;
@@ -11,85 +12,9 @@
/**
* @author deniger
*/
-public class EfBilanHelper {
+public class EfBilanHelper extends BilanHelper {
/**
- * Integration des donnees par la methode des trapezes entre la courbe representee par les x1 et y1 et la droite d\xE9finie par la fonction affine de
- * coeff a et d'ordonn\xE9\xE9e a l origine b y1=a*x1+b
- *
- * @param lx
- * @param ly
- * @return
- */
- public static EfDataIntegrale integrerMethodeTrapeze(double[] lx, double[] ly, double a, double b) {
-
- EfDataIntegrale data = new EfDataIntegrale();
-
- for (int i = 0; i < Math.min(lx.length, ly.length) - 1; i++) {
- double x = lx[i];
- double x2 = lx[i + 1];
- double y = ly[i];
- double y2 = ly[i + 1];
-
- double ySeuil1 = a * x + b;
- double ySeuil2 = a * x2 + b;
- if (y > ySeuil1 && y2 > ySeuil2) {
- // courbe au dessus de la ligne
- data.addZonePlus(calculAireTrapeze(x, y, x2, y2, ySeuil1, ySeuil2));
-
- } else if (y < ySeuil1 && y2 < ySeuil2) {
- // courbe en dessous de la ligne
- data.addZoneMoins(calculAireTrapeze(x, y, x2, y2, ySeuil1, ySeuil2));
-
- } else {
- // cas particulier : intersection, on calcule l'intersection entre les
- // points
- // cas particulier : intersection, on calcule l'intersection entre les
- // points
- double yIntersect = 0;
- double xIntersect = 0;
- // on prend la droite form\xE9e par les 2 points et on calcule son
- // intersection avec la droite affine
- if (x2 - x != 0) {
- // droite non parrallele a l axe des abscisses
- double coefDirecteur = (y2 - y) / (x2 - x);
- double ordoOrigine = y2 - coefDirecteur * x2;
-
- // intersection de droites avec le seuil
-
- if (coefDirecteur - a != 0) {
- // droie non paralleles
- xIntersect = (ordoOrigine - b) / (coefDirecteur - a);
- yIntersect = coefDirecteur * xIntersect + ordoOrigine;
- } else {
- // droite parrallele confondue au seuil, on ne fais rien...
- }
-
- } else {
- // x2=x1 droite d equation x1=Cste
-
- xIntersect = x;
- yIntersect = a * x + b;
- }
-
- // maintenant que l on a le point d'intersection, on test si on ajoute en positif ou negatif
- if (y >= ySeuil1 && y2 <= ySeuil2) {
- data.addZonePlus(calculAireTrapeze(x, y, xIntersect, yIntersect, ySeuil1, ySeuil2));
- data.addZoneMoins(calculAireTrapeze(xIntersect, yIntersect, x2, y2, ySeuil1, ySeuil2));
-
- } else {
- data.addZoneMoins(calculAireTrapeze(x, y, xIntersect, yIntersect, ySeuil1, ySeuil2));
- data.addZonePlus(calculAireTrapeze(xIntersect, yIntersect, x2, y2, ySeuil1, ySeuil2));
- }
-
- }
-
- }
-
- return data;
- }
-
- /**
* Calcule l'aire du trapeze en utilisant un objet EfLineIntersectionsResultsI. EfLineIntersectionsResultsI fonctionne de la maniere suivante:
* getNbIntersect():donne le nombre de points getDistFromDeb(i) donne le Xi: distance entre le debut et le point getIntersect(i)
* getValueBadInterpolation(EfData _d) donne le y1 associ\xE9 au x1
@@ -114,20 +39,6 @@
return data;
}
- /**
- * calcul de l'aire du trapeze form\xE9 par les 4 points (x1,y1) (x2,y2) (x1,y3) (x2,y4)
- */
- public static double calculAireTrapeze(double x, double y, double x2, double y2, double y3, double y4) {
- // 1: calcul de la hauteur
- double h = Math.abs(x2 - x);
- // 2 base 1: coordonnees cartesiennes entre le point x1,y1 et x1,y3
- double base1 = Math.abs(y3 - y);
- // 3 base 2: coordonnees cartesiennes entre le point x2,y2 et x2,y4
- double base2 = Math.abs(y4 - y2);
- // 4 calcul de l'aire
- return h * (base1 + base2) / 2;
- }
-
public static EfDataIntegrale integrerMethodeTrapezeVector(EfLineIntersectionsResultsI interfaceRes, EfData vxData, EfData vyData, double seuil) {
EfDataIntegrale data = new EfDataIntegrale();
EfVectorComputation vectorComputation = new EfVectorComputation();
@@ -195,53 +106,4 @@
return data;
}
-
- private static void computeBilan(double x1, double x2, double y1, double y2, double seuil, EfDataIntegrale targetData) {
- if (y1 >= seuil && y2 >= seuil) {
- // courbe au dessus de la ligne
- targetData.addZonePlus(calculAireTrapeze(x1, y1, x2, y2, seuil, seuil));
- } else if (y1 <= seuil && y2 <= seuil) {
- // courbe en dessous de la ligne
- targetData.addZoneMoins(calculAireTrapeze(x1, y1, x2, y2, seuil, seuil));
- } else {
- // cas particulier : intersection, on calcule l'intersection entre les
- // points
- final double yIntersect = seuil;
- double xIntersect = 0;
- // on prend la droite form\xE9e par les 2 points et on calcule son
- // intersection avec la droite affine
- if (x2 - x1 != 0) {
- // droite non parrallele a l axe des ordonn\xE9e !
- double coefDirecteur = (y2 - y1) / (x2 - x1);
- double ordoOrigine = y2 - coefDirecteur * x2;
-
- // intersection de droites avec le seuil
- // yIntersect = seuil;
-
- if (coefDirecteur != 0) // droie non parallele au seuil
- {
- xIntersect = (yIntersect - ordoOrigine) / coefDirecteur;
- } else {
- // droite parrallele confondue au seuil, on ne fais rien...
- }
-
- } else {
- // x2=x1 droite perpendiculaire au seuil, le point d'intersection est
- // donc (x1,seuil)
- xIntersect = x1;
- // yIntersect = seuil;
- }
-
- // maintenant que l on a le point d'intersection, on test si on ajoute en positif ou negatif
- if (y1 >= seuil && y2 <= seuil) {
- targetData.addZonePlus(calculAireTrapeze(x1, y1, xIntersect, yIntersect, seuil, seuil));
- targetData.addZoneMoins(calculAireTrapeze(xIntersect, yIntersect, x2, y2, seuil, seuil));
-
- } else {
- targetData.addZoneMoins(calculAireTrapeze(x1, y1, xIntersect, yIntersect, seuil, seuil));
- targetData.addZonePlus(calculAireTrapeze(xIntersect, yIntersect, x2, y2, seuil, seuil));
- }
-
- }
- }
}
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfDataIntegrale.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfDataIntegrale.java 2013-02-20 14:37:52 UTC (rev 8285)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfDataIntegrale.java 2013-02-20 21:28:00 UTC (rev 8286)
@@ -1,47 +1,11 @@
package org.fudaa.dodico.ef.cubature;
+import org.fudaa.ctulu.math.DataIntegrale;
+
/**
* Classe qui gere les bilans ainsi que les cubatures.
*
* @author Adrien Hadoux
*/
-public class EfDataIntegrale {
-
- /**
- * Valeur pour la zone plus
- */
- private double zonePlus_ = 0;
- /**
- * Valeur int\xE9grale pour la zone moins
- */
- private double zoneMoins_ = 0;
-
- public double getZonePlus() {
- return zonePlus_;
- }
-
- public double getZoneMoins() {
- return zoneMoins_;
- }
-
- public void addZonePlus(double _d) {
- zonePlus_ = zonePlus_ + Math.abs(_d);
-
- }
-
- public void addZoneMoins(double _d) {
- zoneMoins_ = zoneMoins_ + Math.abs(_d);
- }
-
- public void add(double _d) {
- if (Math.signum(_d) > 0) {
- addZonePlus(_d);
- } else {
- addZoneMoins(_d);
- }
- }
-
- public double getResultat() {
- return zonePlus_ - zoneMoins_;
- }
+public class EfDataIntegrale extends DataIntegrale {
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|