Вы видите правильное пересечение, оно должно быть просто по форме эллипса.Есть одна вещь, которую вы не учли, все геометрии находятся в начале координат (положение относительно холста не имеет значения).Поскольку обе геометрии имеют одинаковую форму и местоположение, вы увидите одну и ту же форму, когда получите пересечение.Попробуйте каким-либо образом изменить форму любого эллипса, и вы увидите разницу.
Вам нужно перевести одну из геометрий на соответствующие смещения, чтобы получить правильную форму.Возможно, даже не стоит устанавливать все присоединенные свойства Top
и Left
.
Чтобы продемонстрировать, что вы можете сделать вместо этого:
var ellipseGeometry1 = new EllipseGeometry(new Rect(50, 0, 100, 50));
var ellipseGeometry2 = new EllipseGeometry(new Rect(0, 0, 100, 50));
var ellipse1 = new Path { Data = ellipseGeometry1, Stroke = Brushes.Red, Fill = Brushes.Transparent, StrokeThickness = 3 };
var ellipse2 = new Path { Data = ellipseGeometry2, Stroke = Brushes.Red, Fill = Brushes.Transparent, StrokeThickness = 3 };
Canvas.SetTop(ellipse1, 100);
Canvas.SetLeft(ellipse1, 250);
Canvas.SetTop(ellipse2, 100);
Canvas.SetLeft(ellipse2, 250);
mainCanvas.Children.Add(ellipse1);
mainCanvas.Children.Add(ellipse2);
var g = new CombinedGeometry
{
Geometry1 = ellipseGeometry1,
Geometry2 = ellipseGeometry2,
GeometryCombineMode = GeometryCombineMode.Intersect,
};
var p = new Path
{
Data = g,
Stroke = Brushes.Transparent,
Fill = Brushes.Green,
};
mainCanvas.Children.Add(p);