Это больше сенсационный ответ, чем практический характер, поскольку если все, что вы делаете, пересекает две линии, это очень медленно. Однако я подумал, что стоит упомянуть.
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
.
Этот метод может быть очень полезным, если, например, вам нужно пересечь линию с произвольной кривой.
Ее, как сделать это программно, что я не могу работать. –
Я получил это далеко, это было линейное уравнение1 = линейное уравнение2, которое я не могу понять, так как, конечно, алгебра будет меняться каждый раз? –
Имеет ли смысл? –