2013-07-30 52 views
0

我在KineticJS工作不久前,我有一個問題。KineticJS得到所有的交叉點

我可以繪製圓圈(白色,藍色和紅色),然後我會沿着藍色圓圈的路徑繪製多邊形。

但是我如何找到座標,或者至少是關於紅圈的內容。也就是說,那些屬於以下多邊形的人。

我試過使用getIntersection但我不明白它返回什麼。對不起,我的英語不好。提前致謝!!

http://imageshack.us/scaled/thumb/42/7gok.jpg

回答

0

我從你的照片,所有的紅色和藍色的點定位在網格承擔。

這意味着,任何點的x和y被夾緊到該網格(軸線對齊)

我進一步假定藍點定義的多邊形的外部。

所以你想看看是否有任何特定的紅點是在該多邊形內?

根據這些假設,任何紅點是你的多邊形內,如果它是由藍點包圍所有4個垂直和水平雙方

  • 藍點至左紅點

    blueY==redY && blueX<redX 
    
  • 紅點右邊的藍點

    blueY==redY && blueX>redX 
    
  • 藍點上方的紅點

    blueX==redX && blueY<redY 
    
  • 藍點下方紅點

    blueX==redX && blueY>redY 
    

首先,你需要能夠得到所有的藍色小點,所以當你創建藍點一定要給它們分配一個藍色的名稱屬性

name:"blue", 

然後你可以使用這個函數測試任何紅點tha牛逼檢查該紅點是由藍點包圍:

function isRedInPolygon(red){ 

    // get XY of the red circle 
    var redX=red.getX(); 
    var redY=red.getY(); 

    // set up vars for results 
    // these vars become true when blue dots are 
    // directly up, down, left and right of the red dot 
    var up=false; 
    var down=false; 
    var left=false; 
    var right=false; 

    // get all the blue dots into an array 
    var blues=layer.get('.blue').toArray(); 

    for(var j=0;j<blues.length;j++){ 

     // get the XY of this blue 
     var blue=blues[j]; 
     blueX=blues[j].getX(); 
     blueY=blues[j].getY(); 

     // test left/right 
     if(blueX==redX){ 
      // left 
      if(blueY<redY){ up=true; } 
      // right 
      if(blueY>redY){ down=true; } 
     } 

     // test up/down 
     if(blue.Y==red.Y){ 
      if(blueX<redX){ left=true; } 
      if(blueX>redX){ right=true; } 
     } 
    } 

    // return true if this red dot is surrounded 
    // by blue dots on all 4 sides 
    return(up && down && left && right); 
} 

要獲得所有紅色對象的列表多邊形

首先裏面,名字=「紅色」分配給所有紅點。

name:"red", 

然後使用此調用來獲取多邊形中所有紅色對象的數組。

var redsInside = listOfRedsInPolygon(); 

使用此功能:

function listOfRedsInPolygon(){ 

    var reds=layer.get('.red').toArray(); 

    var redsInsidePolygon=[]; 

    for(var i=0;i<reds.length;i++){ 

     if(isRedInPolygon(reds[i])){ 
      redsInsidePolygon.push(reds[i]); 
     } 
    } 

    return(redsInsidePolygon); 
} 

聲明:我沒有測試此代碼...這可能需要一些調整。

+0

你已經真正理解了這個問題,但我需要別的東西,我認爲是這樣。我有所有的藍點,我需要調用一個函數來檢查是否有紅點,你已經創建了一個函數來檢查一個點(紅色)是否在多邊形內,但是如何將她的點發送給紅點? – webenter

+0

我已添加到我的答案中,以顯示如何獲取多邊形中所有紅色對象的數組。 – markE

+0

謝謝你的回答,它幫助了我! – webenter