This commit is contained in:
艾竹
2023-07-02 11:23:00 +08:00
parent be7a99e651
commit b476fd4eb5
10 changed files with 938 additions and 46 deletions

View File

@@ -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);
}
}
}