2017-02-22 37 views
0

当我试图检查特定点是否在多边形内或使用多边形的“包含”功能它给出了错误的输出。多边形“包含”功能在java不工作

为什么“包含”函数返回假值就算点(16,14)是多边形....

import java.awt.Polygon; 
    import java.util.Scanner; 

    public class ACircleandaSquare 
    { 
     Scanner sc=new Scanner(System.in); 
     int xc,yc,r,w,h,x1,y1,x3,y3,x2,y2,x4,y4,m1,m2,vb1,vb2,vd1,vd2,cm1,cm2; 

     void getData() 
     { 
      w=sc.nextInt(); 
      h=sc.nextInt(); 
      xc=sc.nextInt(); 
      yc=sc.nextInt(); 
      r=sc.nextInt(); 
      x1=sc.nextInt(); 
      y1=sc.nextInt(); 
      x3=sc.nextInt(); 
      y3=sc.nextInt();  

      m1=((x3+x1)/2); 
      m2=((y3+y1)/2); 
      cm1=x3-m1; 
      cm2=y3-m2; 
      vb1=cm2; 
      vb2=-cm1; 
      vd1=-cm2; 
      vd2=cm1; 
      x2=(m1+vb1); 
      y2=(m2+vb2); 
      x4=(m1+vd1); 
      y4=(m2+vd2);  
     } 

     void perform() 
     { 
      int x[]={x1,x2,x3,x4}; 
      int y[]={y1,y2,y3,y4}; 
      Polygon P=new Polygon(x,y,4); 

      if(P.contains(16, 14)) 
      { 
       System.out.println("yes"); 
      } 
      else 
      { 
       System.out.println("no"); 

      } 
      for(int i=0;i<h;i++) 
      { 
       for(int j=0;j<w;j++) 
       { 
        if(isInside(j,i) || P.contains(j, i)) 
        { 
         System.out.print("#"); 
        } 
        else 
        { 
         System.out.print("."); 
        }     
       } 
       System.out.println(); 
      } 
     } 



     boolean isInside(int i,int j) 
     { 
      int z=((i-xc)*(i-xc))+(j-yc)*(j-yc); 
      if(z<=(r*r)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     public static void main(String[] z) 
     { 
      ACircleandaSquare A1=new ACircleandaSquare(); 
      A1.getData(); 
      A1.perform();  
     } 
    } 

为什么答案是打印为“无”,而不是肯定的...?

+0

请向我们展示你的完整的Polygon类? –

+1

也许边上的点被定义为不在多边形内? – IQV

+0

那么为什么点(8,14),(9,13)....给出的答案为“真”.. –

回答

4

java.awt.Polygon#contains(int, int)

文件确定指定的坐标是否这个多边形。

既然你在边界上,这不在多边形内。

编辑:

这是形状内部性说明:

的点被认为是位于一个形状内当且仅当:

内部性的

定义

  • 它完全位于形状边界内或
  • 它恰好位于形状边界上,紧挨着增加的X方向上的点的空间完全位于边界内,或者它完全位于水平边界线段上,并且紧挨着增加点中的点Y方向在边界内。

的解释是,

  • 它恰好位于所述形状边界于:真
  • 紧邻在增加X方向的点的空间是完全的边界内:假

您的值:

int[] x = {16,12,8,12} 

下一个x值是12,所以递减。与8,价值开始增加,所以这将匹配

+0

,然后它给了我“假”的答案,即“否” –

+0

@bhaskartalla,对那部分抱歉,删除它真的很快;)我不明白在新的编辑correcty定义。 – AxelH

+0

然后我应该做些什么改变来正确运行这个代码 –