/// <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); }
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();