Dan, your videos have helped me evolve from knowing basically nothing about Javascript to being offered a full time job in the space of one year. Thank you dude.
One way to boost performance could be removing `background(255)` from `draw()` function and `history` from `Photon` class, so that there's no need to redraw the photon trails...
@@Trekfolie l did python for 5 years before I decided to come to JS. I still use python for ML and data stuff and scripting, but Node and P5 are on next level for web and Graphics stuff.
@@johnheikens Speaking of reddit, is there a dedicaated subreddit for Processsing or coding challenges? I mean those coding challenges that The Coding Train does.
You could maybe write a ray tracer which does all of that stuff but from the front (send photons out from the "pixel layer" into the third dimension and see where they hit your pixel layer again) to render a picture
Not sure if anyone has pointed this out yet, but one reason all of your photons may be getting sucked into black hole is that you're not accounting for the timestep when updating velocity, only position. This means that the "force" being exerted on all of your photons is much larger than it should be.
I watched you do this live - but I'm watching this just to see how you edited all your mistakes and corrections together XD Edit: Ah, you just refilmed the intro... Well played, Shiffman.
I noticed that you said something like "30 pixels per frame.. thats pretty slow for movement". But thats 900 pixels travelled a second, already past the screen!
Xnoob Speakable That would be lowercase g, the acceleration of gravity. Uppercase G is the gravitational constant, which doesn’t really directly apply to anything we see, but it is a vital value in calculating most gravitational interactions in the universe. But don’t take my word for it; I don’t know much about it at all.
10:40 - And hence one of the most terribly drawn whatever-those-squiggly-things-are-called-anyways-because-they're-probably-not-called-curly-brackets-when-they're-drawn-like-that-but-I-might-be-wrong was created!
Nice simulation. This is in essence a classical simulation of objects with mass moving towards a body in space, since you used newtonian physics to calculate the dynamics of each object. To calculate how photons would move one would use formulas from General Relativity. The simulation captures the photonring however which is nice to see.
hey one thing I do know is the movie interstellar they used allot of data to recreate the black hole. They scaled it up for visual aesthetics but supposedly was pretty accurate. They have a book on that movie and stuff that has it labeled speculative and factual or data driven ect. Their minds would be a good one to pick in how they rendered that prob love your videos!
you'd probably get a significant performance increase if you did not add to one end of the array an then delete from the other every frame. Instead, keep an index and just replace the item at that index. The way it is now causes you to have to shift every element of the array over every frame after you delete that first element. I'd also preallocate all the memory needed for that array rather than just add to it on demand. That way you won't need to keep reallocating memory for the buffer and copying the items to the new memory location when it grows. To piggyback off that, you should also be constantly updating the history so it represents a path of vertices using the least number of vertices needed. For example, those lines are straight for a long while so they really only need 2 vertices, whereas you have hundreds all in that straight line.
So, just for your information, when scientists run simulations of the caliber you want to do they run it on super computers and it takes days to months. My research advisor is doing gamma-ray burst jet simulations and he said it takes several minutes to generate just a few nanoseconds of simulation data. And that generation time will only increase as the jets expand outwards (getting exponentially larger).
Of course a 2 dimensional version with simplified visuals of a "simpler" system (like a black hole) would be much "easier" to generate, but I imagine the level of difficulty scales down about the same amount as the loss in computational power does. So it would still take a long time to generate the data.
While doing this coding challenge myself I named my class Blackhole and then created a Blackhole object saying, “let bhole;” “bhole = new Blackhole;” I did this for quite a while before my fiancé pointed out that maybe b-hole isn’t the best name for my Blackhole.
I don't know you, i can't program for shit, would like to change that, and i would like to see a more serious simulation of a black hole, but none of that matters because you're so entertaining and make all this so interesting to watch, i'm amazed!
Did you ever multiply the added gravitational force with your delta time? I feel like you will get different results depending on your time scale (dt) with this solution, since it affects the photons speed but not its attraction to the black hole. I know I'm three years late to this but if I'm wrong I'd be happy to hear an explanation :)
One way to doing this more fun, is maybe by considering the time dilatation, and with this the photon will slow down and never go inside a certain circle, and with this you litteraly create a Black Hole =)
3 роки тому
If I was in your place I would behyper nervous of not being able to implement the quantum stuff, but I am totally comfortable you saying, "goof enough" My boss would be proud if I didn't over engineered everything.
If one would use the exact solution of Newtonian gravity (Kepler orbits), so do not compensate that the "photons" speeds up while faling towards the black hole, it can be shown that a particle would just graze the Schwarzschild radius (rs) if it start at sqrt(3)*rs≈1.73*rs. Coincidentally these particles also speed up at rs to a speed of sqrt(3) times the speed of light.
I genuinly love the 'let's neglect the generalrelativicity effect of... those photons orbiting the BH. The visuals, however, are really encouraging !! I really like the style of the channel!
You include units for c = 299,792,458 m/s, but (even though they're pretty crazy!) you keep neglecting the units for G = 6.67·10⁻¹¹ m³/kg·s². And when you ask us to calculate R_s for M87*, you give M in solar masses, 1.6·10⁹ M⊙, but you also need to give us M⊙ = 1.99·10³⁰ kg. But this is something of a trivium. The main point is, this is a wonderful coding playground! Thanks for all you do, and just keep doing it! PS: The units for G can be verified by noting how, when plugged into that formula, all the units cancel down to just leaving meters behind. Which is correct for a radius. Fred
If you want to keep a trail without a performance hit, couldnt you get rid of the background in the draw loop and instead put it in setup? That way each photon line update is permanent? All you need to do is connect the most recent step to the second most recent. So your history would be maxed at 1 instead of 500 or whatever. In many applications this could make a messy mess but in something like this I see no downside.
I tried to code the gravitationnal lensing to put random photos of cats as sources. However, the way you find out the geodesique is just some fancy wizzard stuff.
Is it possible to create a space-bend effect like on this picture: physicsworld.com/wp-content/uploads/2006/09/LLOYDblack-hole.jpg So this JS blackhole would warp a background image like this.
I'm pretty sure almost anything is possible to code, if you are a good enough programmer... Could i do it? saddly no, do i believe a good programmer could do that space-bend effect? I am pretty sure they could
The reason it doesn't work is because in general relativity you have an extra cubed term in the attractive "force" you have to simulate, which results in some really unintuitive orbits very close to the black hole. I really really recommend this amazing interactive applet that simulates the actual equations. www.fourmilab.ch/gravitation/orbits/ In a way those crazy orbits are always possible but hidden because you can't go so close to the centre of mass of say the Earth. Black holes just make it possible to get close enough for those extra terms to start causing rosettes and photon spheres and other weird orbits. Anyway I'm not a physicist but I went down the rabbit hole trying to simulate this in a shader a while back and I can't remember all of the details, but I found some articles that managed to make me understand what's different.
I have an idea for a coding challenge: Code an animation of the dijkstra algorithm. It should show how the algorithm works, so eventually it looks like some ants walking from one knot to another and they remember how long they need.
One question I have, is if OOP is good or bad for CPU performance? I mean, the program needs to jump around, call methods in methods in methods, get models... Thank you for an answer :)
that's hard to answer the question because every programming language is different. but some algorithmic optimizations are prevented in OOPs due to encapsulation, and the synergy between 2 particular algorithms that work together is lost behind OO interfaces. But it might also depend whether the language is compiled or interpreted
I have a question, people always say that objects bend the spacetime mesh but is the spacetime mesh a 2d mesh or a 3d mesh? And if it’s a 3d mesh how does it “bend”?
You are pretty cool man. I don’t use java script but I really like watching your videos and see how you work though the problem. I’m doing some of your challenges in python in tkinter.
Rs = 19179803808,449 Km or 1,918*10¹¹ Km in perspective the Kuiper belt has 7479893535 Km or 7,48*10⁹ Km so this black hole event horizon (Rs) has 2,56 times the diameter of our whole Solar System
Your photons can go slower then the speed of light, that's why it's so innacurate (Relativity is part of it, but photons going slower then the speed of light is part of it, too!)
I think is photon should be point not line so we can have batter imagination to the horizon and the photons should came from screen top right and down right to improve the some relation is really work... And thanks to the tutorial
Amazing, love your vids, I used to do python but you inspired me to try JS and I've been looking it so far! Only thing I can't figure out is how to copy a variable without them being linked?
Primitive types get copied by value, objects (arrays) are copied by reference ("linked"). There are methods to deep copy arrays or objects but you don't need them that often. Modifying an array data structure usually happens with `.map` or `.reduce`.
Funny thing, if you could get close enough to the black hole, within the event horizon, you would see something. Nobody knows what, but you would see something. The light is not fast enough to escape the event horizon, but it can still bounce up a bit before it is sucked back down. Because we don't know how the light behaves inside the event horizon, we're not really sure how to visualise it, or calculate its behaviour.
Dan, your videos have helped me evolve from knowing basically nothing about Javascript to being offered a full time job in the space of one year. Thank you dude.
This is great but scary. I mean all the fors, and ifs, and vars, and scope pollution...
@@badunius_code can't forget the "this dot"
It's Friday night; wanted to relax and watch a movie, and ended up watching this :D Thank you for the video - you are one of the best!!!
I wish I could relate man, I so so wish!
One way to boost performance could be removing `background(255)` from `draw()` function and `history` from `Photon` class, so that there's no need to redraw the photon trails...
0:25 that synched-up hand gesture looks almost intentional
Luca Felicetti Lmao facts
Was gonna write this comment :D
Oh wow
Whoa, I did not notice this!
The other hand is the same syncing on the other side of the black hole 😆
Wow....You are really a Prodigy in JavaScript....Love your Enthusiasm and Teaching Style.
I'm learning Python atm but his style makes me want to learn JS instead.
Welp I'm still watching his videos and enjoying it so much.
@@Trekfolie l did python for 5 years before I decided to come to JS. I still use python for ML and data stuff and scripting, but Node and P5 are on next level for web and Graphics stuff.
No one
Engineers: c=30 and G=6
Don Grille super great
What are you talking about c = 299752458 m/s *SQUARED*
@@ΛεωνίδαςΓκώγκος r/woooosh
@@johnheikens Speaking of reddit, is there a dedicaated subreddit for Processsing or coding challenges?
I mean those coding challenges that The Coding Train does.
@@ΛεωνίδαςΓκώγκος Actually it's 299792458.
4:45 RIP youtube compression algorithm.
You could maybe write a ray tracer which does all of that stuff but from the front (send photons out from the "pixel layer" into the third dimension and see where they hit your pixel layer again) to render a picture
This deserves more likes
From a dull drawing to a crazy good simulation, this is what programming is!
Not sure if anyone has pointed this out yet, but one reason all of your photons may be getting sucked into black hole is that you're not accounting for the timestep when updating velocity, only position. This means that the "force" being exerted on all of your photons is much larger than it should be.
We know what the speed of light is. Now, at 24:04, we know what the sound of light is, too!
That sound he made was so funny, mostly because in his position i'd do exactly the same. That nice smooth animation, just asks for that sound
I just wanna say thank you a lot for adding subtitles for hard of hearing. Please do so in the future
I am speechless. You, sir, are a living legend.
The quality on these videos are are getting amazing.
"Then, I calculate the change in angle based on the relativistic curvature of space time" -Dan 👏 using JavaScript. 😀 😆 Man I love this channel.
My new favorite channel on UA-cam. Your stuff's brilliant so glad I found this channel
You're the best, bro! Just got the book "The Nature of Code" and I'm enjoying it.
I watched you do this live - but I'm watching this just to see how you edited all your mistakes and corrections together XD
Edit: Ah, you just refilmed the intro... Well played, Shiffman.
Yeah, I like leaving coding mistakes in, but if I'm getting actual science wrong it's too painful to watch!
I love this guy so much, makes JS so joyful.
Thanks to you, Dan, I was able to understand Derek's video. When I first watched it, I didn't understand it very much
I love how Veritasium's video on the black hole image was the 5th recommended video in my sidebar
I noticed that you said something like "30 pixels per frame.. thats pretty slow for movement". But thats 900 pixels travelled a second, already past the screen!
c=30
G=6
All my engineering teachers are crying...
But i love your videos
I would rather take one constant and make everything else in percentage about the first one
@@williampecoraro653 Yes, that's a great suggestion!
Isn't it like 9.8m/s sQuaREd?
Xnoob Speakable That would be lowercase g, the acceleration of gravity. Uppercase G is the gravitational constant, which doesn’t really directly apply to anything we see, but it is a vital value in calculating most gravitational interactions in the universe. But don’t take my word for it; I don’t know much about it at all.
I'd rather learn physics from you
I would learn anything from my professors if they had 1/3 of the amount of enthusiasm and heart he puts into his videos.
But you couldn't. He doesn't knoe much about physics.
How he is doing the same movement with his hand at 0:24 xD
Lol
ffs i just wanted to stay that
lol what?
Daniel. You are the BEST most annoying teacher I've ever seen. Thank you.
Why is your channel doesn't get millions of views? It's such a good and quality content herw
cus the most people like to do easy things
10:40 - And hence one of the most terribly drawn whatever-those-squiggly-things-are-called-anyways-because-they're-probably-not-called-curly-brackets-when-they're-drawn-like-that-but-I-might-be-wrong was created!
Atleast he tried
@@satyampandey2222 Tru, tru
😂
The physicist inside me screamed you to set c=1
shoehaze and also g=1 😭
Then you're not really that much of a physicist. We often set c=1 in what's called Natural Units.
well theoretical physicists actually use natural units where c=hbar=1
YES, I've always wanted to see this! Thank you!
this guy deserves a medal
This was relatively interesting. Here, have a thumbs up!
Great Video! I used to love making these types of projects in university!
_Thanks for having English captions Or subtitles_
Nice simulation. This is in essence a classical simulation of objects with mass moving towards a body in space, since you used newtonian physics to calculate the dynamics of each object. To calculate how photons would move one would use formulas from General Relativity. The simulation captures the photonring however which is nice to see.
Watched the whole thing, You're a wonderful teacher!
Owh yeah....i love this when u talk about science and javascript..........😍😍😍😍😍😍😍
Nice editing for this video. :-)
Can you combine "rendering raycasting" with this? Would be awesome 😍
hey one thing I do know is the movie interstellar they used allot of data to recreate the black hole. They scaled it up for visual aesthetics but supposedly was pretty accurate. They have a book on that movie and stuff that has it labeled speculative and factual or data driven ect. Their minds would be a good one to pick in how they rendered that prob love your videos!
you'd probably get a significant performance increase if you did not add to one end of the array an then delete from the other every frame. Instead, keep an index and just replace the item at that index. The way it is now causes you to have to shift every element of the array over every frame after you delete that first element. I'd also preallocate all the memory needed for that array rather than just add to it on demand. That way you won't need to keep reallocating memory for the buffer and copying the items to the new memory location when it grows.
To piggyback off that, you should also be constantly updating the history so it represents a path of vertices using the least number of vertices needed. For example, those lines are straight for a long while so they really only need 2 vertices, whereas you have hundreds all in that straight line.
So, just for your information, when scientists run simulations of the caliber you want to do they run it on super computers and it takes days to months. My research advisor is doing gamma-ray burst jet simulations and he said it takes several minutes to generate just a few nanoseconds of simulation data. And that generation time will only increase as the jets expand outwards (getting exponentially larger).
Of course a 2 dimensional version with simplified visuals of a "simpler" system (like a black hole) would be much "easier" to generate, but I imagine the level of difficulty scales down about the same amount as the loss in computational power does. So it would still take a long time to generate the data.
Thanks for this feedback and additional info!
While doing this coding challenge myself I named my class Blackhole and then created a Blackhole object saying, “let bhole;” “bhole = new Blackhole;” I did this for quite a while before my fiancé pointed out that maybe b-hole isn’t the best name for my Blackhole.
I don't know you, i can't program for shit, would like to change that, and i would like to see a more serious simulation of a black hole, but none of that matters because you're so entertaining and make all this so interesting to watch, i'm amazed!
Did you ever multiply the added gravitational force with your delta time? I feel like you will get different results depending on your time scale (dt) with this solution, since it affects the photons speed but not its attraction to the black hole. I know I'm three years late to this but if I'm wrong I'd be happy to hear an explanation :)
"I don't play a physicist on youtube" is that a loose Scott Manley reference? :D
One way to doing this more fun, is maybe by considering the time dilatation, and with this the photon will slow down and never go inside a certain circle, and with this you litteraly create a Black Hole =)
If I was in your place I would behyper nervous of not being able to implement the quantum stuff, but I am totally comfortable you saying, "goof enough"
My boss would be proud if I didn't over engineered everything.
I think you had it right at 35:40. It just feels right!
I was about to go and sleep but a coding train notification popped up
0:25 I like how he does the same arm gesture in both vids
the sync, pleasures my OCD
Love those long videos so much!!!!!!!!!!!
Very good video(I actually learned a lot from this video!!)
If one would use the exact solution of Newtonian gravity (Kepler orbits), so do not compensate that the "photons" speeds up while faling towards the black hole, it can be shown that a particle would just graze the Schwarzschild radius (rs) if it start at sqrt(3)*rs≈1.73*rs. Coincidentally these particles also speed up at rs to a speed of sqrt(3) times the speed of light.
I genuinly love the 'let's neglect the generalrelativicity effect of... those photons orbiting the BH. The visuals, however, are really encouraging !! I really like the style of the channel!
5:36 Black holes are flat confirmed!
You include units for c = 299,792,458 m/s, but (even though they're pretty crazy!) you keep neglecting the units for G = 6.67·10⁻¹¹ m³/kg·s².
And when you ask us to calculate R_s for M87*, you give M in solar masses, 1.6·10⁹ M⊙, but you also need to give us M⊙ = 1.99·10³⁰ kg.
But this is something of a trivium. The main point is, this is a wonderful coding playground! Thanks for all you do, and just keep doing it!
PS: The units for G can be verified by noting how, when plugged into that formula, all the units cancel down to just leaving meters behind.
Which is correct for a radius.
Fred
Oh ya!, I love to see that again.
Gravitational constant is determined by unit m3 x kg-1 x s-2 or N x m2 x kg-2
this is a good topic, thank you Dan!
If you want to keep a trail without a performance hit, couldnt you get rid of the background in the draw loop and instead put it in setup? That way each photon line update is permanent? All you need to do is connect the most recent step to the second most recent. So your history would be maxed at 1 instead of 500 or whatever. In many applications this could make a messy mess but in something like this I see no downside.
Yes, this is a good idea! Using createGraphics() for the photon trails would be a great solution.
I tried to code the gravitationnal lensing to put random photos of cats as sources. However, the way you find out the geodesique is just some fancy wizzard stuff.
thank you for making such a great video! love it
If we didn’t have blackholes, what were we supposed to do with all this light?
Is it possible to create a space-bend effect like on this picture:
physicsworld.com/wp-content/uploads/2006/09/LLOYDblack-hole.jpg
So this JS blackhole would warp a background image like this.
I'm pretty sure almost anything is possible to code, if you are a good enough programmer... Could i do it? saddly no, do i believe a good programmer could do that space-bend effect? I am pretty sure they could
Light travels at the speed of itself.
Aren't we all, though? 🤔
Broooo.... My own task of my p5 chalange was make a black hole model, but u also does it😮
Hats off to matthieu ;) :D
I WAS WAITING THIS SO BAD
Awesome as always, thank you very much for this :)
I luv JS and your explanation
The reason it doesn't work is because in general relativity you have an extra cubed term in the attractive "force" you have to simulate, which results in some really unintuitive orbits very close to the black hole. I really really recommend this amazing interactive applet that simulates the actual equations. www.fourmilab.ch/gravitation/orbits/
In a way those crazy orbits are always possible but hidden because you can't go so close to the centre of mass of say the Earth. Black holes just make it possible to get close enough for those extra terms to start causing rosettes and photon spheres and other weird orbits.
Anyway I'm not a physicist but I went down the rabbit hole trying to simulate this in a shader a while back and I can't remember all of the details, but I found some articles that managed to make me understand what's different.
6:24 I'm not entirely sure if my math is correct, but it came out to about 7.67616655e12
edited 3 times just because of how bad my math was
You have to try to make it 3D that is gonna be cool!
I have an idea for a coding challenge: Code an animation of the dijkstra algorithm. It should show how the algorithm works, so eventually it looks like some ants walking from one knot to another and they remember how long they need.
Thanks for this video, May i know which soft wear used for light rings around a black hole, Is this possible on Mathematica tool. Please tell me.
One question I have, is if OOP is good or bad for CPU performance?
I mean, the program needs to jump around, call methods in methods in methods, get models...
Thank you for an answer :)
that's hard to answer the question because every programming language is different. but some algorithmic optimizations are prevented in OOPs due to encapsulation, and the synergy between 2 particular algorithms that work together is lost behind OO interfaces.
But it might also depend whether the language is compiled or interpreted
Still starting to watch, but i'm sure the challenge will be awesome!
What did you think?
Was very interesting, i think the newtonian physics simulation actually yielded pretty accurate results
Could you do this and actually solve the field equations in js? Personally I would do it as a reverse ray-trace
Now how about making your black hole spin and the effect that has on the gravity
I have a question, people always say that objects bend the spacetime mesh but is the spacetime mesh a 2d mesh or a 3d mesh? And if it’s a 3d mesh how does it “bend”?
i have a serious problem
at 3:48 i stop the video, turn on the song and don't come back for a week.
please help me
You are pretty cool man. I don’t use java script but I really like watching your videos and see how you work though the problem. I’m doing some of your challenges in python in tkinter.
I love this video 3000
12:25 - 6.67e-11. No need for pow plus using e is likely more precise.
Oh, yes, thanks for the tip!
simply amazing
Hi I have a question on your 7.6 object intersection how would it work with a square and a circle intersecting?
Rs = 19179803808,449 Km or 1,918*10¹¹ Km
in perspective the Kuiper belt has 7479893535 Km or 7,48*10⁹ Km
so this black hole event horizon (Rs) has 2,56 times the diameter of our whole Solar System
You got the math a bit wrong. Rs/R=around 25.6
@@gderu6109 i did not see again :),
the m87 black hole is around 120AU
Your photons can go slower then the speed of light, that's why it's so innacurate (Relativity is part of it, but photons going slower then the speed of light is part of it, too!)
I think, is possible to use ray marching on top of that to create some kind of shader?
29:28
Did that one photon just make an oberon maneuver using a black hole as its slingshot centre?
I think is photon should be point not line so we can have batter imagination to the horizon and the photons should came from screen top right and down right to improve the some relation is really work...
And thanks to the tutorial
Amazing, love your vids, I used to do python but you inspired me to try JS and I've been looking it so far!
Only thing I can't figure out is how to copy a variable without them being linked?
Primitive types get copied by value, objects (arrays) are copied by reference ("linked").
There are methods to deep copy arrays or objects but you don't need them that often. Modifying an array data structure usually happens with `.map` or `.reduce`.
Keep going you do awesome work ;)
Good video, but you completely messed up with physics. For black holes you need to use relativistic mechanics and schwarzschild space-time metric.
Request: Colliding Galaxies
Funny thing, if you could get close enough to the black hole, within the event horizon, you would see something. Nobody knows what, but you would see something.
The light is not fast enough to escape the event horizon, but it can still bounce up a bit before it is sucked back down.
Because we don't know how the light behaves inside the event horizon, we're not really sure how to visualise it, or calculate its behaviour.
could you do a video to show your setup
Hi I wonder, where do you get the width and height thing in sketch.js? Because I don’t think I see you declare their value?
This is from the p5.js library, for more: p5js.org.
Now ima going to try to do this in python
Ďakujeme.
Thank you for the support!