Skip to content

Instantly share code, notes, and snippets.

@ptvans
Created December 3, 2012 03:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ptvans/4192558 to your computer and use it in GitHub Desktop.
Save ptvans/4192558 to your computer and use it in GitHub Desktop.
planetar
{"description":"planetar","endpoint":"","display":"svg","public":true,"require":[],"tab":"edit","display_percent":0.5547845616928491,"play":false,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01,"editor_editor":{"coffee":false,"vim":false,"emacs":false,"width":288,"height":280,"hide":true},"editor_json0":{"vim":false,"emacs":false,"width":740,"height":194,"hide":true},"hidepanel":false,"fileconfigs":{"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12},"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"planets.json":{"default":true,"vim":false,"emacs":false,"fontSize":12},"style.css":{"default":true,"vim":false,"emacs":false,"fontSize":12},"sun.json":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"fullscreen":false,"thumbnail":"http://i.imgur.com/EXTWzMh.png"}
var svg = d3.select("svg");
var planets = tributary.planets;
var sundata = tributary.sun;
//tributary.sw gives you the width of the display
//you can calculate it in your own app like so:
//var sw = parseInt(svg.style("width"))
//you can style your display element (svg) with 100% width and height
//and get the size in the code with that trick
/*
//if you want to be responsive you can listen to resizes of the browser
window.addEventListener('resize', function(event) {
//recalculate width
//redraw
})
*/
var cw = tributary.sw - 58;
var ch = tributary.sh;
var aspect = (tributary.sh/tributary.sw);
var rotate = aspect*45-10;
var barheight = 3;
var bargap = 35;
var sunsize = 25 * Math.sqrt(tributary.sw);
//diameter Scale
var dia_min = d3.min(planets, function(d){return d.diameter});
var dia_max = 864327;
console.log(dia_max);
var dia_scale = d3.scale.linear()
.domain([dia_min, dia_max])
.range([10, sunsize]);
//distance Scale
var dist_min = d3.min(planets, function(d){return d.distance});
var dist_max = d3.max(planets, function(d){return d.distance});
var dist_scale = d3.scale.linear()
.domain([dist_min, dist_max])
.range([0, cw]);
//the sun
var thesun = svg.append("circle")
.attr({
fill: "#FFC50C",
opacity: 0.8,
cx: -194,
cy: -15,
r: sunsize/2
})
//create SVG group container for chart
var chart = svg.append("g")
.attr({
"id": "chart",
"transform": "rotate(" + rotate + ") translate(" + [150*1/aspect,-50*aspect] + ")"
})
//create bars
var bars = chart.selectAll("rect")
.data(planets)
.enter()
.append("rect")
.classed("trail", true)
.attr({
fill: "#ECE99F",
opacity: 0.95,
height: barheight,
width: function(d,i){
//console.log(d.distance);
return dist_scale(d.distance);
},
transform: function(d,i){
var x = 0;
var y = i * bargap;
return "translate(" + [x,y] + ")";
}
})
thesun.on("mouseover", function() {
chart.selectAll("rect.trail")
.transition()
.ease("linear")
.duration(function(d) {
//the duration of each ray should be based on
//how far away it is
return d.distance / dist_max * 3000
})
.attr({
width: 0,
transform: function(d,i){
var x = dist_scale(d.distance);
var y = i * bargap;
return "translate(" + [x,y] + ")";
}
})
})
//create images
var images = chart.selectAll("image")
.data(planets)
.enter()
.append("image")
.attr({
opacity: 0.99,
"xlink:href": function(d,i){
return d.img;
},
x: function(d,i){
return dist_scale(d.distance);
},
height: function(d){
return 2*dia_scale(d.diameter);
},
width: function(d){
return 2*dia_scale(d.diameter);
},
transform: function(d,i){
var x = 0 - dia_scale(d.diameter);
var y = i * bargap - dia_scale(d.diameter);
return "translate(" + [x,y] + ")";
}
})
//create circles
var bodies = chart.selectAll("circle")
.data(planets)
.enter()
.append("circle")
.attr("class", function(d) { return "planet " + d.body.toLowerCase(); })
.attr({
cx: function(d){
return dist_scale(d.distance);
},
r: function(d){
return dia_scale(d.diameter) + 10;
},
transform: function(d,i){
var x = 0;
var y = i * bargap + barheight/2;
return "translate(" + [x,y] + ")";
}
})
//SVG text filter stuffs
var defs = d3.select('svg').append('defs');
var filter = defs.append('filter')
.attr('id','drop-shadow')
.attr('width',2.1)
.attr('height',2.6)
filter.append('feGaussianBlur')
.attr('result','result8')
.attr('id','SourceAlpha')
.attr('stdDeviation',2.07)
filter.append('feOffset')
.attr('dx', 2)
.attr('dy', 2)
.attr('result','ctt0')
filter.append('feFlood')
.attr('flood-color','black')
.attr('result',"cFTx")
filter.append('feComposite')
.attr('operator','in')
.attr('in1',"result8")
.attr('in2','ctt0')
.attr('result','cCH0')
var merge = filter.append('feMerge')
merge.append('feMergeNode').attr('in','cCH0');
merge.append('feMergeNode').attr('in','SourceGraphic')
var labels = chart.append("g")
.classed("labels",true)
.attr("id", "labels");
var lbltxt = labels.selectAll("g.lbltxt")
.data(planets,function(d){
return d.body;
})
.enter()
.append("g")
.append("text")
.classed("lbltxt", true)
.attr({
"text-anchor": "middle",
"font-weight": 600,
"font-size": tributary.sw/70,
"fill-opacity":0.95,
"pointer-events":"none",
"fill": "#FFFFFF",
"filter" : "url(#drop-shadow)"
})
.text(function(d) {
return d.body + ", " + d3.round(d.lightspeedMins) + " Minutes";
})
.attr("transform", function(d,i) {
var x = 0 + dist_scale(d.distance);
var y = i * bargap - dia_scale(d.diameter) - 13;
return "rotate(0) translate(" + [x,y] + ")";
})
.attr({"alignment-baseline":"after-edge"})
//title text
var titlebox = svg.append("g")
var shade = titlebox.append("rect")
shade.attr({
rx:9,
x:8,
y:421,
height:87,
width:293,
"fill-opacity":0.5
})
var title = titlebox.append("text")
.text("Planetary")
.attr({
"transform": "translate(" + [150, 462] + ")",
"text-anchor": "middle",
"font-weight": 300,
"font-size": 42,
"fill-opacity": 0.7,
"fill": "#E6DFBB"
})
var subtitle = titlebox.append("text")
.text("Size and Sunlight travel time")
.attr({
"transform": "translate(" + [150, 492] + ")",
"text-anchor": "middle",
"font-weight": 500,
"font-size": 17,
"fill": "#E5F1D6"
})
[
{
"body": "Mercury",
"diameter": 3032,
"distance": 35983610,
"lightspeedMins": 3.2194567018463,
"lightspeedHrs": 0.053657611697438,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/mercury.svg"
},
{
"body": "Venus",
"diameter": 7521,
"distance": 67232360,
"lightspeedMins": 6.01528506958983,
"lightspeedHrs": 0.100254751159831,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/Tango_Venus.svg"
},
{
"body": "Earth",
"diameter": 7926,
"distance": 92957100,
"lightspeedMins": 8.31687978441288,
"lightspeedHrs": 0.138614663073548,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/Tango_Earth.svg"
},
{
"body": "Mars",
"diameter": 4222,
"distance": 141635300,
"lightspeedMins": 12.6721225525458,
"lightspeedHrs": 0.21120204254243,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/Tango_Mars.svg"
},
{
"body": "Jupiter",
"diameter": 88846,
"distance": 483632000,
"lightspeedMins": 43.2705969086296,
"lightspeedHrs": 0.721176615143826,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/jupiter.svg"
},
{
"body": "Saturn",
"diameter": 74898,
"distance": 888188000,
"lightspeedMins": 79.4662572515505,
"lightspeedHrs": 1.32443762085918,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/saturn.svg"
},
{
"body": "Uranus",
"diameter": 31763,
"distance": 1783950000,
"lightspeedMins": 159.610160938792,
"lightspeedHrs": 2.66016934897986,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/uranus.svg"
},
{
"body": "Neptune",
"diameter": 30778,
"distance": 2798842000,
"lightspeedMins": 250.412636039267,
"lightspeedHrs": 4.17354393398778,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/neptune.svg"
}
]
#display {
background-image: url('http://www.paulvanslembrouck.com/tributary/planets/images/starfield.jpg');
background-size: cover;
background-repeat: no-repeat;
//background-color: #272930;
}
.lbltext{
}
.planet {
fill: none;
opacity: 0.85;
stroke: #77888A;
}
[
{
"body": "Sun",
"diameter": 864327,
"distance": 0,
"lightspeedMins": 0,
"lightspeedHrs": 0,
"img": "http://www.paulvanslembrouck.com/tributary/planets/images/sun.png"
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment