2011-11-11 22 views
6

मैं यह समझने की कोशिश कर रहा हूं कि कोई बिंदु पाइथन का उपयोग करते हुए एसवीजी पथ में है या नहीं।
मैं जो एल्गोरिदम उपयोग करूंगा वह 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

कि पेज (जावास्क्रिप्ट में) से सरल एल्गोरिथ्म है:

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

नमूने के बजाय आधारित अंक की एक निश्चित संख्या पर, आप बस एक विशेष दूरी पर नमूना करना चाह सकते हैं।

यह मानता है कि आपके पायथन बाध्यकारी के पास पूर्ण तक पहुंच है।

+0

दुर्भाग्य से मेरे पायथन बाध्यकारी के पास SVGPathElement तक कोई पहुंच नहीं है। मैं और अधिक उत्तरों की प्रतीक्षा करूंगा और इस बीच में मैं देखूंगा कि क्या मैं पाइथन में आवश्यक फ़ंक्शन को पुन: कार्यान्वित कर सकता हूं। – patrick

+0

मैंने इसे जावास्क्रिप्ट में किया है, यहां यह http://patrick.arminio.info/blog/resources/map/map.svg है :) धन्यवाद फिर से Phrogz – patrick

+0

@patrick लिंक टूटा हुआ है – Georges