static void DrawImageTest(int n) { Random rand = new Random(); double[] X = new double[n], Y = new double[n], T = new double[n]; for (int i = 0; i < n; i++) { X[i] = rand.NextDouble() * 180; Y[i] = rand.NextDouble() * 90; T[i] = rand.Next(300); } IDWC idwc = new IDWC(X, Y, T); idwc.CalculateD(); int width = 720, height = 360; double lon, lat; double t; Bitmap bitmap; Color[] colors = new Color[] { Color.FromArgb(0, 228, 0), Color.FromArgb(255, 255, 0), Color.FromArgb(255, 126, 0), Color.FromArgb(255, 0, 0), Color.FromArgb(153, 0, 76), Color.FromArgb(126, 0, 35) }; Stopwatch sw = new Stopwatch(); sw.Start(); for (int a = 0; a < 3; a++) { sw.Restart(); bitmap = new Bitmap(width, height); for (int i = 0; i < width; i++) { lon = i * 0.25; for (int j = 0; j < height; j++) { lat = j * 0.25; t = Math.Round(idwc.Predict(lon, lat)); bitmap.SetPixel(i, j, colors[GetIndex(t)]); //int v = (int)t; //bitmap.SetPixel(i, j, Color.FromArgb(v / 256 / 256, v / 256 % 256, v % 256)); } } bitmap.Save(DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png"); bitmap.Dispose(); sw.Stop(); System.Console.WriteLine(sw.Elapsed); sw.Restart(); bitmap = new Bitmap(width, height); for (int i = 0; i < width; i++) { lon = i * 0.25; for (int j = 0; j < height; j++) { lat = j * 0.25; t = Math.Round(idwc.PredictFixedSearchRadius(lon, lat)); bitmap.SetPixel(i, j, colors[GetIndex(t)]); //int v = (int)t; //bitmap.SetPixel(i, j, Color.FromArgb(v / 256 / 256, v / 256 % 256, v % 256)); } } bitmap.Save(DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png"); bitmap.Dispose(); sw.Stop(); System.Console.WriteLine(sw.Elapsed); } System.Console.ReadLine(); }
/// <summary> /// 直接调用VS委托调用(影响不大) /// </summary> static void DirectlyVSFunction() { Random rand = new Random(); int n = 500; double[] X = new double[n], Y = new double[n], T = new double[n]; for (int i = 0; i < n; i++) { X[i] = rand.NextDouble() * 180; Y[i] = rand.NextDouble() * 90; T[i] = rand.Next(300); } IDWC idwc = new IDWC(X, Y, T); double t; Func <double, double, double> func = idwc.Predict; Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 720; i++) { double x = rand.NextDouble() * 180; for (int j = 0; j < 360; j++) { double y = rand.NextDouble() * 90; t = idwc.Predict(x, y); } } sw.Stop(); System.Console.WriteLine(sw.Elapsed); sw.Restart(); for (int i = 0; i < 720; i++) { double x = rand.NextDouble() * 180; for (int j = 0; j < 360; j++) { double y = rand.NextDouble() * 90; t = func(x, y); } } sw.Stop(); System.Console.WriteLine(sw.Elapsed); sw.Restart(); for (int i = 0; i < 720; i++) { double x = rand.NextDouble() * 180; for (int j = 0; j < 360; j++) { double y = rand.NextDouble() * 90; t = idwc.Predict(x, y); } } sw.Stop(); System.Console.WriteLine(sw.Elapsed); sw.Restart(); for (int i = 0; i < 720; i++) { double x = rand.NextDouble() * 180; for (int j = 0; j < 360; j++) { double y = rand.NextDouble() * 90; t = func(x, y); } } sw.Stop(); System.Console.WriteLine(sw.Elapsed); sw.Restart(); for (int i = 0; i < 720; i++) { double x = rand.NextDouble() * 180; for (int j = 0; j < 360; j++) { double y = rand.NextDouble() * 90; t = idwc.Predict(x, y); } } sw.Stop(); System.Console.WriteLine(sw.Elapsed); sw.Restart(); for (int i = 0; i < 720; i++) { double x = rand.NextDouble() * 180; for (int j = 0; j < 360; j++) { double y = rand.NextDouble() * 90; t = func(x, y); } } sw.Stop(); System.Console.WriteLine(sw.Elapsed); System.Console.ReadLine(); }