1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| public class Grav
{
static public double[] CalculAnomalie(double x, double y, double z, double g, double h, double [] X, double centre, double [] Y, int TailleMaille, double[,] maille, double[,] R, double[,] DG, double[] anomalie)
{
double x1 = X[(int)centre] - x / 2;
//Console.WriteLine(x1);
double y1 = Y[(int)centre] + y / 2;
double z1 = z + 0.0000001;
double Dg = g;
double x2 = X[(int)centre] + x / 2;
double y2 = Y[(int)centre] - y / 2;
double z2 = z1 + h;
//calcul des dx, dy, dz
for (int i = 0; i < TailleMaille; i++)
{
//Console.WriteLine(maille.GetLength(1));
maille[i, 4] = x1 - maille[i, 0]; //dx1
maille[i, 5] = x2 - maille[i, 0]; //dx2
maille[i, 6] = y1 - maille[i, 1]; //dy1
maille[i, 7] = y2 - maille[i, 1]; //dy2
maille[i, 8] = z2 - maille[i, 2]; //dz1
maille[i, 9] = z1 - maille[i, 2]; //dz2
}
//calcul de la distance du point a tous les bords du prisme
for (int i = 0; i < TailleMaille; i++)
{
R[i, 0] = Math.Sqrt(Math.Pow(maille[i, 4], 2) + Math.Pow(maille[i, 6], 2) + Math.Pow(maille[i, 8], 2));
R[i, 1] = Math.Sqrt(Math.Pow(maille[i, 4], 2) + Math.Pow(maille[i, 6], 2) + Math.Pow(maille[i, 9], 2));
R[i, 2] = Math.Sqrt(Math.Pow(maille[i, 5], 2) + Math.Pow(maille[i, 6], 2) + Math.Pow(maille[i, 8], 2));
R[i, 3] = Math.Sqrt(Math.Pow(maille[i, 5], 2) + Math.Pow(maille[i, 6], 2) + Math.Pow(maille[i, 9], 2));
R[i, 4] = Math.Sqrt(Math.Pow(maille[i, 5], 2) + Math.Pow(maille[i, 7], 2) + Math.Pow(maille[i, 8], 2));
R[i, 5] = Math.Sqrt(Math.Pow(maille[i, 5], 2) + Math.Pow(maille[i, 7], 2) + Math.Pow(maille[i, 9], 2));
R[i, 6] = Math.Sqrt(Math.Pow(maille[i, 4], 2) + Math.Pow(maille[i, 7], 2) + Math.Pow(maille[i, 8], 2));
R[i, 7] = Math.Sqrt(Math.Pow(maille[i, 4], 2) + Math.Pow(maille[i, 7], 2) + Math.Pow(maille[i, 9], 2));
}
//Calcul des anomalies liees aux differents bords
for (int i = 0; i < TailleMaille; i++)
{
DG[i, 0] = -0.00667 * Dg * 1000 * (maille[i, 8] * Math.Atan(maille[i, 4] * maille[i, 6] / (maille[i, 8] * R[i, 0])) - maille[i, 4] * Math.Log(R[i, 0] + maille[i, 6]) - maille[i, 6] * Math.Log(R[i, 0] + maille[i, 4]));
DG[i, 1] = 0.00667 * Dg * 1000 * (maille[i, 9] * Math.Atan(maille[i, 4] * maille[i, 6] / (maille[i, 9] * R[i, 1])) - maille[i, 4] * Math.Log(R[i, 1] + maille[i, 6]) - maille[i, 6] * Math.Log(R[i, 1] + maille[i, 4]));
DG[i, 2] = 0.00667 * Dg * 1000 * (maille[i, 8] * Math.Atan(maille[i, 5] * maille[i, 6] / (maille[i, 8] * R[i, 2])) - maille[i, 5] * Math.Log(R[i, 2] + maille[i, 6]) - maille[i, 6] * Math.Log(R[i, 2] + maille[i, 5]));
DG[i, 3] = -0.00667 * Dg * 1000 * (maille[i, 9] * Math.Atan(maille[i, 5] * maille[i, 6] / (maille[i, 9] * R[i, 3])) - maille[i, 5] * Math.Log(R[i, 3] + maille[i, 6]) - maille[i, 6] * Math.Log(R[i, 3] + maille[i, 5]));
DG[i, 4] = -0.00667 * Dg * 1000 * (maille[i, 8] * Math.Atan(maille[i, 5] * maille[i, 7] / (maille[i, 8] * R[i, 4])) - maille[i, 5] * Math.Log(R[i, 4] + maille[i, 7]) - maille[i, 7] * Math.Log(R[i, 4] + maille[i, 5]));
DG[i, 5] = 0.00667 * Dg * 1000 * (maille[i, 9] * Math.Atan(maille[i, 5] * maille[i, 7] / (maille[i, 9] * R[i, 5])) - maille[i, 5] * Math.Log(R[i, 5] + maille[i, 7]) - maille[i, 7] * Math.Log(R[i, 5] + maille[i, 5]));
DG[i, 6] = 0.00667 * Dg * 1000 * (maille[i, 8] * Math.Atan(maille[i, 4] * maille[i, 7] / (maille[i, 8] * R[i, 6])) - maille[i, 4] * Math.Log(R[i, 6] + maille[i, 7]) - maille[i, 7] * Math.Log(R[i, 6] + maille[i, 4]));
DG[i, 7] = -0.00667 * Dg * 1000 * (maille[i, 9] * Math.Atan(maille[i, 4] * maille[i, 7] / (maille[i, 9] * R[i, 7])) - maille[i, 4] * Math.Log(R[i, 7] + maille[i, 7]) - maille[i, 7] * Math.Log(R[i, 7] + maille[i, 4]));
}
//somme des DG
for (int i = 0; i < TailleMaille; i++)
{
anomalie[i] = DG[i, 0] + DG[i, 1] + DG[i, 2] + DG[i, 3] + DG[i, 4] + DG[i, 5] + DG[i, 6] + DG[i, 7];
}
return anomalie;
}
} |
Partager