improve:直线拉直
This commit is contained in:
@@ -944,13 +944,6 @@ namespace Ink_Canvas
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否有明显的回环或重叠
|
|
||||||
if (HasSignificantLoops(stroke))
|
|
||||||
{
|
|
||||||
Debug.WriteLine("检测到复杂形状:存在明显回环");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1031,55 +1024,6 @@ namespace Ink_Canvas
|
|||||||
return changes;
|
return changes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 检查是否有明显的回环
|
|
||||||
/// </summary>
|
|
||||||
private bool HasSignificantLoops(Stroke stroke)
|
|
||||||
{
|
|
||||||
if (stroke.StylusPoints.Count < 20) return false;
|
|
||||||
|
|
||||||
// 检查起点和终点是否接近(可能是闭合图形)
|
|
||||||
Point start = stroke.StylusPoints.First().ToPoint();
|
|
||||||
Point end = stroke.StylusPoints.Last().ToPoint();
|
|
||||||
double startEndDistance = GetDistance(start, end);
|
|
||||||
|
|
||||||
// 计算平均点间距
|
|
||||||
double totalDistance = 0;
|
|
||||||
for (int i = 1; i < stroke.StylusPoints.Count; i++)
|
|
||||||
{
|
|
||||||
Point p1 = stroke.StylusPoints[i - 1].ToPoint();
|
|
||||||
Point p2 = stroke.StylusPoints[i].ToPoint();
|
|
||||||
totalDistance += GetDistance(p1, p2);
|
|
||||||
}
|
|
||||||
double avgPointDistance = totalDistance / (stroke.StylusPoints.Count - 1);
|
|
||||||
|
|
||||||
// 如果起点和终点很接近,可能是闭合图形
|
|
||||||
if (startEndDistance < avgPointDistance * 5)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查是否有点重复经过相似区域
|
|
||||||
int overlapCount = 0;
|
|
||||||
double overlapThreshold = avgPointDistance * 3;
|
|
||||||
|
|
||||||
for (int i = 0; i < stroke.StylusPoints.Count - 10; i += 5)
|
|
||||||
{
|
|
||||||
Point p1 = stroke.StylusPoints[i].ToPoint();
|
|
||||||
for (int j = i + 10; j < stroke.StylusPoints.Count; j += 5)
|
|
||||||
{
|
|
||||||
Point p2 = stroke.StylusPoints[j].ToPoint();
|
|
||||||
if (GetDistance(p1, p2) < overlapThreshold)
|
|
||||||
{
|
|
||||||
overlapCount++;
|
|
||||||
if (overlapCount > 3) return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 检查曲率是否一致(用于识别圆弧等规则曲线)
|
/// 检查曲率是否一致(用于识别圆弧等规则曲线)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user