Javascript KineticJS获得所有交叉点

Javascript KineticJS获得所有交叉点,javascript,kineticjs,Javascript,Kineticjs,不久前我还在和KineticJS一起工作,我遇到了一个问题 我可以画圆(白色、蓝色和红色),然后沿着蓝色圆的路径画一个多边形 但是我如何找到坐标,或者至少是关于红色圆圈的一些东西。也就是说,关于那些属于以下多边形的人 我尝试使用getcrossion,但我不明白它返回什么。对不起,我的英语不好。提前谢谢 从您的图片中,我假设所有红点和蓝点都位于网格上 这意味着任何点的x和y都被夹紧到该栅格(轴对齐) 我进一步假设蓝点定义了多边形的外部 那么您想看看该多边形内是否有任何特定的红点吗? 根据这些假设

不久前我还在和KineticJS一起工作,我遇到了一个问题

我可以画圆(白色、蓝色和红色),然后沿着蓝色圆的路径画一个多边形

但是我如何找到坐标,或者至少是关于红色圆圈的一些东西。也就是说,关于那些属于以下多边形的人

我尝试使用
getcrossion
,但我不明白它返回什么。对不起,我的英语不好。提前谢谢


从您的图片中,我假设所有红点和蓝点都位于网格上

这意味着任何点的x和y都被夹紧到该栅格(轴对齐)

我进一步假设蓝点定义了多边形的外部

那么您想看看该多边形内是否有任何特定的红点吗?

根据这些假设,如果多边形的4条垂直和水平边上都有蓝点包围,则任何红点都位于多边形内部

  • 红点左边的蓝点

    blueY==redY && blueX<redX
    
  • 蓝点在红点之上

    blueX==redX && blueY<redY
    
首先,您需要能够获取所有的蓝点,因此当您创建蓝点时,请确保为它们指定一个blue的name属性

name:"blue",
然后,您可以使用此功能测试任何红点,该功能检查红点是否被蓝点包围:

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);
}
然后使用此调用获取多边形中所有红色对象的数组

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);
}
函数列表ofredsinpolygon(){
var reds=layer.get('.red').toArray();
var redsInsidePolygon=[];

对于(var i=0;i您已经真正理解了这个问题,但我需要一些其他东西,我想是的。我有所有的蓝点,我需要调用一个函数来检查是否有红点,您已经创建了一个函数来检查点(红色)在多边形内,但我如何向她发送红色点?我在回答中添加了显示如何获取多边形中所有红色对象的数组。
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);
}