任意多个的凸包以及具体的需求

本文介绍了如何通过计算凸包来包裹路口和路段区域的方法,并讨论了如何将这些区域的图形进行美观放大的技巧。

刚刚有一个需求,就是想要把路口和路段的区域包裹起来,并且按照它的图形的形状往外扩大一些。(为了美观)

首先是一连串点坐标的凸包的计算。

先找到坐标点中x轴最小的一个点,这个一定是这个多边形的一个顶点。然后这个点a和任意一个点的所构成的向量,其他的点都在它的一侧,那么另一个点b也是多边形的一个顶点。否则,则不是。然后将b与剩下的任意一个点构成的向量,判断其他点是否在同一侧。这样就可以顺序得到所有多边形的点。

这就是凸包。

图形扩大的问题。

首先先找到这个多边形的中心。这个中心与每个顶点的向量放大固定倍数。

https://blog.csdn.net/slzs_zyt/article/details/81068783

 

      const waveScaleY = d3.scaleLinear().range([0, waveHeight]).domain([0, 1]);
      const data = [];
      console.log(waveClipCount, 'waveClipCount')
      for (let i = 0; i <= 40 * waveClipCount; i += 1) {
        data.push({ x: i / (40 * waveClipCount), y: i / 40 });
      }

      // The clipping wave area.
      const clipArea = d3
        .area()
        .x((d: any) => waveScaleX(d.x))
        .y0((d: any) => {
          return (
            waveScaleY(
              Math.sin(
                Math.PI * 2 * waveOffset * -1 +
                Math.PI * 2 * (1 - waveCount) +
                d.y * 2 * Math.PI
              )
            ) - fillCircleRadius
          );
        })
        .y1((d: any) => fillCircleRadius + waveHeight);
        console.log(fillCircleRadius + waveHeight,'fillCircleRadius + waveHeight');
      const waveGroup = g
        .append('defs')
        .append('clipPath')
        .attr('id', `clipWave${area.region_code}`);
      const wave = waveGroup
        .append('path')
        .datum(data)
        .attr('d', clipArea)
        .attr('T', 0);

      // The inner circle with the clipping wave attached.
      const fillCircleGroup = g
        .append('g')
        .attr('clip-path', `url(#clipWave${area.region_code})`);
      fillCircleGroup
        .append('circle')
        .attr('cx', 0)
        .attr('cy', 0)
        .attr('r', fillCircleRadius)
        .style('fill', '#5290FF');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值