2011-11-11 42 views
6

Tôi đang cố gắng tìm hiểu xem một điểm có nằm trong đường dẫn SVG hay không bằng Python.
Thuật toán tôi sẽ sử dụng là raycasting algorithm.Chuyển đổi đường dẫn sang đa giác

Nhưng đối với thuật toán này tôi cần phải có các cạnh đa giác, nhưng tất cả tôi có là những pathdata cho đường dẫn svg:

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

tương ứng với hình ảnh này:

SVG Path example

Vì vậy, có cách nào để có được các bên của một con đường?

Trả lời

4

Bạn có thể chuyển đổi một đường dẫn vào một đa giác như trong ví dụ của tôi ở đây:
http://phrogz.net/svg/convert_path_to_polygon.xhtml

Thuật toán đơn giản từ trang đó (trong JavaScript) là:

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

Thay vì lấy mẫu dựa trên một số điểm nhất định, bạn có thể chỉ cần lấy mẫu ở một khoảng cách cụ thể.

Điều này giả định rằng ràng buộc Python của bạn có quyền truy cập vào toàn bộ SVGPathElement DOM Interface.

+0

không may ràng buộc trăn của tôi không có quyền truy cập vào SVGPathElement. Tôi sẽ chờ đợi thêm câu trả lời và trong khi chờ đợi, tôi sẽ xem liệu tôi có thể reimplement các chức năng tôi cần trong python. – patrick

+0

Tôi đã thực hiện nó trong javascript, đây là http://patrick.arminio.info/blog/resources/map/map.svg :) Cảm ơn một lần nữa Phrogz – patrick

+0

@patrick liên kết bị hỏng – Georges

Các vấn đề liên quan