Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var radius = data.Item2;
- var segments = input.Strokes.Select(s => s.Points.Select(p => new Vector2 { X = (float)p.X, Y = (float)p.Y }).ToArray()).ToList();
- var loopPoint = segments[0][0];
- var currentSegment = 0;
- var runAlgo = true;
- while (runAlgo)
- {
- var idRef = currentSegment;
- for (int i = segments[currentSegment].Length - 1; i > 0; i--)
- {
- var neighbors = segments.Except(new[] { segments[currentSegment] })
- .Where(s => s.Any(p => Vector2.Distance(p, segments[currentSegment][i]) <= radius));
- if(neighbors.Count() == 0)
- {
- continue;
- }
- var min = neighbors.Min(s => s.Min(p => Vector2.Distance(p, segments[currentSegment][i])));
- var closestNeighbor = neighbors.First(s => s.Min(p => Vector2.Distance(p, segments[currentSegment][i])) == min);
- var index = segments.IndexOf(closestNeighbor);
- currentSegment = index;
- var point = segments[index].First(p => Vector2.Distance(p, segments[currentSegment][i]) == min);
- if(point == loopPoint)
- {
- runAlgo = false;
- respectRatio = min / (float)radius;
- }
- break;
- }
- if(idRef == currentSegment)
- {
- runAlgo = false;
- respected = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement