Javascript:如何确定 SVG 路径绘制方向?

标签 javascript svg

我正在尝试确定 SVG 路径绘制方向。我正在做这样的事情

var length = path.getTotalLength();
var horizontal = path.getPointAtLength(length/4).x - path.getPointAtLength(0).x;
var vertical = path.getPointAtLength(length/4).y - path.getPointAtLength(0).y;

然后对这些值 horizo​​ntal > 0vertical > 0 进行一些比较,但在我看来,上述想法并不是很成功。

我的问题是:是否有任何东西可以用来确定绘图方向或一些内置的 SVG 方法/选项?

谢谢

最佳答案

使用 Math.atan2(yDiff, xDiff) 获取两个引用点之间的 Angular 。两个视觉上相同但方向相反的形状将有 pi 的 Angular 差。

请注意您的两个引用点不幸是同一点的边缘情况。不太可能,尤其是考虑到舍入误差,但请记住这一点,以防您需要它坚如磐石。

var paths = document.getElementsByTagName("path");
for (var pathNum = 0; pathNum < paths.length; pathNum += 1) {
  var path = paths[pathNum];
  var message = document.createElement('p');
  message.innerHTML = "path #" + pathNum + ": angle = " + pathDir(path);
  document.body.appendChild(message);
};

function pathDir(path) {
  var length = path.getTotalLength();
  var pt14 = path.getPointAtLength(1/4 * length);
  var pt34 = path.getPointAtLength(3/4 * length);
  var angle = Math.atan2(pt14.y - pt34.y, pt14.x - pt34.x);
  return angle;
}
<svg width="300" height="80">
  <g fill="none" stroke="black" stroke-width="4">
    <path d="M 10,10 C 90,10 -30,60  50,60Z"/>
    <path d="M110,10 C190,10  70,60 150,60Z"/>
    <path d="M250,60 C170,60 290,10 210,10Z"/>
  </g>
</svg>
<div></div>

关于Javascript:如何确定 SVG 路径绘制方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35560989/

相关文章:

javascript - React-data-grid - 使用全局变量更改单元格值

Javascript onclick 只工作一次

css - 在 SVG 中,有一种方法可以将不同的样式表 (CSS) 应用于每个 <use> 实例

python - 从数据库循环 svg 矩形

javascript - IE10/IE11 中 SVG 的 CSS 动画

javascript - 这个奇怪的 setTimeout 语法是什么?

javascript - 使用ajax调用清空div

javascript - mysql 检索数据,为每个数据附加一个新行

html - Svg 剪辑路径在 Firefox、IE 和 Opera 中不起作用

javascript - 使用 JS 遍历 SVG