A Greek Cross.
Last active
August 14, 2016 06:33
-
-
Save saifuddin778/05dae3eb1f2c37cdf3627d4cb9e697a9 to your computer and use it in GitHub Desktop.
Greek Cross
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<style> | |
body { | |
text-align: center; | |
} | |
.vertical { | |
stroke: orchid; | |
stroke-width: 0.8; | |
} | |
.horizontal { | |
stroke: lightblue; | |
sroke-width: 0.8; | |
} | |
</style> | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<body> | |
<script> | |
function midpoint(p1, p2) { | |
return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2]; | |
} | |
function add_cross(item, space, i) { | |
var origin_x = (item[0][0] + item[1][0]) / 2; | |
var origin_y = (item[0][1] + item[1][1]) / 2; | |
var origin = [origin_x, origin_y]; | |
var c1 = space.append("line") | |
.attr("x1", origin_x) | |
.attr("y1", origin_y) | |
.attr("x2", origin_x) | |
.attr("y2", origin_y) | |
.attr("class", "vertical"); | |
var c2 = space.append("line") | |
.attr("x1", origin_x) | |
.attr("y1", origin_y) | |
.attr("x2", origin_x) | |
.attr("y2", origin_y) | |
.attr("class", "horizontal"); | |
c1 | |
.transition() | |
.duration(10000) | |
.delay(i * 30) | |
.attr("x1", item[0][0]) | |
.attr("y1", item[0][1]) | |
.attr("x2", item[1][0]) | |
.attr("y2", item[1][1]); | |
c2 | |
.transition() | |
.duration(10000) | |
.delay(i * 30) | |
.attr("x1", item[2][0]) | |
.attr("y1", item[2][1]) | |
.attr("x2", item[3][0]) | |
.attr("y2", item[3][1]); | |
space.append("circle") | |
.attr("r", 0) | |
.attr("cx", origin_x) | |
.attr("cy", origin_y) | |
.attr("fill", "gray"); | |
var children = [ | |
[ | |
[item[0][0], item[0][1]], | |
[origin_x, origin_y], | |
[midpoint(item[0], origin)[0], midpoint(item[2], origin)[1]], | |
[midpoint(item[0], origin)[0], midpoint(item[3], origin)[1]], | |
], | |
[ | |
[midpoint(item[0], origin)[0], midpoint(item[2], origin)[1]], | |
[midpoint(origin, item[1])[0], midpoint(item[2], origin)[1]], | |
[item[2][0], item[2][1]], | |
[origin_x, origin_y], | |
], | |
[ | |
[origin_x, origin_y], | |
[item[1][0], item[1][1]], | |
[midpoint(origin, item[1])[0], midpoint(item[2], origin)[1]], | |
[midpoint(origin, item[1])[0], midpoint(origin, item[3])[1]], | |
], | |
[ | |
[midpoint(item[0], origin)[0], midpoint(item[3], origin)[1]], | |
[midpoint(origin, item[1])[0], midpoint(origin, item[3])[1]], | |
[origin_x, origin_y], | |
[item[3][0], item[3][1]], | |
], | |
]; | |
return children; | |
} | |
var width = 500; | |
var height = 500; | |
var space = d3.select("body") | |
.append("svg") | |
.attr("width", width) | |
.attr("height", height) | |
.append("g"); | |
var items = [ | |
[ | |
[0, height / 2], | |
[width, height / 2], | |
[width / 2, 0], | |
[width / 2, height] | |
] | |
]; | |
for (var i = 0; i < items.length; i++) { | |
var children = add_cross(items[i], space, i); | |
for (var j = 0; j < children.length; j++) { | |
items.push(children[j]); | |
} | |
//84, 340 | |
if (i == 340 * 4) { | |
break; | |
} | |
} | |
items = []; | |
</script> | |
</body> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment