ポリラインがいつでも自己交差するかどうかをチェックするタスクがあります。私のポリラインは長いので(約50点あります)、タイムアウトがありますので、このチェックは非常に速くなければなりません。ここで私が書いたものである。これらのメソッドのC#ポリラインは自己交差です
public bool IsSelfCrossing()
{
if (size <= 5)
return false;
Point first = body.Points.ElementAt(size - 1);
Point second = body.Points.ElementAt(size - 2);
for (int i = 0; i < size - 3; i++)
{
if (Intersect(first, second, body.Points.ElementAt(i),
body.Points.ElementAt(i + 1)))
{
return true;
}
}
return false;
}
private double Orientation(Point p1, Point p2, Point p3)
{
double dx1 = p2.X - p1.X;
double dy1 = p2.Y - p1.Y;
double dx2 = p3.X - p1.X;
double dy2 = p3.Y - p1.Y;
return dx1 * dy2 - dy1 * dx2;
}
bool Intersect(Point p1, Point p2, Point p3, Point p4)
{
return
Orientation(p1, p3, p4) * Orientation(p2, p3, p4) < 0 &&
Orientation(p3, p1, p2) * Orientation(p4, p1, p2) < 0;
}
問題は、時にはそれが(メソッドはポリラインは自己交差点ですが、そうでないことを私に言っている)失敗したということです。 より良い解決策を教えてください。
あなただけのすべての他の人と最後の行をチェックしていますか? –