index.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>IsoBands example</title>
  6. <script src="https://d3js.org/d3.v3.min.js"></script>
  7. <script src="../../dist/marchingsquares.js"></script>
  8. </head>
  9. <body>
  10. <div id="isobands"></div>
  11. <script>
  12. var intervals = [0, 4.5, 9, 13.5, 18];
  13. var data = [
  14. [18, 13, 10, 9, 10, 13, 18],
  15. [13, 8, 5, 4, 5, 8, 13],
  16. [10, 5, 2, 1, 2, 5, 10],
  17. [9, 4, 1, 12, 1, 4, 9],
  18. [10, 5, 2, 1, 2, 5, 10],
  19. [13, 8, 5, 4, 5, 8, 13],
  20. [18, 13, 10, 9, 10, 13, 18],
  21. [18, 13, 10, 1, 10, 13, 18]
  22. ];
  23. var xs = d3.range(0, data[0].length);
  24. var ys = d3.range(0, data.length);
  25. var isoBands = [];
  26. for (var i = 1; i < intervals.length; i++) {
  27. var lowerBand = intervals[i - 1];
  28. var upperBand = intervals[i];
  29. var band = MarchingSquaresJS.isoBands(
  30. data,
  31. lowerBand,
  32. upperBand - lowerBand,
  33. {
  34. successCallback: function (band) {
  35. console.log('Band' + i + ':', band)
  36. },
  37. verbose: true
  38. }
  39. );
  40. isoBands.push({"coords": band, "level": i, "val": intervals[i]});
  41. }
  42. drawLines('#isobands', isoBands, intervals);
  43. // helper function
  44. function drawLines(divId, lines, intervals) {
  45. var marginBottomLabel = 0;
  46. var width = 300;
  47. var height = width * (ys.length / xs.length);
  48. var xScale = d3.scale.linear()
  49. .range([0, width])
  50. .domain([Math.min.apply(null, xs), Math.max.apply(null, xs)]);
  51. var yScale = d3.scale.linear()
  52. .range([0, height])
  53. .domain([Math.min.apply(null, ys), Math.max.apply(null, ys)]);
  54. var colours = d3.scale.linear().domain([intervals[0], intervals[intervals.length - 1]])
  55. .range([d3.rgb(0, 0, 0),
  56. d3.rgb(200, 200, 200)]);
  57. var svg = d3.select(divId)
  58. .append("svg")
  59. .attr("width", width)
  60. .attr("height", height + marginBottomLabel);
  61. svg.selectAll("path")
  62. .data(lines)
  63. .enter().append("path")
  64. .style("fill", function (d) {
  65. return colours(d.val);
  66. })
  67. .style("stroke", "black")
  68. .style('opacity', 1.0)
  69. .attr("d", function (d) {
  70. var p = "";
  71. d.coords.forEach(function (aa) {
  72. p += (d3.svg.line()
  73. .x(function (dat) {
  74. return xScale(dat[0]);
  75. })
  76. .y(function (dat) {
  77. return yScale(dat[1]);
  78. })
  79. .interpolate("linear")
  80. )(aa) + "Z";
  81. });
  82. return p;
  83. })
  84. .on('mouseover', function () {
  85. d3.select(this).style('fill', d3.rgb(204, 185, 116));
  86. })
  87. .on('mouseout', function () {
  88. d3.select(this).style('fill', function (d1) {
  89. return colours(d1.val);
  90. })
  91. });
  92. }
  93. </script>
  94. </body>
  95. </html>