python - 将路径转换为多边形

标签 python svg raycasting

我正在尝试使用 Python 确定一个点是否在 SVG 路径中。
我将使用的算法是 raycasting algorithm .

但是对于这个算法我需要有多边形边,但我所拥有的只是 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" />

对应于这张图片:

SVG Path example

那么,有没有办法得到路径的边呢?

最佳答案

您可以将路径转换为多边形,如我此处的示例所示:
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 绑定(bind)可以访问完整的 SVGPathElement DOM Interface .

关于python - 将路径转换为多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091983/

相关文章:

python - 特定区域的 Foursquare field

python - 在 Django Facebook 中注销?

java - 使用 SVG Salamander 进行 SVG 动画 (Java 1.8)

c# - 偏移量的光线转换

java - 射线平方交集

javascript - Three.js raycaster 可以与一个组相交吗?

python - Pandas 数据帧值从日期时间更改为时间戳

python - 使用python在单色图像中围绕 Blob 的矩形​​边界框

javascript - 我的 svg 路径使用 d3 进行像素化

html - 使用 CSS 操作外部 svg 文件样式属性