2011-11-11 2 views
6

포인트가 파이썬을 사용하여 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

(자바 스크립트) 해당 페이지에서 간단한 알고리즘 :

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; 
} 

대신 샘플링을 기반으로 일정한 수의 지점에서 특정 거리에서 샘플링하기를 원할 수 있습니다.

여기서는 파이썬 바인딩이 전체 SVGPathElement DOM Interface에 대한 액세스 권한이 있다고 가정합니다.

+0

불행히도 내 파이썬 바인딩에는 SVGPathElement에 대한 액세스 권한이 없습니다. 나는 더 많은 답변을 기다리고 그 동안 파이썬에서 필요한 함수를 다시 구현할 수 있는지를 살펴볼 것이다. – patrick

+0

나는 자바 스크립트로 해왔다. http://patrick.arminio.info/blog/resources/map/map.svg이다. 감사합니다. Phrogz – patrick

+0

@patrick 링크가 깨졌습니다. – Georges

관련 문제