【D3.js 学习总结】25、D3几何 - 凸包

d3.geom.hull

hull函数用于计算指定坐标点的外围边界,用一个场景来描述,某片草原上有100只羊在不同的位置,我们需要将羊群所在的草场圈起来,那只要将羊群最外围的羊通过一根线连起来就可以实现,同理,hull就是用来计算这个外围边界的方法;

通过一个示例来展示。

1、数据,随机生成100只羊的坐标

var width = 500;
var height = 500;

var randomX = d3.random.normal(width / 2, 60);
var randomY = d3.random.normal(height / 2, 60);
var dataset = d3.range(100).map(function() {
  return [randomX(), randomY()];
});

2、数据转换

var data = d3.geom.hull(dataset);

转换前的数据,如图所示:

转换后的数据,只保留了边界上的点,如图所示:

3、绘制图形

生成SVG容器
var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);
生成羊群边界路径,注意这里用的是datum方法,因为这里不需要遍历数据
var hull = svg.append("path")
    .datum(data)
    .attr({
      d: function(d){
        return 'M'+ d.join('L') +'Z';
      },
      fill: 'steelblue',
      stroke: '#000',
    });
生成羊群坐标点,注意这里的数据是原始坐标数据dataset
var circle = svg.selectAll('circle')
  .data(dataset)
  .enter()
  .append('circle')
  .attr({
    r: 3,
    fill: '#fff',
    stroke: '#000',
    cx: function(d){
      return d[0];
    },
    cy: function(d){
      return d[1];
    }
  })

查看在线演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值