создать плойгон counding shape javascript d3 - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть ряд точек на графике, который выглядит примерно так: enter image description here

, и я хотел бы создать вокруг них ограничивающий многоугольник, например: enter image description here

Я нашел довольно хорошее объяснение того, как это сделать, в http://bl.ocks.org/gka/1552725 Вычислить ограничивающий многоугольник альфа-формы из триангуляции Делоне но это использует версию 3 d3, и я использую версию 4. Мне удалось реализовать некоторые из примеров с использованием v4, но я не могу понять, как отфильтровать треугольники. До сих пор я справился с этим: enter image description here

Буду признателен за любую помощь.Мой код выглядит так:

vertices = vertices.map((d) => {
        //console.log(d)
        return [xScale(d[0]),yScale(d[1])]
    })
    let alpha = 30

    let dsq = function(a,b) {
        var dx = a[0]-b[0], dy = a[1]-b[1];
        return dx*dx+dy*dy;
    }
    let asq = alpha*alpha

    vertices = vertices.filter(function(t) {
        return dsq(t[0],t[1]) < asq && dsq(t[0],t[2]) < asq && dsq(t[1],t[2]) < asq;
    })

    let outline = Delaunay.from(vertices)
    //let { points, triangles } = outline;

    parent.append('path')
        .attr('fill', '#FCE6D6')
        .attr('opacity',0.5)
        .attr('stroke', '#000000')
        .attr('d', outline.render());

Изменение последней строки на:

.attr('d', outline.renderHull());

даст мне выпуклую оболочку формы, но это вогнутая оболочка, которую я пытаюсьСоздайте.Я предполагаю, что я фильтрую вершины перед передачей их константе контура через Delauny.from (вершины).Я пробовал это, используя уравнения в примере v3, связанном выше, но это просто удаляет все вершины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...