Click here to Skip to main content
15,886,872 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi in this code why if distance<=1 we say that the point(xI,yI)is in bound?
thank you
C#
if (IsInLineBound(seg1, xI, yI) && IsInLineBound(seg2, xI, yI))
           {
               double distance1 = Math.Sqrt(Math.Pow((seg1.p.X - xI), 2.0) + Math.Pow((seg1.p.Y - yI), 2.0));
               double distance2 = Math.Sqrt(Math.Pow((seg1.q.X - xI), 2.0) + Math.Pow((seg1.q.Y - yI), 2.0));

               if (distance1 <= 1 || distance2 <= 1)
               {
                   return false;
               }
               else
               {
                   return true;
               }
           }
           else
           {
               return false;
           }
       }

       private bool IsInLineBound(Segment seg, double xI, double yI)
       {
           bool xI_OK = false;
           bool yI_OK = false;
           // x bound check
           if (seg.p.X > seg.q.X)
           {
               if (xI > seg.q.X && xI < seg.p.X)
               {
                   xI_OK = true;
               }
               else
               {
                   return false;
               }
           }
           else if (seg.p.X < seg.q.X)
           {
               if (xI > seg.p.X && xI < seg.q.X)
               {
                   xI_OK = true;
               }
               else
               {
                   return false;
               }
           }
           else if (seg.p.X == seg.q.X)
           {
               if (xI == seg.p.X)
               {
                   xI_OK = true;
               }
               else
               {
                   return false;
               }
           }

           // y bound check
           if (seg.p.Y > seg.q.Y)
           {
               if (yI > seg.q.Y && yI < seg.p.Y)
               {
                   yI_OK = true;
               }
               else
               {
                   return false;
               }
           }
           else if (seg.p.Y < seg.q.Y)
           {
               if (yI > seg.p.Y && yI < seg.q.Y)
               {
                   yI_OK = true;
               }
               else
               {
                   return false;
               }
           }
           else if (seg.p.Y == seg.q.Y)
           {
               if (yI == seg.p.Y)
               {
                   yI_OK = true;
               }
               else
               {
                   return false;
               }
           }

           if (xI_OK && yI_OK)
               return true;
           return false;
       }
Posted
Updated 22-Dec-11 5:48am
v2

1 solution

How are we supposed to know? You didn't post enough of the code for us to determine that (and no, you don't have to post any more code). Why don't you run it under the debugger and try to find out why it's doing what it's doing?
 
Share this answer
 
Comments
minooshi 22-Dec-11 11:59am    
private bool IsIntersected(Segment seg1 ,Segment seg2)
{
double xI, yI;
double a1, a2, b1, b2;

if (((seg1.p.X - seg1.q.X) == (seg2.p.X - seg2.q.X)) && (seg2.p.X - seg2.q.X) == 0)
{
// parallel lines
return false;
}
if ((seg1.p.X - seg1.q.X) == 0)
{
a2 = (double)(seg2.p.Y - seg2.q.Y) / (double)(seg2.p.X - seg2.q.X);
b2 = (double)seg2.p.Y - (a2 * seg2.p.X);

xI = seg1.p.X;
yI = a2 * xI + b2;
}
else if ((seg2.p.X - seg2.q.X) == 0)
{
a1 = (double)(seg1.p.Y - seg1.q.Y) / (double)(seg1.p.X - seg1.q.X);
b1 = (double)seg1.p.Y - (a1 * seg1.p.X);

xI = seg2.p.X;
yI = a1 * xI + b1;
}
else
{
a1 = (double)(seg1.p.Y - seg1.q.Y) / (double)(seg1.p.X - seg1.q.X);
a2 = (double)(seg2.p.Y - seg2.q.Y) / (double)(seg2.p.X - seg2.q.X);

b1 = (double)seg1.p.Y - (a1 * seg1.p.X);
b2 = (double)seg2.p.Y - (a2 * seg2.p.X);

// two lines are parallel and there is no intersection
if (a1 == a2)
{
return false;
}
else
{
xI = (b2 - b1) / (a1 - a2);
yI = (a1 * xI) + b1;
}
}

// intersection on line bound checking
if (IsInLineBound(seg1, xI, yI) && IsInLineBound(seg2, xI, yI))
{
double distance1 = Math.Sqrt(Math.Pow((seg1.p.X - xI), 2.0) + Math.Pow((seg1.p.Y - yI), 2.0));
double distance2 = Math.Sqrt(Math.Pow((seg1.q.X - xI), 2.0) + Math.Pow((seg1.q.Y - yI), 2.0));

if (distance1 <= 1 || distance2 <= 1)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}

private bool IsInLineBound(Segment seg, double xI, double yI)
{
bool xI_OK = false;
bool yI_OK = false;
// x bound check
if (seg.p.X > seg.q.X)
{
if (xI > seg.q.X && xI < seg.p.X)
{
xI_OK = true;
}
else
{
return false;
}
}
else if (seg.p.X < seg.q.X)
{
if (xI > seg.p.X && xI < seg.q.X)
{
xI_OK = true;
}
else
{
return false;
}
}
else if (seg.p.X == seg.q.X)
{
if (xI == seg.p.X)
{
xI_OK = true;
}
else
{
return false;
}
}

// y bound check
if (seg.p.Y > seg.q.Y)
{
if (yI > seg.q.Y && yI < seg.p.Y)
{
yI_OK = true;
}
else
{
return false;
}
}
else if (seg.p.Y < seg.q.Y)
{
if (yI > seg.p.Y && yI < seg.q.Y)
{
yI_OK = true;
}
else
{
return false;
}
}
else if (seg.p.Y == seg.q.Y)
{
if (yI == seg.p.Y)
{
yI_OK = true;
}
else
{

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900