using System; using System.Collections.Generic; using System.Linq; namespace Contours { public struct VectorFloat { public float x, y; public VectorFloat(float x, float y) { this.x = x; this.y = y; } } public class ContourFloat { public readonly List> contours = new List>(); public ContourInt toContourInt(float detalization = 10000f) { ContourInt contourInt = new ContourInt(); bool found = false; VectorFloat min = new VectorFloat(0f, 0f); VectorFloat max = new VectorFloat(0f, 0f); foreach(List contour in contours) { foreach(VectorFloat point in contour) { if (!found) { min = max = point; found = true; } else { if (min.x > point.x) min.x = point.x; if (min.y > point.y) min.y = point.y; if (max.x > point.x) max.x = point.x; if (max.y > point.y) max.y = point.y; } } } if (found) { contourInt.scale = Math.Max(max.x - min.x, max.y - min.y)/detalization; foreach(List contour in contours) { List newContour = new List(); foreach(VectorFloat point in contour) newContour.Add(new VectorInt((int)Math.Round(point.x*contourInt.scale), (int)Math.Round(point.y*contourInt.scale))); contourInt.contours.Add(newContour); } } return contourInt; } } }