Это скорее отвратительный ответ, чем практический, потому что если все, что вы делаете, пересекает две линии, то это очень медленно.Однако я подумал, что стоит упомянуть.
WPF имеет возможность пересекать любые две контуры фигуры, включая две линии, и сообщать вам местоположение пересечения.
Вот общая методикадля пересечения двух контуров (края, а не область заливки):
var shape1 = ...;
var shape2 = ...;
var thinPen = new Pen(Brush.Transparent, 0.001);
var geometry1 = shape1.RenderedGeometry.GetWidenedPathGeometry(thinPen);
var geometry2 = shape2.RenderedGeometry.GetWidenedPathGeometry(thinPen);
var combined = Geometry.Combine(
geometry1,
geometry2,
GeometryCombineMode.Intersect,
shape2.TransformToVisual(shape1));
var bounds = combined.GetRenderBounds(thinPen);
Если известно, что фигуры имеют одинаковое положение, shape2.TransformToVisual(shape1)
в вызове Geometry.Combine
можно заменить на null
.
Этот метод может быть очень полезен, если, например, вам необходимо пересечь линию с произвольной кривой.