博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【D3.js 学习总结】23、D3几何 - 四叉树
阅读量:6243 次
发布时间:2019-06-22

本文共 1555 字,大约阅读时间需要 5 分钟。

d3.geom.quadtree

四叉树也被称为Q树(Q-Tree)。四叉树广泛应用于图像处理、空间数据索引、2D中的快速碰撞检测、存储稀疏数据等,对游戏编程,这会很有用。

四叉树(Q-Tree)是一种树形数据结构。四叉树的定义是:它的每个节点下至多可以有四个子节点,通常把一部分二维空间细分为四个象限或区域并把该区域里的相关信息存入到四叉树节点中。

四叉树的每一个节点代表一个矩形区域(如上图黑色的根节点代表最外围黑色边框的矩形区域),每一个矩形区域又可划分为四个小矩形区域,这四个小矩形区域作为四个子节点所代表的矩形区域。

通过一个示例来展示。

1、数据

var width = 500,    height = 500;// 生成一份模拟数据,表示图上的10个点坐标var dataset = d3.range(10).map(function() {  return [Math.random() * width, Math.random() * height];});

2、数据转换

var quadtree = d3.geom.quadtree()    .extent([[0, 0], [width, height]])var root = quadtree(dataset);var data = [];// 遍历四叉树中的每个节点,获得rect的坐标数据root.visit(function(node, x1, y1, x2, y2) {  node.x1 = x1;  node.y1 = y1;  node.x2 = x2;  node.y2 = y2;  data.push(node);});

通过quadtree转换后的数据如图所示:

转换后的数据都在nodes中,为了生成矩形图,我们需要用root.visit方法再次将数据做一层转换,最终用来生成SVG的数据如下:

3、绘制图形

生成SVG容器

var svg = d3.select('body').append('svg')      .attr('width',width)      .attr('height',height)

颜色比例尺

var color = d3.scale.category10();

生成矩形

var rect = svg.selectAll("rect")    .data(data)    .enter()    .append("rect")    .attr("fill", "none")    .attr('stroke',function(d,i){      return color(i)    })    .attr('stroke-width',1)    .attr("x", function(d) { return d.x1; })    .attr("y", function(d) { return d.y1; })    .attr("width", function(d) { return d.x2 - d.x1; })    .attr("height", function(d) { return d.y2 - d.y1; });

生成随机数据中的坐标点

var point = svg.selectAll("circle")    .data(dataset)    .enter()    .append("circle")    .attr("cx", function(d) { return d[0]; })    .attr("cy", function(d) { return d[1]; })    .attr("r", 3);

转载地址:http://psvia.baihongyu.com/

你可能感兴趣的文章
lamp
查看>>
2-12 Linux一些基础练习的实战资料整理
查看>>
在线图片处理的开源项目或开放平台
查看>>
移动设备硬件统计
查看>>
CoreData
查看>>
【step by step构建轻量级web框架】轻量级框架jbeer预览
查看>>
Spring2.5整合ActiveMQ 5.2
查看>>
浅析Struts1和Struts2的Action线程安全问题
查看>>
java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I
查看>>
HDU 2017
查看>>
yaml文件java的实现
查看>>
NO.142 执行用例,并提交bug,查看报表统计。
查看>>
LVM实现原理(pv,vg,lv,pe,le)
查看>>
我的友情链接
查看>>
cisco交换机IP/MAC***防范
查看>>
8、Python —— 输入输出
查看>>
我的友情链接
查看>>
[转]Shell 统计PV, UV ,独立IP
查看>>
Flash网页甘特图控件
查看>>
yii2 csrf验证以及token管理
查看>>