Esempio n. 1
0
        private void DrawNextLayer(int[,] matrix, int[] topHorizonHeight, int[] bottomHorizonHeight,
                                   ProjectionBounds bounds, Params parameters, Func <int, int, double> GetX, Func <int, int, double> GetY, int iteration)
        {
            var points       = GetNewLine(matrix, parameters, iteration, bounds, GetX, GetY);
            var resultPoints = DrawContinuousLine(points, topHorizonHeight, bottomHorizonHeight);

            foreach (var point in resultPoints)
            {
                PutPixel(matrix, point, point.Color);
            }
        }
Esempio n. 2
0
        private ProjectionBounds GetBounds(Params parameters, Func <int, int, double> GetX, Func <int, int, double> GetY)
        {
            var bounds = new ProjectionBounds();

            for (var i = 0; i < parameters.n; i++)
            {
                for (var j = 0; j < parameters.m; j++)
                {
                    var x            = GetX(i, j);
                    var y            = GetY(i, j);
                    var z            = parameters.Function(x, y);
                    var currentPoint = new PointDouble(x, y, z, parameters);
                    bounds.MaxX = Math.Max(bounds.MaxX, currentPoint.X);
                    bounds.MaxY = Math.Max(bounds.MaxY, currentPoint.Y);
                    bounds.MinX = Math.Min(bounds.MinX, currentPoint.X);
                    bounds.MinY = Math.Min(bounds.MinY, currentPoint.Y);
                }
            }
            return(bounds);
        }
Esempio n. 3
0
        private List <PointInt> GetNewLine(int[, ] matrix, Params parameters, int iteration, ProjectionBounds bounds, Func <int, int, double> GetX, Func <int, int, double> GetY)
        {
            var result = new List <PointInt>();

            for (var i = 0; i < parameters.m; i++)
            {
                var x = GetX(iteration, i);
                var y = GetY(iteration, i);
                var z = parameters.Function(x, y);
                var currentPointDouble = new PointDouble(x, y, z, parameters);
                var transformed        = new PointDouble()
                {
                    X = (currentPointDouble.X - bounds.MinX) / (bounds.MaxX - bounds.MinX) * (parameters.Width - 1),
                    Y = (currentPointDouble.Y - bounds.MinY) / (bounds.MaxY - bounds.MinY) * (parameters.Height - 1)
                };
                result.Add(new PointInt(transformed));
            }
            return(result);
        }