private void btnTriRect_Click(object sender, RoutedEventArgs e) { try { double width = canvas.ActualWidth; double height = canvas.ActualHeight; Point[] poly1 = new Point[] { new Point(_rand.NextDouble() * width, _rand.NextDouble() * height), new Point(_rand.NextDouble() * width, _rand.NextDouble() * height), new Point(_rand.NextDouble() * width, _rand.NextDouble() * height) }; Point rectPoint = new Point(_rand.NextDouble() * (width * .75d), _rand.NextDouble() * (height * .75d)); // don't let it start all the way at the bottom right Rect rect = new Rect( rectPoint, new Size(_rand.NextDouble() * (width - rectPoint.X), _rand.NextDouble() * (height - rectPoint.Y))); Point[] poly2 = new Point[] { rect.TopLeft, rect.TopRight, rect.BottomRight, rect.BottomLeft }; Point[] intersect = SutherlandHodgman.GetIntersectedPolygon(poly1, poly2); canvas.Children.Clear(); ShowPolygon(poly1, _subjectBack, _subjectBorder, 1d); ShowPolygon(poly2, _clipBack, _clipBorder, 1d); ShowPolygon(intersect, _intersectBack, _intersectBorder, 3d); } catch (Exception ex) { MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }
private void btnConvex_Click(object sender, RoutedEventArgs e) { try { Point[] poly1 = new Point[] { new Point(50, 150), new Point(200, 50), new Point(350, 150), new Point(350, 300), new Point(250, 300), new Point(200, 250), new Point(150, 350), new Point(100, 250), new Point(100, 200) }; Point[] poly2 = new Point[] { new Point(100, 100), new Point(300, 100), new Point(300, 300), new Point(100, 300) }; Point[] intersect = SutherlandHodgman.GetIntersectedPolygon(poly1, poly2); canvas.Children.Clear(); ShowPolygon(poly1, _subjectBack, _subjectBorder, 1d); ShowPolygon(poly2, _clipBack, _clipBorder, 1d); ShowPolygon(intersect, _intersectBack, _intersectBorder, 3d); } catch (Exception ex) { MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }