voronoi.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import constant from "./constant";
  2. import {x as pointX, y as pointY} from "./point";
  3. import Diagram, {epsilon} from "./Diagram";
  4. export default function() {
  5. var x = pointX,
  6. y = pointY,
  7. extent = null;
  8. function voronoi(data) {
  9. return new Diagram(data.map(function(d, i) {
  10. var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];
  11. s.index = i;
  12. s.data = d;
  13. return s;
  14. }), extent);
  15. }
  16. voronoi.polygons = function(data) {
  17. return voronoi(data).polygons();
  18. };
  19. voronoi.links = function(data) {
  20. return voronoi(data).links();
  21. };
  22. voronoi.triangles = function(data) {
  23. return voronoi(data).triangles();
  24. };
  25. voronoi.x = function(_) {
  26. return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), voronoi) : x;
  27. };
  28. voronoi.y = function(_) {
  29. return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), voronoi) : y;
  30. };
  31. voronoi.extent = function(_) {
  32. return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
  33. };
  34. voronoi.size = function(_) {
  35. return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
  36. };
  37. return voronoi;
  38. }