xxxxxxxxxx
195
let m87
const c = 30
const G = 7
let photons = []
let captiveRange
let firstTime = true
let massEditor
let photonEditor
let spacingEditor
let trailEditor
let blackHoleEditor
let backgroundEditor
let imageEditor
let angleEditor
let spaceBackground
let spaceCanvas
let canvas
let photonColour = 255
let trailColour = 255
let fullEnd = false
let backgroundColour = 255
let tempBackgroundColour = 255
const dt = 0.1
let windowSizeX
let windowSizeY
function firstSetup() {
windowSizeX = windowWidth
windowSizeY = windowHeight
let spacingConstant = 120
MassEdit()
BlackHoleEditor(spacingConstant)
PhotonEdit(spacingConstant)
SpacingEdit(spacingConstant)
AngleEdit(spacingConstant)
TrailEdit(spacingConstant)
BackgroundEditor(spacingConstant)
ImageEditor(spacingConstant)
spaceCanvas = createGraphics(windowSizeX,windowSizeY)
spaceCanvas.background(0)
for (i = 0; i < 150; i++) {
spaceCanvas.strokeWeight(random(1, 8))
spaceCanvas.stroke(random(100, 255), random(50, 200))
spaceCanvas.point(random(0, 1920), random(0, 1080))
}
let resetBtn = createButton('Reset')
resetBtn.mousePressed(resetSketch)
resetBtn.position(windowWidth - resetBtn.width, 0)
}
function setup() {
if (firstTime) {
firstSetup()
firstTime = false
}
drawn = false
canvas = createCanvas(windowSizeX,windowSizeY);
canvas.position(0, 100)
m87 = new BlackHole(width / 2, height / 2, int(massEditor.value()), blackHoleEditor.value())
captiveRange = 12 * m87.radius
let photonNum = photonEditor.value()
let photonSpacing = spacingEditor.value()
let trailFlag = trailEditor.value()
// angleMode(DEGREES)
// let angle = angleEditor.value() / 2
// let photonCount = 0
// for (i = -angle; i <= angle; i += (angle * 2)/photonNum) {
// let xSpeed = abs(cos(i))
// let ySpeed = sin(i)
// photons.push(new Photon(-5, height / 2, xSpeed, ySpeed, photonColour, trailFlag, trailColour,5))
// }
// for (i = 0; i <= photonNum; i++) {
// photons.push(new Photon(-5, height / 2 - (i * photonSpacing), c, 0, photonColour, trailFlag, trailColour,5))
// }
for (i = 0; i < width ; i+= 5) {
photons.push(new Photon(i, -5, 0, c, photonColour, trailFlag, color(255,0,0),5))
photons.push(new Photon(i, height + 5, 0, -c, photonColour, trailFlag, color(0,255,0),5))
}
for (j = 0; j < height ; j+= 5) {
photons.push(new Photon(-5, j, c, 0, photonColour, trailFlag, color(0,0,255),5))
photons.push(new Photon(width + 5, j, -c, 0, photonColour, trailFlag, color(255,0,255),5))
}
//console.log(photons.length)
loop()
}
function keyPressed() {
if (keyCode == ENTER) {
resetSketch()
}
}
function draw() {
switch (backgroundEditor.value()) {
case 'White':
background(backgroundColour)
break
case 'Black':
background(backgroundColour)
break
case 'Space':
image(spaceCanvas, 0, 0)
break
}
m87.show()
let photonsDone = 0
for (let p of photons) {
let distFromHole = dist(m87.position.x, m87.position.y, p.position.x, p.position.y)
if (( distFromHole < captiveRange && distFromHole > 0.5 * m87.radius && p.position.y > - 100 && p.position.y < height + 100 && p.position.x > -50 && p.position.x < width + 50)) {
let force = m87.pull(p)
// only pull photon towards black hole if its nearby
}
if (p.draw != 2) {
if ((((width / 2) - 0.25 * m87.radius < p.position.x) && (p.position.x < (width / 2) + 0.25 * m87.radius) && ((height / 2) - 0.25 * m87.radius < p.position.y) && (p.position.y < (height / 2) + 0.25 * m87.radius)) || (-10 > p.position.x) || (width + 10 < p.position.x) || (-500 > p.position.y) || (height + 500 < p.position.y)) {
p.draw = 1
photonsDone += 1
// stop drawing photon if it's off the screen or in the black hole
}
}
if (p.draw == 0) {
p.update()
}
// if this particle is done stop updating it's position
p.show()
}
if (photonsDone == photons.length) {
noLoop()
if (trailEditor.value() == 'After') {
for (i = 0; i < photons.length; i++) {
photons[i].trail = 'After'
photons[i].draw = 2
photons[i].trailRes = 1
}
drawAfterTrail()
}
if (imageEditor.value() == 'On') {
saveCurrentCanvas()
}
}
m87.showEventHorizon()
}
function drawAfterTrail() {
for (let p of photons) {
p.show()
}
}
function resetSketch() {
photons.splice(0, photons.length)
backgroundColour = tempBackgroundColour
setup()
}
function saveCurrentCanvas() {
let fileName = 'p5 Black Hole Simulation - img' + day() + '-' + month() + '-' + year() + '--' + hour() + '_' + minute() + '_' + second()
m87.showEventHorizon()
saveCanvas(canvas, fileName, 'jpg')
}