/// <summary>
        /// 큰 diagridUnit에 pixel이 들어갈 수록 높은 점수를 받는다.
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="intension"></param>
        public double EstimateInclusionScore(RectangleFrameDiagrid grid, IntensionLayer intension, GeometryParser parser)
        {
            var handler = new GeoHandler();
            List <List <(int, int)> > all = parser.ToPolygonPointList(grid);
            double       width            = all.SelectMany(n => n).Max(n => n.Item1);
            double       height           = all.SelectMany(n => n).Max(n => n.Item2);
            List <Pixel> pixels           = intension.GetPixels(width, height);

            var diagridUnits = grid.DiagridUnits;

            var inspections = diagridUnits
                              .Select(n => new { pointList = parser.ToPolygonPointList(n), mag = n.Magnification })
                              .Select(n => new { pts = n.pointList.Select(k => new Point(k.Item1, k.Item2)), mag = n.mag })
                              .Select(n => new { polygon = new Polygon(n.pts), mag = n.mag })
                              .ToList();


            double total = 0;

            foreach (var inspect in inspections)
            {
                var inclusions = pixels
                                 .Where(n => handler.PointInPolygon(new Point(n.PixelCenterX, n.PixelCenterY), inspect.polygon) == PointPositionWithPolygon.Inside)
                                 .ToList();

                double score = inclusions
                               .Select(n => (int)n.Val)
                               .Sum();

                double weightedScore = score * inspect.mag;
                total += weightedScore;
            }

            return(total);
        }
        public void ConstructorTest()
        {
            RectangleFrameDiagrid quadGrid = new RectangleFrameDiagrid(10, 10);

            Assert.IsTrue(quadGrid.XCount == 10);
            Assert.IsTrue(quadGrid.YCount == 10);
            Assert.IsTrue(quadGrid.ZCount == 4);
        }
        public void ToJson_Test2()
        {
            var parser  = new JsonParser();
            var diaUnit = new DiagridUnit(6, 6, 2);
            var triUnit = new TriangleUnit(0, 0, 2, Pattern.Core.System.Direction.Right);

            var quad = new RectangleFrameDiagrid(20, 20);

            quad.Insert(diaUnit);
            quad.Insert(triUnit);

            string json = JsonConvert.SerializeObject(quad);

            RectangleFrameDiagrid de = JsonConvert.DeserializeObject <RectangleFrameDiagrid>(json);
        }
Exemple #4
0
        private void _GenerateClick()
        {
            if (!IsPositiveValidity())
            {
                return;
            }

            CanvasItems.Clear();
            Canvas canvas = new Canvas();
            RectangleFrameDiagrid grid = new RectangleFrameDiagrid(ColumnCount, RowCount);

            int triMin = TriangleMinSize;
            int triMax = TriangleMaxSize;
            var mags   = Magnifications.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
            var iters  = Iterations.Split(',').Select(n => Convert.ToInt32(n)).ToArray();;

            (int, int)[] magIters = mags.Zip(iters, (a, b) => new ValueTuple <int, int>(a, b)).ToArray();