多边形边界检查 [英] polygon boundries checking

查看:83
本文介绍了多边形边界检查的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨 在这段代码中,为什么如果distance< = 1,我们说该点(xI,yI)处于边界?
谢谢

 如果(IsInLineBound(seg1,xI,yI)&& IsInLineBound(seg2,xI,yI))
           {
                double  distance1 = Math.Sqrt(Math.Pow((seg1.pX-xI), 2 . 0 )+ Math.Pow((seg1.pY-yI), 2 . double  distance2 = Math.Sqrt(Math.Pow((seg1.qX-xI), 2 . 0 )+ Math.Pow((seg1.qY-yI), 2 .如果(距离1 <  =  1  | | distance2 <  =  1 )
               {
                   返回 ;
               }
               其他
               {
                   返回 ;
               }
           }
           其他
           {
               返回 ;
           }
       }

       私有 布尔 IsInLineBound(段seg, double  xI, double  yI)
       {
           布尔 xI_OK =  false ;
           布尔 yI_OK =  false ;
           //  x绑定检查
           如果(seg.p.X >  seg.q.X)
           {
               如果(xI >  seg.qX&& xI <  seg.pX)
               {
                   xI_OK =  true ;
               }
               其他
               {
                   返回 ;
               }
           }
           其他 如果(seg.pX <  seg.qX)
           {
               如果(xI >  seg.pX& xi <  seg.qX)
               {
                   xI_OK =  true ;
               }
               其他
               {
                   返回 ;
               }
           }
           其他 如果(seg.p.X == seg.q.X)
           {
               如果(xI == seg.p.X)
               {
                   xI_OK =  true ;
               }
               其他
               {
                   返回 ;
               }
           }

           // 绑定检查
           如果(seg.p.Y >  seg.q.Y)
           {
               如果(yI >  seg.qY&&yI <  seg.pY)
               {
                   yI_OK =  true ;
               }
               其他
               {
                   返回 ;
               }
           }
           其他 如果(seg.pY <  seg.qY)
           {
               如果(yI >  seg.pY&&yI <  seg.qY)
               {
                   yI_OK =  true ;
               }
               其他
               {
                   返回 ;
               }
           }
           其他 如果(seg.p.Y == seg.q.Y)
           {
               如果(yI == seg.p.Y)
               {
                   yI_OK =  true ;
               }
               其他
               {
                   返回 ;
               }
           }

           如果(xI_OK和yI_OK)
               返回 返回 ;
       } 

解决方案

我们应该怎么知道?您没有为我们确定足够的代码来发布该代码(不,您不必再发布任何代码).为什么不在调试器下运行它,并尝试找出原因呢?


hi in this code why if distance<=1 we say that the point(xI,yI)is in bound?
thank you

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;
       }

解决方案

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?


这篇关于多边形边界检查的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