Esempio n. 1
0
        public Vector2 cropBySize(Vector2 v, IntVector2 size)
        {
            var x = JryMath.Max(JryMath.Min(v.X, size.X), 0);
            var y = JryMath.Max(JryMath.Min(v.Y, size.Y), 0);

            return(new Vector2(x, y));
        }
Esempio n. 2
0
        public override Task <ILayerMasked> GenerateLayer()
        {
            var pts    = _layerLocalParameters.Polygon.Points.ToList();
            var bounds = new GeometryUtils().GetBoundsForPoints(pts);
            var mask   = obtainBluredMask(pts,
                                          _layerLocalParameters.BlurSize,
                                          _layerLocalParameters.ExtendSize);


            var size  = mask.Resolution;
            int count = (int)JryMath.Max(size.X, size.Y) / 100 + 1;
            var areas = _voronoiAreGenerator.GenerateAreas(size, bounds.GetSize(), count);

            _areaLoggerWithFill.LogAreas(size, areas, "loggedAreasFilled");

            var layer     = new Layer2DObject(new Vector2(size.X + _layerLocalParameters.ExtendSize, size.Y + _layerLocalParameters.ExtendSize));
            var layerSize = layer.Resolution;
            var deltaX    = (layerSize.X - size.X) / 2;
            var deltaY    = (layerSize.Y - size.Y) / 2;

            var translateVector = new Vector2(deltaX, deltaY);

            _voronoiAreaDrawer.PrintToLayer(layer, areas, translateVector);
            layer.Mask = mask;
            _logger.Log(layer, "mountain");
            applyOffset(_layerLocalParameters.ExtendSize, _layerLocalParameters.Polygon.Points.ToList(), layer);
            _layUtils.Normalize(layer);
            layer.Mask = mask;
            return(Task.FromResult((ILayerMasked)layer));
        }
Esempio n. 3
0
        public ILayerMasked Do(INoiseParameters param, Vector2 size)
        {
            var dt = DateTime.Now.Millisecond;

            System.Diagnostics.Debug.Print(dt + "Rand" + _rand.NextD(1, 2));

            var           pow      = (int)JryMath.Max(JryMath.Ceil(JryMath.Log(size.X, 2)), JryMath.Ceil(JryMath.Log(size.Y, 2)));
            int           sizePow2 = (int)JryMath.Pow(2, pow) + 1;
            Layer2DObject layer    = new Layer2DObject(sizePow2, sizePow2);

            setupBaseDS(sizePow2, layer, _rand);
            var par = param.BaseAmplitude * param.Amplitude;

            ds(layer, sizePow2, par, param, _rand);


            var croped = new Layer2DObject(size);

            for (int y = 0; y < size.Y; y++)
            {
                for (int x = 0; x < size.X; x++)
                {
                    croped[x, y] = layer[x, y];
                }
            }
            return(croped);
        }
Esempio n. 4
0
        /// <summary>
        /// Genereates using user input
        /// </summary>
        /// <param name="size"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        public IList <IArea> Generate(IntVector2 size, IList <Vector2> input)
        {
            var f = new Fortune();
            //Points = input ;
            var segs = f.GetSegments(input, minSize: 0, maxSize: JryMath.Max(size.X, size.Y));

            return(_converter.ConvertSegmentToAreas(segs, size));
            //return segs;
        }
