2011-11-11 150 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