Найти значения x вдоль 2 строк, если известны координаты y вдоль линий - PullRequest
0 голосов
/ 28 февраля 2020

enter image description here

[Здесь известны все координаты многоугольника] для конкретного значения Y, мне нужно вычислить диапазон x, который находится в заливке многоугольника, но теперь я ищу каждую точку x для y и проверяю, заполнена она или нет, может кто-нибудь предложить лучшее решение для этого.

/////////////// ///////////// ОБНОВЛЕНИЕ ////////////////// enter image description here Здесь я могу вычислить ограничивающую рамку для полигон, так что BBox в SVG. Он имеет атрибуты

startPositionx, y, width и height

. ** Итак, вот мой алгоритм для вычисления всех точек алгоритма.

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
}

1 Ответ

0 голосов
/ 28 февраля 2020
 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.

...