Boundary画线算法,精度导致的问题修复

This commit is contained in:
艾竹
2023-04-16 14:56:53 +08:00
parent 4b8a03afb6
commit cbfbf96033
6 changed files with 40 additions and 8 deletions

View File

@@ -53,12 +53,12 @@ namespace AIStudio.Wpf.DiagramDesigner
var p0 = GetFirstSegment(source, sourceOrientation, gridCellSize, gridMargin);
var p1 = GetFirstSegment(sink, sinkOrientation, gridCellSize, gridMargin);
if (p0 == p1)
if (p0.Equals(p1))
return points;
var p2 = new PointBase(GetNearestCross(p0.X, p1.X, gridCellSize.Width, gridMargin.Width), GetNearestCross(p0.Y, p1.Y, gridCellSize.Height, gridMargin.Height));
var p3 = new PointBase(GetNearestCross(p1.X, p0.X, gridCellSize.Width, gridMargin.Width), GetNearestCross(p1.Y, p0.Y, gridCellSize.Height, gridMargin.Height));
if (p2 == p3)
if (p2.Equals(p3))
{
points.Add(p0);
points.Add(p2);
@@ -93,12 +93,12 @@ namespace AIStudio.Wpf.DiagramDesigner
public static double GetNearestCross(double a, double b, double cellSize, double margin)
{
if (Math.Abs(a - b) < 0.0001 && (int)((a - margin)/ cellSize) == ((a - margin) / cellSize))
if (Math.Abs(a - b) < 0.0001 && (int)(Math.Round((a - margin)/ cellSize, 3)) == (Math.Round((a - margin) / cellSize,3)))
return a;
else if (a < b)
return Math.Ceiling((a - margin) / cellSize) * cellSize + margin;
return Math.Ceiling(Math.Round((a - margin) / cellSize, 3)) * cellSize + margin;
else
return Math.Floor((a - margin) / cellSize) * cellSize + margin;
return Math.Floor(Math.Round((a - margin) / cellSize, 3)) * cellSize + margin;
}
public static PointBase SegmentMiddlePoint(PointBase p1, PointBase p2)