JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://d3js.org/d3.v2.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="http://d3js.org/d3.v2.js?2.9.1"></script>
<script src="bost.ocks.org/mike/simplify/simplify.js"></script>
<svg width="700" height="500">
<g id="g-1"></g>
</svg>
CSS
path {
fill: crimson;
fill-opacity: 0.1;
stroke: #000;
}
JavaScript
function path_simplify_r(path, first, last, eps) {
if (first >= last - 1) return [path[first]];
var px = path[first][0];
var py = path[first][1];
var dx = path[last][0] - px;
var dy = path[last][1] - py;
var nn = Math.sqrt(dx*dx + dy*dy);
var nx = -dy / nn;
var ny = dx / nn;
var ii = first;
var max = -1;
for (var i = first + 1; i < last; i++) {
var p = path[i];
var qx = p[0] - px;
var qy = p[1] - py;
var d = Math.abs(qx * nx + qy * ny);
if (d > max) {
max = d;
ii = i;
}
}
if (max < eps) return [path[first]];
var p1 = path_simplify_r(path, first, ii, eps);
var p2 = path_simplify_r(path, ii, last, eps);
return p1.concat(p2);
}
function path_simplify(path, eps) {
var p = path_simplify_r(path, 0, path.length - 1, eps);
return p.concat([path[path.length - 1]]);
}
function path_draw(path, cx, color) {
cx.strokeStyle = color;
cx.beginPath();
cx.moveTo(2*path[0][0], 2*path[0][1]);
for (var i = 1; i < path.length; i++) {
var p = path[i];
cx.lineTo(2*p[0], 2*p[1]);
}
cx.stroke();
}
function path_repr(path) {
var repr = "";
for (var i = 0; i < path.length; i++) {
if (i) repr += ", ";
repr += "(" + path[i][0] + ", " + path[i][1] + ")";
}
return repr;
}
function path_from_svg(svg) {
var pts = svg.split(/[ML]/);
var path = [];
console.log(pts.length);
for (var i = 1; i < pts.length; i++) {
path.push(pts[i].split(","));
}
return path;
}
function svg_to_path(path) {
return "M" + path.join("L");
}
var points =...