123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- namespace SimulationCommon;
- public class tempNCread
- {
- public float[] longitudeArray = new float[10];
- public float[] latitudeArray = new float[7];
- public float[][][] tempArray ;
- }
- public class SurvivalTimeModel
- {
-
- public static double SurvivalTime(tempNCread tempNCread, double latitude, double longitude, double time)
-
- {
- int latitudeNum = 0;
- int longitudeNum = 0;
- int timeNum = 0;
- float[] longitudeArray = tempNCread.longitudeArray;
- float[] latitudeArray = tempNCread.latitudeArray;
- float[][][] tempArray = tempNCread.tempArray;
-
-
- for (int i = 0; i < 9; i++)
- {
- if (longitude >= longitudeArray[i] && longitude < longitudeArray[i + 1])
- {
- longitude = longitudeArray[i];
- longitudeNum = i;
- }
- }
-
- for (int i = 0; i < 6; i++)
- {
- if (latitude >= latitudeArray[i] && latitude < latitudeArray[i + 1])
- {
- latitude = latitudeArray[i];
- latitudeNum = i;
- }
- }
-
- for (int i = 0; i < 23; i++)
- {
- if (time >= (i * 3600) && time < ((i + 1) * 3600))
- {
- timeNum = i;
- }
- }
- double temp = (double)tempArray[timeNum][ latitudeNum][ longitudeNum];
- double time1 = 1.2860 * Math.Exp(0.1604 * temp);
- double time2 = 1.0201 * Math.Exp(0.1277 * temp);
- double time3 = 0.5892 * Math.Exp(0.1246 * temp);
-
- Random rand = new Random();
- double mu = (time1 + time3) / 2;
- double sigma = (time3 - time1) / 6;
- double survivalTime = NormalDistributionRandom(rand, mu, sigma);
- return survivalTime;
- }
-
- public static double NormalDistributionRandom(Random rand, double mu, double sigma)
- {
- double u1 = 1.0 - rand.NextDouble();
- double u2 = 1.0 - rand.NextDouble();
- double normalRandom = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2);
- return mu + sigma * normalRandom;
- }
- }
|