2011-11-11 152 views
6

我想了解一个点是否在使用Python的SVG路径中。
我将使用的算法是raycasting algorithm将路径转换为多边形

但这个算法我需要有多边形的边,但我已经是对SVG路径的pathdata:

<path 
    d="m 362.26878,978.51017 c 20.15947,-20.15479 23.0826,-25.35876 
     20.51836,-36.58367 -5.62899,-24.66928 -8.85902,-84.94939 
     -4.6845,-87.51832 2.29504,-1.43086 25.27371,2.13445 51.0669,7.87678 
     39.48315,8.80707 50.0611,13.213 66.91495,27.88988 11.39966,9.91685 
     25.01402,17.41113 31.62525,17.41113 12.91547,0 24.69288,-11.04544 
     19.95645,-18.71919 -1.68587,-2.73893 4.50508,-38.63785 13.76077,-79.78795 
     12.41964,-55.21781 16.82552,-85.81829 16.82552,-116.84379 0,-23.12039 … z" /> 

对应于这一形象:

SVG Path example

那么,有没有办法获得路径的两侧?

回答

4

您可以转换的路径为多边形如在我的例子在这里:
http://phrogz.net/svg/convert_path_to_polygon.xhtml

从该页面(在JavaScript)的简单的算法是:

function polygonSampledFromPath(path,samples){ 
    var doc = path.ownerDocument; 
    var poly = doc.createElementNS('http://www.w3.org/2000/svg','polygon'); 

    var points = []; 
    var len = path.getTotalLength(); 
    var step = step=len/samples; 
    for (var i=0;i<=len;i+=step){ 
    var p = path.getPointAtLength(i); 
    points.push(p.x+','+p.y); 
    } 
    poly.setAttribute('points',points.join(' ')); 
    return poly; 
} 

相反取样基础在某些点上,您可能希望简单地在特定距离上进行采样。

这假设您的Python绑定可以访问完整的SVGPathElement DOM Interface

+0

不幸的是我的python绑定没有任何访问SVGPathElement的权限。我会等待更多的答案,同时我会看看我是否可以重新实现python中需要的函数。 – patrick

+0

我已经在javascript中完成了,这是http://patrick.arminio.info/blog/resources/map/map.svg :) 再次感谢Phrogz – patrick

+0

@patrick链接中断 – Georges