2017-02-22 39 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

然後我應該做些什麼改變來正確運行這個代碼 –