private bool IntersectLineSect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, out Point2D result)
{
result = Point2D.Empty;
bool flag = false;
double de = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
if (Math.Abs(de) > SMALL_VALUE)
{
double ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / de;
if ((ub > (-SMALL_VALUE)) && ub < (1 + SMALL_VALUE))
{
flag = true;
}
else
{
flag = false;
}
}
else
{
flag = false;
}
if (flag)
{
if (Math.Abs(x1 - x2) < SMALL_VALUE)
{
result.X = x1;
result.Y = ((y3 - y4) * x1 + x3 * y4 - x4 * y3) / (x3 - x4);
}
else if (Math.Abs(x3 - x4) < SMALL_VALUE)
{
result.X = x3;
result.Y = ((x1 - y2) * x3 + x1 * y2 - x2 * y1) / (x1 - x2);
}
else if (Math.Abs(y1 - y2) < SMALL_VALUE)
{
result.Y = y1;
result.X = ((x3 - x4) * y1 + y3 * x4 - y4 * x3) / (y3 - y4);
}
else if (Math.Abs(y3 - y4) < SMALL_VALUE)
{
result.Y = y3;
result.X = ((x1 - x2) * y3 + y1 * x2 - y2 * x1) / (y1 - y2);
}
else
{
double k1 = (y1 - y2) / (x1 - x2);
double k2 = (y3 - y4) / (x3 - x4);
double b1 = (x2 * y1 - y2 * x1) / (x2 - x1);
double b2 = (x4 * y3 - y4 * x3) / (x4 - x3);
result.X = (b2 - b1) / (k1 - k2);
result.Y = (b1 * k2 - b2 * k1) / (k2 - k1);
}
}
return flag;
}