starMap = {
const svg = DOM.svg(width,width);
function toRadians(angle) {
return angle * (Math.PI / 180);
};
var split_stars = stars.split(/\r?\n/);
var all_stars = [];
for (var star of split_stars) {
var newStar = {
'name': star.substring(0,25).trim(),
'heading': rotateIt + parseFloat(star.substring(41,46).trim()),
'ascension': star.substring(47,52).trim(),
'apparent_mag': star.substring(73,78).trim(),
'abs_mag': star.substring(79,84).trim(),
'distance': star.substring(92,97).trim()
}
all_stars.push(newStar)
}
var grid_lines = [];
for (var i = 0; i < 360; i+=10) {
grid_lines.push(i + rotateIt);
}
var grid_circles = [10,20,30,40,50];
var scale_num = 7;
var scale_factor = 2;
var select = d3.select(svg);
select.append('rect')
.attr('x',0).attr('y',0).attr('width',width).attr('height',width)
.attr('fill','black');
select.append("line")
.attr('x1',width/2 + 50*scale_num*Math.sin(toRadians(0+rotateIt)))
.attr('y1',width/2 + 50*scale_num*Math.cos(toRadians(0+rotateIt))/scale_factor)
.attr('x2',width/2 + 60*scale_num*Math.sin(toRadians(0+rotateIt)))
.attr('y2',width/2 + 60*scale_num*Math.cos(toRadians(0+rotateIt))/scale_factor)
.attr('stroke','goldenrod')
select.append("line")
.attr('x1',width/2 + 55*scale_num*Math.sin(toRadians(2+rotateIt)))
.attr('y1',width/2 + 55*scale_num*Math.cos(toRadians(2+rotateIt))/scale_factor)
.attr('x2',width/2 + 60*scale_num*Math.sin(toRadians(0+rotateIt)))
.attr('y2',width/2 + 60*scale_num*Math.cos(toRadians(0+rotateIt))/scale_factor)
.attr('stroke','goldenrod')
select.append("line")
.attr('x1',width/2 + 55*scale_num*Math.sin(toRadians(-2+rotateIt)))
.attr('y1',width/2 + 55*scale_num*Math.cos(toRadians(-2+rotateIt))/scale_factor)
.attr('x2',width/2 + 60*scale_num*Math.sin(toRadians(0+rotateIt)))
.attr('y2',width/2 + 60*scale_num*Math.cos(toRadians(0+rotateIt))/scale_factor)
.attr('stroke','goldenrod')
// Radial grid, circles
select.selectAll('ellipse.grid_circle')
.data(grid_circles)
.enter()
.append('ellipse')
.attr('class','grid_circle')
.attr('cx',width/2)
.attr('cy',width/2)
.attr('rx',d => d*scale_num)
.attr('ry',d => d*scale_num/scale_factor)
.attr('fill','none')
.attr('stroke','goldenrod')
// .attr('stroke-dasharray','5,5')
// Radial grid, lines
select.selectAll('line.grid_lines')
.data(grid_lines)
.enter()
.append('line')
.attr('class','grid_lines')
.attr('x1',width/2)
.attr('y1',width/2)
.attr('x2',d => width/2 + (50*scale_num)*Math.sin(toRadians(d)))
.attr('y2',d => width/2 + (50*scale_num)*Math.cos(toRadians(d))/scale_factor)
.attr('stroke','goldenrod')
// .attr('stroke-dasharray','5,5')
// stars
// the point math is translate to center, then calculate radius * heading
// radius is distance * abs value of trig math for ascension (cah) times scale
// also fun fact, absolute magnitude big numbers means dimmer
// select.selectAll('circle.star')
// .data(all_stars)
// .enter()
// .append('circle')
// .attr('class','star')
// .attr('cx',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.sin(toRadians(d.heading)))
// .attr('cy',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.cos(toRadians(d.heading)) / scale_factor)
// .attr('r',1)
// .attr('fill','white')
// .attr('stroke','white')
// straight line
// select.selectAll('line.star_line')
// .data(all_stars)
// .enter()
// .append('line')
// .attr('class','star_line')
// .attr('x1',width/2)
// .attr('y1',width/2)
// .attr('x2',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.sin(toRadians(d.heading)))
// .attr('y2',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.cos(toRadians(d.heading)) / scale_factor - (d.distance*scale_num*Math.sin(toRadians(d.ascension))))
// .attr('stroke','blue')
// elevated line
select.selectAll('line.star_elv')
.data(all_stars)
.enter()
.append('line')
.attr('class','star_elv')
.attr('x1',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.sin(toRadians(d.heading)))
.attr('y1',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.cos(toRadians(d.heading)) / scale_factor)
.attr('x2',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.sin(toRadians(d.heading)))
.attr('y2',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.cos(toRadians(d.heading)) / scale_factor - (d.distance*scale_num*Math.sin(toRadians(d.ascension))))
.attr('stroke','goldenrod')
.attr('stroke-width',function(d){
if(Math.sin(toRadians(d.ascension)) > 0) {
return '1'
} else {
return '1'
}
})
.attr('stroke-dasharray',function(d){
if(Math.sin(toRadians(d.ascension)) > 0) {
return 'none'
} else {
return '5,5'
}
})
// plane line
// select.selectAll('line.star_line_plane')
// .data(all_stars)
// .enter()
// .append('line')
// .attr('class','star_line_plane')
// .attr('x1',width/2)
// .attr('y1',width/2)
// .attr('x2',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.sin(toRadians(d.heading)))
// .attr('y2',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.cos(toRadians(d.heading)) / scale_factor)
// .attr('stroke','purple')
// elevated stars
select.selectAll('circle.star_elv')
.data(all_stars)
.enter()
.append('circle')
.attr('class','star_elv')
.attr('cx',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.sin(toRadians(d.heading)))
.attr('cy',d => width/2 + (d.distance*Math.abs(Math.cos(toRadians(d.ascension)))*scale_num) * Math.cos(toRadians(d.heading)) / scale_factor - (d.distance*scale_num*Math.sin(toRadians(d.ascension)))) // may want to divide by scale factor, not sure
.attr('r',4)
.attr('fill',function(d){
if(Math.sin(toRadians(d.ascension)) > 0) {
return 'white'
} else {
return 'gray'
}
})
// Sol
select.append("circle")
.attr('cx',width/2)
.attr('cy',width/2)
.attr('r',8)
.attr('fill','white')
return svg;
}