检查多边形内的点是否不是非常精确-Javascript
我有一个函数,可以在javascript中检查点是否在多边形内,但这个函数不是很精确,因为我有5个多边形相互粘着,当我在多边形1中单击时,该函数告诉我多边形2已被单击,因为它们非常接近 这就是我的功能:检查多边形内的点是否不是非常精确-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][
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所以唯一的问题是精度差。查看我的多边形,区域5:你能提供
isInsidePolygon
的输入参数示例吗?快速查看你的代码,看起来不像是在使用,这可能会让你的生活更轻松。问题是:多边形太近了,我必须定义一个“epsilon”获取多边形外的光线,直到我的点。如果我的ε非常大,我可以得到另一个我不应该看到的多边形,这是我的多边形,正好是5。