mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
block
This commit is contained in:
@@ -83,12 +83,34 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
public double DistanceTo(BlockConnectorInfo port)
|
||||
{
|
||||
var leftleftdistance = LeftPosition.DistanceTo(port.LeftPosition);
|
||||
var leftrightdistance = LeftPosition.DistanceTo(port.RightPosition);
|
||||
var rightleftdistance = RightPosition.DistanceTo(port.LeftPosition);
|
||||
var rightrightdistance = RightPosition.DistanceTo(port.RightPosition);
|
||||
PointBase p0 = port.LeftPosition;
|
||||
PointBase p1 = port.RightPosition;
|
||||
PointBase p2 = LeftPosition;
|
||||
PointBase p3 = RightPosition;
|
||||
var distance1 = DistanceTo(p0, p1, p2);
|
||||
var distance2 = DistanceTo(p0, p1, p3);
|
||||
var distance3 = DistanceTo(p2, p3, p0);
|
||||
var distance4 = DistanceTo(p2, p3, p1);
|
||||
|
||||
return Math.Min(Math.Min(leftleftdistance, leftrightdistance), Math.Min(rightleftdistance, rightrightdistance));
|
||||
return Math.Min(Math.Min(distance1, distance2), Math.Min(distance3, distance4));
|
||||
}
|
||||
|
||||
double DistanceTo(PointBase A, PointBase B, PointBase P) //点P到线段AB的最短距离
|
||||
{
|
||||
double r = ((P.X - A.X) * (B.X - A.X) + (P.Y - A.Y) * (B.Y - A.Y)) / DistanceToPow(A, B);
|
||||
if (r <= 0) return Math.Sqrt(DistanceToPow(A, P));
|
||||
else if (r >= 1) return Math.Sqrt(DistanceToPow(B, P));
|
||||
else
|
||||
{
|
||||
double AC = r * Math.Sqrt(DistanceToPow(A, B));
|
||||
return Math.Sqrt(DistanceToPow(A, P) - AC * AC);
|
||||
}
|
||||
}
|
||||
|
||||
double DistanceToPow(PointBase a, PointBase b) //点a、b距离的平方
|
||||
{
|
||||
return (a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user