2011-11-11 10 views
6

ポイントがPythonを使ってSVGパスにあるかどうかを調べようとしています。
私が使用するアルゴリズムはraycasting algorithmです。 パスをポリゴンに変換する

しかし、私は、ポリゴンの面を持っている必要があり、このアルゴリズムの

が、私が持っているすべては、SVGパスのpathdataです:

SVG Path example

:この画像に対応する

<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" /> 

パスの側面を取得する方法はありますか?

答えて

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

関連する問題