Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查多边形内的点是否不是非常精确-Javascript_Javascript - Fatal编程技术网

检查多边形内的点是否不是非常精确-Javascript

检查多边形内的点是否不是非常精确-Javascript,javascript,Javascript,我有一个函数,可以在javascript中检查点是否在多边形内,但这个函数不是很精确,因为我有5个多边形相互粘着,当我在多边形1中单击时,该函数告诉我多边形2已被单击,因为它们非常接近 这就是我的功能: function isInsidePolygon(testx, testy, face, nvert){ var coords = getFaceCoords(face); var vertx = [ coords[0][0], coords[1][0], coords[2][

我有一个函数,可以在javascript中检查点是否在多边形内,但这个函数不是很精确,因为我有5个多边形相互粘着,当我在多边形1中单击时,该函数告诉我多边形2已被单击,因为它们非常接近

这就是我的功能:

 function isInsidePolygon(testx, testy, face, nvert){
    var coords = getFaceCoords(face);
    var vertx = [ coords[0][0], coords[1][0], coords[2][0], coords[3][0] ];
    var verty = [ coords[0][1], coords[1][1], coords[2][1], coords[3][1] ]; 

    var i, j, c = false;
    for( i = 0, j = nvert-1; i < nvert; j = i++ ) {
        if( ( ( verty[i] > testy ) != ( verty[j] > testy ) ) &&
            ( testx < ( vertx[j] - vertx[i] ) * ( testy - verty[i] ) / ( verty[j] - verty[i] ) + vertx[i] ) ) {
                c = !c;
        }
    }
    return c;
}
函数isInsidePolygon(testx、testy、face、nvert){
var coords=getFaceCoords(面);
var vertx=[coords[0][0]、coords[1][0]、coords[2][0]、coords[3][0];
var verty=[coords[0][1],coords[1][1],coords[2][1],coords[3][1];
var i,j,c=假;
对于(i=0,j=nvert-1;itesty)!=(verty[j]>testy))&&
(testx<(vertx[j]-vertx[i])*(testy-verty[i])/(verty[j]-verty[i])+vertx[i])){
c=!c;
}
}
返回c;
}
为了更好地解释这个问题,我将发布函数“getFaceCoords()”,请看:

//面部表情协调

function getFaceCoords(face) {
    var coords = new Object();

    // todos os pontos do dente
    var x1y1 = [ 34, 27 ];
    var x2y2 = [ 94, 27 ];
    var x3y3 = [ 94, 89 ];
    var x4y4 = [ 34, 89 ];
    var x5y5 = [ 47, 41 ];
    var x6y6 = [ 82, 41 ];
    var x7y7 = [ 82, 75 ];
    var x8y8 = [ 46, 75 ];

    if (face == 'DISTAL') {
        coords = [ x1y1, x5y5, x8y8, x4y4 ];
    } else if (face == 'LINGUAL') {
        coords = [ x1y1, x2y2, x6y6, x5y5 ];
    } else if (face == 'MESIAL') {
        coords = [ x2y2, x3y3, x7y7, x6y6 ];
    } else if (face == 'VESTIBULAR') {
        coords = [ x3y3, x4y4, x8y8, x7y7 ];
    } else if (face == 'OCLUSAL') {
        coords = [ x5y5, x6y6, x7y7, x8y8 ];
    }

    // Configura os pontos conforme parametrização
    for ( var i = 0; i < coords.length; i++) {
        coords[i][0] = coords[i][0] + startPoint;
        coords[i][1] = coords[i][1] + startPoint;
    }

    return coords;

}
函数getFaceCoords(面){ var coords=新对象(); //托多斯庞托斯多登特酒店 变量x1y1=[34,27]; var x2y2=[94,27]; 变量x3y3=[94,89]; 变量x4y4=[34,89]; 变量x5y5=[47,41]; 变量x6y6=[82,41]; var x7y7=[82,75]; var x8y8=[46,75]; 如果(面=‘远端’){ 坐标=[x1y1,x5y5,x8y8,x4y4]; }else if(面==‘语言’){ 坐标=[x1y1,x2y2,x6y6,x5y5]; }否则如果(面=‘近中’){ 坐标=[x2y2,x3y3,x7y7,x6y6]; }否则,如果(面部=‘前庭’){ 坐标=[x3y3,x4y4,x8y8,x7y7]; }else if(面=='OCLUSAL'){ 坐标=[x5y5,x6y6,x7y7,x8y8]; } //符合参数的配置 对于(变量i=0;i “startPoint”变量的值为“-25”。如果你在笛卡尔平面上画这个多边形,你会看到它非常接近,卡住了,真的


所以唯一的问题是精度差。查看我的多边形,区域5:

你能提供
isInsidePolygon
的输入参数示例吗?快速查看你的代码,看起来不像是在使用,这可能会让你的生活更轻松。问题是:多边形太近了,我必须定义一个“epsilon”获取多边形外的光线,直到我的点。如果我的ε非常大,我可以得到另一个我不应该看到的多边形,这是我的多边形,正好是5。