private IDataSeries3D FillSeries(int index, int width, int height) { double angle = Math.PI*2*index/30; int w = width, h = height; var dataSeries = new UniformGridDataSeries3D<double>(w, h) { StepX = 0.01, StepZ = 0.01, }; for (int x = 0; x < 200; x++) { for (int y = 0; y < 200; y++) { var v = (1 + Math.Sin(x*0.04 + angle))*50 + (1 + Math.Sin(y*0.1 + angle))*50*(1 + Math.Sin(angle*2)); var cx = w/2; var cy = h/2; var r = Math.Sqrt((x - cx)*(x - cx) + (y - cy)*(y - cy)); var exp = Math.Max(0, 1 - r*0.008); var zValue = v*exp; dataSeries[y, x] = zValue; } } return dataSeries; }
public CreateAUniformMesh3DChart() { InitializeComponent(); int xSize = 25; int zSize = 25; var meshDataSeries = new UniformGridDataSeries3D <double>(xSize, zSize) { StepX = 1, StepZ = 1, SeriesName = "Uniform Surface Mesh", }; for (int x = 0; x < xSize; x++) { for (int z = 0; z < zSize; z++) { double xVal = ( double )x / ( double )xSize * 25.0; double zVal = ( double )z / ( double )zSize * 25.0; double y = Math.Sin(xVal * 0.2) / ((zVal + 1) * 2); meshDataSeries[z, x] = y; } } surfaceMeshRenderableSeries.DataSeries = meshDataSeries; }
public AddObjectsToA3DChart() { InitializeComponent(); var dataSeries = new UniformGridDataSeries3D <double>(9, 9) { StartX = 1, StepX = 1, StartZ = 100, StepZ = 1 }; for (int x = 0; x < 9; x++) { for (int z = 0; z < 9; z++) { if (z % 2 == 0) { dataSeries[z, x] = (x % 2 == 0 ? 1 : 4); } else { dataSeries[z, x] = (x % 2 == 0 ? 4 : 1); } } } surfaceMeshRenderableSeries.DataSeries = dataSeries; }
private void CreateDataSetAndSeries() { _series0 = new XyDataSeries <double, double>(); _series1 = new UniformGridDataSeries3D <double>(100, 100) { StartX = 0, StepX = 0.1, StartZ = 0 }; _series2 = new UniformGridDataSeries3D <double>(100, 100) { StartX = 0, StepX = 0.1, StartZ = 0 }; _series0.FifoCapacity = FifoSize; for (int a = 0; a < FifoSize; a++) { OnNewData(this, null); } RenderableSeries0.DataSeries = _series0; surfaceMesh.Maximum = 22; surfaceMesh.Minimum = 0; surfaceMesh.DataSeries = _series1; RenderableSeries1.DataSeries = _series0; surfaceMesh1.Maximum = 22; surfaceMesh1.Minimum = 0; surfaceMesh1.DataSeries = _series2; }
public HitTestGetPoint3D() { InitializeComponent(); int xSize = 25; int zSize = 25; var meshDataSeries = new UniformGridDataSeries3D <double>(xSize, zSize) { StepX = 1, StepZ = 1, SeriesName = "Uniform Surface Mesh", }; for (int x = 0; x < xSize; x++) { for (int z = 0; z < zSize; z++) { double xVal = x / (double)xSize * 25.0; double zVal = z / (double)zSize * 25.0; double y = Math.Sin(xVal * 0.2) / ((zVal + 1) * 2); meshDataSeries[z, x] = y; } } renderSeries.DataSeries = meshDataSeries; }
public void initgraph() { dataSeries = new UniformGridDataSeries3D <int>(dataNumber, dataNumber) { StartX = 0, StartZ = 0, StepX = 1, //0 / (w - 1d), StepZ = 1, //0 / (h - 1d), SeriesName = "Realtime Surface Mesh", }; actualData = dataSeries.InternalArray; }
public void Init(int row, int col) { xSize = row; zSize = col; yMax = float.MinValue; if (positionInfo == null) { positionInfo = new List <PositionInfo>(); } else { positionInfo.Clear(); } if (drawInfo == null) { drawInfo = new List <DrawGeometry>(); } else { drawInfo.Clear(); } if (MeshDataSeries == null) { MeshDataSeries = new UniformGridDataSeries3D <double, double, double>(xSize, zSize); } else { MeshDataSeries.Clear(); } if (marker == null) { marker = new XyzDataSeries3D <double>(); marker.DataSeriesChanged += OnScatterSelected; } else { marker.Clear(); } movePoint = false; annotIdx = -1; // 0 base selectedIdx = -1; }
public UniformGridDataSeries3D <double> GetSurfaceMeshDataSeries() { var meshDataSeries = new UniformGridDataSeries3D <double>(25, 25) { StepX = 1, StepZ = 1, SeriesName = "Uniform Surface Mesh" }; for (int x = 0; x < 25; x++) { for (int z = 0; z < 25; z++) { double y = Math.Sin(x * 0.2) / ((z + 1) * 2); meshDataSeries[z, x] = y; } } return(meshDataSeries); }
public LabStyleCharts() { InitializeComponent(); var ds = new UniformGridDataSeries3D <double>(11, 4); ds.StartX = 0; ds.StepX = 0.09; ds.StartZ = 0; ds.StepZ = 0.75; // Initialize some nice looking data ds[0, 0] = -1.43; ds[0, 1] = -2.95; ds[0, 2] = -2.97; ds[0, 3] = -1.81; ds[0, 4] = -1.33; ds[0, 5] = -1.53; ds[0, 6] = -2.04; ds[0, 7] = 2.08; ds[0, 8] = 1.94; ds[0, 9] = 1.42; ds[0, 10] = 1.58; ds[1, 0] = 1.77; ds[1, 1] = 1.76; ds[1, 2] = -1.1; ds[1, 3] = -0.26; ds[1, 4] = 0.72; ds[1, 5] = 0.64; ds[1, 6] = 3.26; ds[1, 7] = 3.2; ds[1, 8] = 3.1; ds[1, 9] = 1.94; ds[1, 10] = 1.54; ds[2, 0] = 0; ds[2, 1] = 0; ds[2, 2] = 0; ds[2, 3] = 0; ds[2, 4] = 0; ds[2, 5] = 3.7; ds[2, 6] = 3.7; ds[2, 7] = 3.7; ds[2, 8] = 3.7; ds[2, 9] = -0.48; ds[2, 10] = -0.48; ds[3, 0] = 0; ds[3, 1] = 0; ds[3, 2] = 0; ds[3, 3] = 0; ds[3, 4] = 0; ds[3, 5] = 0; ds[3, 6] = 0; ds[3, 7] = 0; ds[3, 8] = 0; ds[3, 9] = 0; ds[3, 10] = 0; scs.RenderableSeries[0].DataSeries = ds; }
private static UniformGridDataSeries3D <double> GetSurfaceMeshDataSeries() { var meshDataSeries = new UniformGridDataSeries3D <double>(80, 25) { StepX = 1, StepZ = 1 }; for (int x = 0; x < 80; x++) { for (int z = 0; z < 25; z++) { var s = DataManager.Instance.GetGaussianRandomNumber(100, 100); double y = Math.Sin(x * 0.2 * s) / ((z + 1) * 2); y = y >= 0 ? y : 0; meshDataSeries[z, x] = y * Math.Abs(s); } } return(meshDataSeries); }
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { const int Count = 15; var uniformDataSeries = new UniformGridDataSeries3D <double>(Count, Count) { StepX = 1, StepZ = 1, SeriesName = "Impulse Series 3D", }; for (var x = 0; x < Count; x++) { for (var z = 0; z < Count; z++) { var y = Math.Sin(x * 0.25) / ((z + 1) * 2); uniformDataSeries[z, x] = y; } } ImpulseSeries3D.DataSeries = uniformDataSeries; }
public ChartViewModel() { int xSize = 512; int zSize = 512; var meshDataSeries = new UniformGridDataSeries3D <double>(xSize, zSize) { SeriesName = "3D Test", }; for (int x = 0; x < xSize; x++) { for (int z = 0; z < zSize; z++) { meshDataSeries[z, x] = random.NextDouble(); } } this.ExampleDataSeries = meshDataSeries; }
private IDataSeries3D FillSeries(double alpha, double alpha1, double betta, double betta1, double mu, double mu1, double N, double V1, double V2, int startX, int startY, int lengthX, int lengthY) { int w = lengthY, h = lengthX; var dataSeries = new UniformGridDataSeries3D <double>(h, w) { StepX = 1, StepZ = 1, }; for (int x = startX; x < h; x++) { for (int y = startY; y < w; y++) { dataSeries[x, y] = Math.Pow(alpha * (x * x + betta * y - mu * V1), N) + Math.Pow(alpha1 * (betta1 * x + y * y - mu1 * V2), N); } } return(dataSeries); }
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { var uniformDataSeries = new UniformGridDataSeries3D <double>(Count, Count) { StepX = 1, StepZ = 1, SeriesName = "Column 3D Data", }; for (var x = 0; x < Count; x++) { for (var z = 0; z < Count; z++) { var y = Math.Sin(x * 0.25) / ((z + 1) * 2); uniformDataSeries[z, x] = y; } } //Trace.WriteLine(uniformDataSeries.To2DArray().ToStringArray2D()); SciChart.RenderableSeries[0].DataSeries = uniformDataSeries; }
public SurfaceMeshFloorAndCeiling() { InitializeComponent(); var ds = new UniformGridDataSeries3D <double>(11, 4); ds.StartX = 10; ds.StepX = 0.09; ds.StartZ = 1; ds.StepZ = 0.75; // Initialize some nice looking data ds[0, 0] = -1.43; ds[0, 1] = -2.95; ds[0, 2] = -2.97; ds[0, 3] = -1.81; ds[0, 4] = -1.33; ds[0, 5] = -1.53; ds[0, 6] = -2.04; ds[0, 7] = 2.08; ds[0, 8] = 1.94; ds[0, 9] = 1.42; ds[0, 10] = 1.58; ds[1, 0] = 1.77; ds[1, 1] = 1.76; ds[1, 2] = -1.1; ds[1, 3] = -0.26; ds[1, 4] = 0.72; ds[1, 5] = 0.64; ds[1, 6] = 3.26; ds[1, 7] = 3.2; ds[1, 8] = 3.1; ds[1, 9] = 1.94; ds[1, 10] = 1.54; ds[2, 0] = 0; ds[2, 1] = 0; ds[2, 2] = 0; ds[2, 3] = 0; ds[2, 4] = 0; ds[2, 5] = 3.7; ds[2, 6] = 3.7; ds[2, 7] = 3.7; ds[2, 8] = 3.7; ds[2, 9] = -0.48; ds[2, 10] = -0.48; ds[3, 0] = 0; ds[3, 1] = 0; ds[3, 2] = 0; ds[3, 3] = 0; ds[3, 4] = 0; ds[3, 5] = 0; ds[3, 6] = 0; ds[3, 7] = 0; ds[3, 8] = 0; ds[3, 9] = 0; ds[3, 10] = 0; // We assign the same data to all three SurfaceMeshRenderableSeries3D // One for floor, one for ceiling, one for the actual mesh in the center scs.RenderableSeries[0].DataSeries = ds; scs.RenderableSeries[1].DataSeries = ds; scs.RenderableSeries[2].DataSeries = ds; }
public Simple3DHeatmapChart() { InitializeComponent(); var meshDataSeries = new UniformGridDataSeries3D <double>(XSize, ZSize) { StepX = 1, StepZ = 1 }; for (var x = 0; x < XSize; x++) { for (var z = 0; z < ZSize; z++) { var v = (1 + Math.Sin(x * 0.04 + Angle)) * 50 + (1 + Math.Sin(z * 0.1 + Angle)) * 50 * (1 + Math.Sin(Angle * 2)); var r = Math.Sqrt((x - Cx) * (x - Cx) + (z - Cy) * (z - Cy)); var exp = Math.Max(0, 1 - r * 0.008); meshDataSeries[z, x] = (v * exp + _random.NextDouble() * 50); } } //Trace.WriteLine(meshDataSeries.To2DArray().ToStringArray2D()); surfaceMesh.DataSeries = meshDataSeries; }
/* Функция построения поверхности f(x,y/Si) */ public static UniformGridDataSeries3D <double> ConstructionSurfaceDistribution(double xCen, double yCen, double distance, double sigmaX, double sigmaY, double muX, double muY, double ro) { var uniformGridDataSeries3D = new UniformGridDataSeries3D <double>(100, 100) { StartX = xCen - distance * 3, StepX = (6 * distance) / 100, StartZ = yCen - distance * 3, StepZ = (6 * distance) / 100, }; for (var x = 0; x < 100; x++) { for (var z = 0; z < 100; z++) { var xVal = x / (double)100 * (6 * distance) - Math.Abs(xCen - distance * 3); var zVal = z / (double)100 * (6 * distance) - Math.Abs(yCen - distance * 3); var y = func_Gauss_XY(xVal, zVal, sigmaX, sigmaY, muX, muY, ro); uniformGridDataSeries3D[z, x] = y; } } return(uniformGridDataSeries3D); }
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { var uniformDataSeries = new UniformGridDataSeries3D <double>(Count, Count) { StepX = 1, StepZ = 1, SeriesName = "Impulse Series 3D", }; for (var x = 0; x < Count; x++) { for (var z = 0; z < Count; z++) { var y = Math.Sin(x * 0.25) / ((z + 1) * 2); uniformDataSeries[z, x] = y; } } //Trace.WriteLine(uniformDataSeries.To2DArray().ToStringArray2D()); ImpulseSeries3D.DataSeries = uniformDataSeries; PointMarkerCombo.SelectedIndex = 0; }
public TenorCurves3DChart() { InitializeComponent(); _random = new Random(); int xSize = 25; int zSize = 25; var meshDataSeries = new UniformGridDataSeries3D <double, double, DateTime>(xSize, zSize); var lineDataSeries = new XyDataSeries <double>(); var mountainDataSeries = new XyDataSeries <double, double>(); meshDataSeries.StartZ = new DateTime(2010, 1, 1); meshDataSeries.StepZ = new TimeSpan(1, 0, 0, 0).ToDateTime(); double step; for (int x = 0; x < xSize; x++) { switch (x) { case 5: case 10: step = 0.309; break; case 4: case 9: step = 0.303; break; case 6: case 11: step = 0.303; break; case 23: step = 0.291; break; case 22: step = 0.294; break; case 24: step = 0.295; break; default: step = 0.3; break; } for (int z = 0; z < zSize; z++) { var y = (z != 0) ? Math.Pow((double)z + _random.NextDouble(), step) : Math.Pow((double)z + 1, 0.3); meshDataSeries[z, x] = y; } } double average; for (int x = 0; x < xSize; x++) { average = 0; for (int z = 0; z < zSize; z++) { average += meshDataSeries[x, z]; } var y = average / 25; lineDataSeries.Append(x, y); mountainDataSeries.Append(x, meshDataSeries[12, x]); } mountainRenderSeries.DataSeries = mountainDataSeries; LineRenderableSeries.DataSeries = lineDataSeries; surfaceMeshRenderableSeries.Maximum = (double)meshDataSeries.YRange.Max; surfaceMeshRenderableSeries.Minimum = (double)meshDataSeries.YRange.Min; surfaceMeshRenderableSeries.DataSeries = meshDataSeries; }
private void Paint() { switch (_selectChart) { case (int)Chart.PointChart3D: var grath_3D = new XyzDataSeries3D <int>(); for (int x = 0; x < CA.Length; x++) { for (int y = 0; y < CA.Length; y++) { for (int z = 0; z < CA.Length; z++) { if (CA[x, y, z]) { grath_3D.Append(x, y, z); } } } } var scatterSeries3D = new ScatterRenderableSeries3D { DataSeries = grath_3D, PointMarker = _selectPointMarker }; scatterSeries3D.PointMarker.Fill = Color.FromArgb(_selectAlpha, _selectColor.R, _selectColor.G, _selectColor.B); SciChart3D.RenderableSeries.Clear(); SciChart3D.RenderableSeries.Add(scatterSeries3D); SetName("Клеточный автомат; Итерация =" + CA.Iterator); break; case Chart.MeshChart: var meshGrath_3D = new UniformGridDataSeries3D <double>(CA.Length, CA.Length); double[,] pollution = CA.GetPollution(_selectIndex, _selectAxis); for (int i = 0; i < CA.Length; i++) { for (int j = 0; j < CA.Length; j++) { meshGrath_3D[i, j] = pollution[i, j]; } } var meshRenderableSeries = new SurfaceMeshRenderableSeries3D() { MeshColorPalette = _gradientColor, DrawMeshAs = DrawMeshAs.SolidWithContours, DataSeries = meshGrath_3D }; SciChart3D.RenderableSeries.Clear(); SciChart3D.RenderableSeries.Add(meshRenderableSeries); SetName("Осреднение по плоскости " + CA_Model.GetNameAxis(_selectAxis) + "; Слой = " + _selectIndex + "; Итерация =" + CA.Iterator); break; case Chart.PointChart2D: var dataGraph_2D = new XyDataSeries <int, int>(); for (int i = 0; i < CA.Length; i++) { for (int j = 0; j < CA.Length; j++) { if (CA.GetPointPollution(_selectAxis, _selectIndex, i, j)) { dataGraph_2D.Append(i, j); } } } var xyScatter = new XyScatterRenderableSeries() { DataSeries = dataGraph_2D, PointMarker = _selectPointMarker2D }; xyScatter.PointMarker.Fill = Color.FromArgb(_selectAlpha, _selectColor.R, _selectColor.G, _selectColor.B); SciChart2D.RenderableSeries.Clear(); SciChart2D.RenderableSeries.Add(xyScatter); SetName("Клеточный автомат; Плоскость " + CA_Model.GetNameAxis(_selectAxis) + "; Слой = " + _selectIndex + "; Итерация =" + CA.Iterator); break; } GetUpdating = false; }
public SurfaceMeshWithTextureMask() { InitializeComponent(); int xSize = 49; int zSize = 49; _meshDataSeries0 = new UniformGridDataSeries3D <double>(xSize, zSize); _meshDataSeries1 = new UniformGridDataSeries3D <double>(xSize, zSize); for (int x = 48; x >= 24; x--) { var y = Math.Pow((double)x - 23 - 0.7, 0.3); _meshDataSeries0[24, x] = y; var y2 = Math.Pow((double)(x - 49) * (-1) + 0.5, 0.3); _meshDataSeries1[24, x] = y2 + 1.505; } for (int x = 24; x >= 0; x--) { for (int z = 49; z > 25; z--) { var y = Math.Pow((double)z - 23 - 0.7, 0.3); var y2 = Math.Pow((double)(z - 50) * (-1) + 0.5, 0.3); _meshDataSeries0[x + 24, (z - 49) * (-1)] = y; _meshDataSeries0[z - 1, (x - 24) * (-1)] = y; _meshDataSeries1[x + 24, (z - 49) * (-1)] = y2 + 1.505; _meshDataSeries1[z - 1, (x - 24) * (-1)] = y2 + 1.505; _meshDataSeries0[(x - 24) * (-1), (z - 49) * (-1)] = y; _meshDataSeries0[(z - 49) * (-1), (x - 24) * (-1)] = y; _meshDataSeries1[(x - 24) * (-1), (z - 49) * (-1)] = y2 + 1.505; _meshDataSeries1[(z - 49) * (-1), (x - 24) * (-1)] = y2 + 1.505; _meshDataSeries0[x + 24, z - 1] = y; _meshDataSeries0[z - 1, x + 24] = y; _meshDataSeries1[x + 24, z - 1] = y2 + 1.505; _meshDataSeries1[z - 1, x + 24] = y2 + 1.505; _meshDataSeries0[(x - 24) * (-1), z - 1] = y; _meshDataSeries0[(z - 49) * (-1), x + 24] = y; _meshDataSeries1[(x - 24) * (-1), z - 1] = y2 + 1.505; _meshDataSeries1[(z - 49) * (-1), x + 24] = y2 + 1.505; } } if (_timer == null) { _timer = new DispatcherTimer(DispatcherPriority.Render); _timer.Interval = TimeSpan.FromMilliseconds(1); _timer.Tick += OnTimerTick; } _timer.Start(); surfaceMeshRenderableSeries.Maximum = (double)_meshDataSeries1.YRange.Max; surfaceMeshRenderableSeries.Minimum = (double)_meshDataSeries0.YRange.Min; surfaceMeshRenderableSeries.DataSeries = _meshDataSeries0; surfaceMeshRenderableSeries2.Maximum = (double)_meshDataSeries1.YRange.Max; surfaceMeshRenderableSeries2.Minimum = (double)_meshDataSeries0.YRange.Min; surfaceMeshRenderableSeries2.DataSeries = _meshDataSeries1; }
private void OnStart() { if (!IsLoaded) { return; } string whatData = (string)DataCombo.SelectedItem; int w = 0, h = 0; if (whatData == "3D Sinc 10 x 10") { w = h = 10; } if (whatData == "3D Sinc 50 x 50") { w = h = 50; } if (whatData == "3D Sinc 100 x 100") { w = h = 100; } if (whatData == "3D Sinc 500 x 500") { w = h = 500; } if (whatData == "3D Sinc 1k x 1k") { w = h = 1000; } lock (_syncRoot) { OnStop(); } var dataSeries = new UniformGridDataSeries3D <double>(w, h) { StartX = 0, StartZ = 0, StepX = 10 / (w - 1d), StepZ = 10 / (h - 1d), SeriesName = "Realtime Surface Mesh", }; var frontBuffer = dataSeries.InternalArray; var backBuffer = new GridData <double>(w, h).InternalArray; int frames = 0; _timer = new Timer(); _timer.Interval = 20; _timer.Elapsed += (s, arg) => { lock (_syncRoot) { double wc = w * 0.5, hc = h * 0.5; double freq = Math.Sin(frames++ *0.1) * 0.1 + 0.1; // Each set of dataSeries[i,j] schedules a redraw when the next Render event fires. Therefore, we suspend updates so that we can update the chart once // Data generation (Sin, Sqrt below) is expensive. We parallelize it by using Parallel.For for the outer loop // Equivalent of "for (int j = 0; j < h; j++)" // This will result in more CPU usage, but we wish to demo the performance of the actual rendering, not the slowness of generating test data! :) Parallel.For(0, h, i => { var buf = frontBuffer; for (int j = 0; j < w; j++) { // 3D Sinc function from http://www.mathworks.com/matlabcentral/cody/problems/1305-creation-of-2d-sinc-surface // sin(pi*R*freq)/(pi*R*freq) // R is distance from centre double radius = Math.Sqrt((wc - i) * (wc - i) + (hc - j) * (hc - j)); var d = Math.PI * radius * freq; var value = Math.Sin(d) / d; buf[i][j] = double.IsNaN(value) ? 1.0 : value; } }); using (dataSeries.SuspendUpdates()) { dataSeries.CopyFrom(frontBuffer); var temp = backBuffer; backBuffer = frontBuffer; frontBuffer = temp; } } }; SurfaceMesh.DataSeries = dataSeries; _timer.Start(); StartButton.IsEnabled = false; PauseButton.IsEnabled = true; }