Esempio n. 5
0
        private ILayerMasked merge(IBlendModeAlpha ablend, ILayerMasked baseLayer, IList <DescribedLayer> pars)
        {
            onMergeStarted();
            if (pars == null || pars.Count == 0)
            {
                throw new ArgumentException();
            }

            var final = baseLayer;

            foreach (var describ in pars)
            {
                var current   = describ.Layer;
                var blendMode = describ.GlobalParameters.BlendMode;
                var offset    = describ.GlobalParameters.Offset - .5f;

                var minY = JryMath.Max(0, -current.Offset.Y);
                var minX = JryMath.Max(0, -current.Offset.X);
                var maxY = JryMath.Min(current.Resolution.Y, final.Resolution.Y - current.Offset.Y);
                var maxX = JryMath.Min(current.Resolution.X, final.Resolution.X - current.Offset.X);
                for (int y = minY; y < maxY; y++)
                {
                    for (int x = minX; x < maxX; x++)
                    {
                        int ix = x + current.Offset.X;
                        int iy = y + current.Offset.Y;


                        var curVal = current[x, y];
                        if (!curVal.HasValue || !final[ix, iy].HasValue || !current.HasMask)
                        {
                            continue;
                        }
                        var maskValue = current.Mask[x, y];
                        if (!maskValue.HasValue)
                        {
                            continue;
                        }


                        var currentLayerValue     = curVal.Value + offset;
                        var currentLayerMaskValue = maskValue.Value;
                        //currentLayerMaskValue = 1;
                        var upToThisPointGeneratedLayerValue = final[ix, iy].Value;


                        var blended = blendMode.Blend(upToThisPointGeneratedLayerValue, currentLayerValue * currentLayerMaskValue);
                        final[ix, iy] = ablend.Blend(upToThisPointGeneratedLayerValue, blended, currentLayerMaskValue);
                        if (final[ix, iy] > 0.05f)
                        {
                        }
                    }
                }
            }

            return(baseLayer);
        }
Esempio n. 6
0
        private byte obtainColor(float?fVal)
        {
            if (fVal.HasValue)
            {
                return((byte)(JryMath.Max(0, JryMath.Min(fVal.Value * 255, 255))));
            }

            return(0);
        }
Esempio n. 7
0
 private static float crop(float min, float max, float p)
 {
     return(JryMath.Min(JryMath.Max(p, min), max));
 }
Esempio n. 8
0
        public Vector2 getParabalaeIntersection(Parabola left, Parabola right, double directixY)
        {
            if (left == null || right == null || left.Site == right.Site)
            {
                throw new Exception("NoIntersectoinFound");
            }


            double denominator1 = 2.0f * (left.Site.Y - directixY);

//#warning quickfix
            if (denominator1 == 0)
            {
                denominator1 = 0.000001;
            }
            double a1 = 1.0f / denominator1;
            double b1 = -2.0f * left.Site.X / denominator1;
            double c1 = ((left.Site.X * left.Site.X) + (left.Site.Y * left.Site.Y) - (directixY * directixY))
                        / denominator1;
            //y + dp / 4 + px * px / dp
            double denominator2 = 2.0f * (right.Site.Y - directixY);

//#warning quickfix
            if (denominator2 == 0)
            {
                denominator2 = 0.000001;
            }
            double a2 = 1.0f / denominator2;
            double b2 = -2.0f * right.Site.X / denominator2;
            double c2 = ((right.Site.X * right.Site.X) + (right.Site.Y * right.Site.Y) - (directixY * directixY))
                        / denominator2;


            double a = a1 - a2;
            double b = b1 - b2;
            double c = c1 - c2;

            double x1 = 0, x2 = 0;

            if (a == 0)// 0 = bx +c
            {
                x1 = -c / b;
                x2 = x1;
            }
            else //0 = ax^2 + bx + c
            {
                double disc = b * b - 4 * a * c;
                if (disc < 0)// when everything is ok. this case become imposible
                {
                    throw new InvalidOperationException("Negative discriminant root not found in real domain");
                }
                x1 = (-b + JryMath.Sqrt(disc)) / (2 * a);
                x2 = (-b - JryMath.Sqrt(disc)) / (2 * a);
            }

            double x;

            if (left.Site.Y < right.Site.Y)
            {
                x = JryMath.Max(x1, x2);
            }
            else
            {
                x = JryMath.Min(x1, x2);
            }

            double y;

            // i have chosen to use left parabola to get Y coor;
            y = a1 * x * x + b1 * x + c1;

            return(new Vector2((float)x, (float)y));
        }
Esempio n. 9
0
 public float Blend(float value1, float value2)
 {
     return(JryMath.Max(value1, value2));
 }
Esempio n. 10
0
 private int NewMethod(int max, float value)
 {
     return((int)JryMath.Max(JryMath.Min(max, value), 0));
 }