放射線アルゴリズムのjs実現

2010 ワード

放射線アルゴリズムのjs実現
/**
 *     ,   (pointX,pointY)      polygon 
 **/
function isInPolygon(pointX, pointY, polygon) {
    var count = 0;
    for(var i = 0; i < polygon.length; i++) {
        if(pointX < max(polygon[i][0], polygon[i][2])) {
            if(min(polygon[i][1], polygon[i][3]) < pointY &&
                pointY <= max(polygon[i][1], polygon[i][3])) {
                if(pointX > min(polygon[i][0], polygon[i][2])) {
                    var k1 = (polygon[i][3] - polygon[i][1]) / (polygon[i][2] - polygon[i][0]);
                    var b1 = polygon[i][1] - k1 * polygon[i][0];
                    var b2 = pointY;
                    var x0 = (b2 - b1) / k1;
                    if(x0 > pointX) {
                        count++;
                    }
                } else {
                    count++;
                }
            }
        }
    };
    return count % 2 != 0;
}