xxxxxxxxxx
147
let spaceArr = []
let Sun, Mercury, Venus, Earth, Moon, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto
// thousands of km for radius
// millions of km for orbit
let rScale = 10
let oScale = 10
let sunR = 700
let mercuryR = 2.4
let mercuryO = sunR + 58
let venusR = 6.1
let venusO = sunR + 108
let earthR = 6.4
let earthO = sunR + 150
let moonR
let marsR = 3.4
let marsO = sunR + 228
let jupiterR = 70
let jupiterO = sunR + 779
let saturnR = 58
let saturnO = sunR + 1434
let uranusR = 25
let uranusO = sunR + 2871
let neptuneR = 25
let neptuneO = sunR + 4495
let plutoR = 1.2
let plutoO = sunR + 7376
let baseR = 100
let smallR = baseR / 4
let mediumR = baseR / 2
let largeR = 3 * baseR / 4
let realTime = 0.0000002
let daysPerFrame = realTime
let speedSlider
let speedBox
let infoBox
let zoomSlider
let rotX, rotY
let xTran, yTran, zTran, xRotation, zRotation
let zoom = 22
function setup() {
createCanvas(windowWidth,windowHeight-50, WEBGL);
spaceCanvas = createGraphics(windowWidth,windowHeight-50)
spaceCanvas.background(0)
for (i = 0; i < 1000; i++) {
spaceCanvas.strokeWeight(random(1, 2))
spaceCanvas.stroke(random(0, 255), random(0, 255))
spaceCanvas.point(random(0, width), random(0, height))
}
speedSlider = createSlider(0.00000019,20,0.0000002,0.00000001)
speedBox = createInput('1x Speed')
speedBox.size(110,15)
infoBox = createInput()
infoBox.size(60,15)
zoomSlider = createSlider(1, 15 * oScale,20)
rotX = createSlider(0,90,45)
rotZ = createSlider(0,180,0)
//originx, originy, orbitRadius, direction, framesPerOrbit, radius, c
X = 0
Y = 0
Z = 0
//Sun
Sun = new Planet(X,Y,Z,0,0,0,sunR,color(255,255,0),'Sun')
spaceArr.push(Sun)
//Mercury
Mercury = new Planet(X,Y,Z,mercuryO * oScale,-1,88,mercuryR * rScale,color(150,150,150),'Mercury')
spaceArr.push(Mercury)
//Venus
Venus = new Planet(X,Y,Z,venusO * oScale,-1,225,venusR * rScale,color(175,150,150),'Venus')
spaceArr.push(Venus)
//Earth
Earth = new Planet(X,Y,Z,earthO * oScale,-1,365,earthR * rScale,color(0,100,0),'Earth')
spaceArr.push(Earth)
//Moon0
// Moon = new Planet(Earth.position.x,Earth.position.y,50 + Earth.radius,-1,28,smallR,color(255,255,255))
// spaceArr.push(Moon)
//Mars
Mars = new Planet(X,Y,Z,marsO * oScale,-1,669,marsR * rScale,color(100,0,0),'Mars')
spaceArr.push(Mars)
//Jupiter
Jupiter = new Planet(X,Y,Z,jupiterO * oScale,-1,4380,jupiterR * rScale,color(125,100,100),'Jupiter')
spaceArr.push(Jupiter)
//Saturn
Saturn = new Planet(X,Y,Z,saturnO * oScale,-1,10585,saturnR * rScale,color(150,150,75),'Saturn')
spaceArr.push(Saturn)
//Uranus
Uranus = new Planet(X,Y,Z,uranusO * oScale,-1,30660,uranusR * rScale,color(150,200,150),'Uranus')
spaceArr.push(Uranus)
//Neptune
Neptune = new Planet(X,Y,Z,neptuneO * oScale,-1,60225,neptuneR * rScale,color(50,50,255),'Neptune')
spaceArr.push(Neptune)
//Pluto
Pluto = new Planet(X,Y,Z,plutoO * oScale,-1,90520,plutoR * rScale,color(200,200,200),'Pluto')
spaceArr.push(Pluto)
xTran = 0
yTran = 0
}
function draw() {
// image(spaceCanvas, 0, 0)
background(0)
//translate(width/2, height / 2)
daysPerFrame = speedSlider.value()
speedBox.value(round(daysPerFrame/realTime) + 'x Speed')
//noLoop()
tranRotate()
// translate(xTran,yTran,zTran)
rotateX(xRotation)
rotateZ(-zRotation)
scale(1/zoomSlider.value())
let count = 0
let displayName
for (let p of spaceArr) {
p.update()
p.show()
if (mouseX - xTran > (p.position.x / zoom) - (p.radius / zoom)&& mouseX - xTran < (p.position.x / zoom) + (p.radius / zoom) && mouseY - yTran> (p.position.y / zoom) - (p.radius / zoom) && mouseY - yTran < (p.position.y / zoom) + (p.radius / zoom)){
displayName = p.name
} else {
count += 1
}
}
if (count < 10) {
infoBox.position(mouseX + 10, mouseY +10)
infoBox.value(displayName)
infoBox.show()
} else {
infoBox.hide()
}
}