带有JavaScript或jquery的Geometry(CONVOLUTION)函数

我尝试这样做3个月-我需要按如下所示的路线方向创建多边形:

所以我这样写:

directionService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);
        var r = [];
        var z = 0.5;
        var bla = result.routes[0].overview_path;
        for(var i=0 in result.routes[0].overview_path) {
            r.push(new google.maps.LatLng(bla[i].lat()+z, bla[i].lng()-z));
        }
        bla.reverse();
        for(var x=0 in bla) {
            r.push(new google.maps.LatLng(bla[x].lat()-z, bla[x].lng()+z));
        }

        var prva = new google.maps.Polyline({
            path: result.routes[0].overview_path,
            strokeColor: "#00000",
            strokeOpacity: 1.0,
            strokeWeight: 2
        });

        prva.setMap(map);

        druga = new google.maps.Polygon({
            paths: r,
            strokeColor: "#FF0000",
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: "#FF0000",
            fillOpacity: 0.35
        });

        druga.setMap(map);

    } else {
      alert("Directions query failed: " + status);
    }
  });

但是在某些情况下在某些情况下不是很好,所以我的代码会产生以下结果:

坏情况:

好案例:

那么我该如何解决此问题以通过路线方向获得漂亮的多边形呢?有什么想法吗?

如何将其实现到我的代码中:

卷积算法

我的问题有解决方案吗?

除此之外,还有其他方法可以创建我需要的吗?

解决方法:

产生第二张图像的算法在几何上非常简单.假设您有一个x,y数组,我将为您编写一些伪代码:

coordinates = [[x1,y1],[x2,y2] ... [xn,yn]]
leftcoords = []
rightcoords = []

projectionwidth = 1        # How wide the path is

for each coordinate in coordinates:
    pathvector = coordinate(index + 1) - coordinate(index - 1)
    normpathvector = pathvector/(length(pathvector))
    perpvector = projectionwidth*[-normpathvector[1],normpathvector[0]]
    leftcoords.append(coordinate + perpvector)
    rightcoords.append(coordinate - perpvector)

您只需要在路径的末尾注意,只选择前面或后面的坐标,就可以了.您最终得到了三组坐标轨迹.如果您想平滑路径,可以将其设置为平均几个点.

好的,这是可以工作的代码,但是您必须做一些工作以使其平滑以解决路径中的抖动.我的建议是将之前的几个点取平均值,或者将几个点取回.

http://jsbin.com/uTATePe/2/

上一篇:如何在python中计算正交向量?


下一篇:javascript-将整个Object3D / Mesh层次结构合并在一起