【问题标题】:Find the x values along 2 lines if the y coordinates along the lines are known如果沿线的 y 坐标已知,则沿 2 条线求 x 值
【发布时间】:2020-06-12 03:57:09
【问题描述】:

[多边形的所有坐标都是已知的] 这里对于特定的 Y 值,我需要计算填充多边形的 x 范围,但现在我正在搜索 x 的每个点 y 并检查它是否在填充中,任何人都可以提出更好的建议解决方案。

//////////////////////更新/////////////// 在这里,我可以计算多边形的边界框,即 SVG 中的 BBox 。 它具有

的属性

startPositionx,y 和宽度和高度

.** 所以这是我计算算法中所有点的算法。

x=this.startPosition.x;
for(y:this.startPosition.y;y<=(this.startPosition.y+height);y++)
{
If(polygon.isPointInFill(x,y))
{
// return the point is inside the polygon
}
X++;
If(x>(this.startPosition.x+width))
{
x=this.startPosition.x
}

【问题讨论】:

  • 比什么更好的解决方案?
  • 我正在检查多边形中位于 x 和 Y 的最大值和最小值之间的每个点,因此执行需要更多时间,所以如果我们已经知道多边形,我正在寻找解决方案区域 x 范围为 y 时间会减少
  • 是的,我们需要额外的信息,但我可以得到顶点的所有点,我不能用这些信息做
  • 请展示您的解决方案,这样更容易讨论如何改进它,即创建minimal reproducible example。还要标记您正在使用的编程语言。
  • 标记编程语言以吸引合适的人。

标签: angular math svg polygon


【解决方案1】:
 window.onload = function() {
      console.log(paintSvgToCanvas(document.getElementById("ele01")));
    };

    function paintSvgToCanvas(svgEle) {
      let parsePattern = new RegExp(/(M|L)\d+\s\d+/gi);
      let parsePatternXY = new RegExp(/\d+/gi);
      let pointList = [];
      let minX = 0;
      let maxX = 0;
      let minY = 0;
      let maxY = 0;
      switch (svgEle.tagName) {
        case "path":
          let parseData = svgEle.getAttribute("d");
          parseData.match(parsePattern).forEach(function(item, idx) {
            let temp = item.match(parsePatternXY);
            temp[0] = parseFloat(temp[0]);
            temp[1] = parseFloat(temp[1]);
            if (idx === 0) {
              minX = temp[0];
              maxX = temp[0];
              minY = temp[1];
              maxY = temp[1];
            } else {
              if (temp[0] < minX) {
                minX = temp[0];
              } else if (temp[0] > maxX) {
                maxX = temp[0];
              }
              if (temp[1] < minY) {
                minY = temp[1];
              } else if (temp[1] > maxY) {
                maxY = temp[1];
              }
            }
            pointList.push(temp);
          });
        default:
          break;
      }
      return {
        minX: minX,
        maxX: maxX,
        minY: minY,
        maxY: maxY
      };

这是我的代码。获取 svg 路径元素的范围。

【讨论】:

  • 感谢您的回复,此函数将返回路径元素的最大值和最小值,但我需要计算 x 的特定 y 值的最大值和最小值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2022-08-15
  • 2017-03-30
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多