Coding Challenge 144: 2D Black Hole Visualization

Поділитися
Вставка
  • Опубліковано 29 лис 2024

КОМЕНТАРІ • 272

  • @visualeyescollective8193
    @visualeyescollective8193 5 років тому +87

    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.

    • @badunius_code
      @badunius_code 2 роки тому +2

      This is great but scary. I mean all the fors, and ifs, and vars, and scope pollution...

    • @Crazyclay78YT
      @Crazyclay78YT 2 роки тому +4

      @@badunius_code can't forget the "this dot"

  • @luyuan0
    @luyuan0 5 років тому +143

    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!!!

  • @melvinlijiabraham4165
    @melvinlijiabraham4165 5 років тому +62

    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...

  • @lucafelicetti9605
    @lucafelicetti9605 5 років тому +221

    0:25 that synched-up hand gesture looks almost intentional

  • @mockingbird3809
    @mockingbird3809 5 років тому +111

    Wow....You are really a Prodigy in JavaScript....Love your Enthusiasm and Teaching Style.

    • @Trekfolie
      @Trekfolie 5 років тому +4

      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.

    • @sortof3337
      @sortof3337 5 років тому +1

      @@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.

  • @TheMultifun
    @TheMultifun 5 років тому +326

    No one
    Engineers: c=30 and G=6

    • @francoissaab374
      @francoissaab374 5 років тому +1

      Don Grille super great

    • @ΛεωνίδαςΓκώγκος
      @ΛεωνίδαςΓκώγκος 5 років тому +11

      What are you talking about c = 299752458 m/s *SQUARED*

    • @johnheikens
      @johnheikens 5 років тому +11

      ​@@ΛεωνίδαςΓκώγκος r/woooosh

    • @bartekm3878
      @bartekm3878 5 років тому +6

      @@johnheikens Speaking of reddit, is there a dedicaated subreddit for Processsing or coding challenges?
      I mean those coding challenges that The Coding Train does.

    • @simonmaracine4721
      @simonmaracine4721 5 років тому

      @@ΛεωνίδαςΓκώγκος Actually it's 299792458.

  • @MasterHigure
    @MasterHigure 5 років тому +38

    4:45 RIP youtube compression algorithm.

  • @domninin
    @domninin 5 років тому +43

    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

  • @iritesh
    @iritesh 5 років тому +6

    From a dull drawing to a crazy good simulation, this is what programming is!

  • @SirPhysics
    @SirPhysics 5 років тому +5

    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.

  • @kevnar
    @kevnar 5 років тому +33

    We know what the speed of light is. Now, at 24:04, we know what the sound of light is, too!

    • @thockinity
      @thockinity 4 роки тому +3

      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

  • @ersinmisto81
    @ersinmisto81 5 років тому +5

    I just wanna say thank you a lot for adding subtitles for hard of hearing. Please do so in the future

  • @yourteacher4353
    @yourteacher4353 5 років тому +17

    I am speechless. You, sir, are a living legend.

  • @MijeshDeuja
    @MijeshDeuja 5 років тому +3

    The quality on these videos are are getting amazing.

  • @chefbennyj
    @chefbennyj 2 роки тому +1

    "Then, I calculate the change in angle based on the relativistic curvature of space time" -Dan 👏 using JavaScript. 😀 😆 Man I love this channel.

  • @effzee73
    @effzee73 5 років тому +2

    My new favorite channel on UA-cam. Your stuff's brilliant so glad I found this channel

  • @Helios.vfx.
    @Helios.vfx. 5 років тому +15

    You're the best, bro! Just got the book "The Nature of Code" and I'm enjoying it.

  • @JonathanChute
    @JonathanChute 5 років тому +12

    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.

    • @TheCodingTrain
      @TheCodingTrain  5 років тому +6

      Yeah, I like leaving coding mistakes in, but if I'm getting actual science wrong it's too painful to watch!

  • @adrian5b
    @adrian5b 5 років тому +2

    I love this guy so much, makes JS so joyful.

  • @avi12
    @avi12 5 років тому +1

    Thanks to you, Dan, I was able to understand Derek's video. When I first watched it, I didn't understand it very much

  • @PilatusAnon
    @PilatusAnon 2 роки тому

    I love how Veritasium's video on the black hole image was the 5th recommended video in my sidebar

  • @connorclub6244
    @connorclub6244 2 роки тому +1

    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!

  • @williampecoraro653
    @williampecoraro653 5 років тому +41

    c=30
    G=6
    All my engineering teachers are crying...
    But i love your videos

    • @williampecoraro653
      @williampecoraro653 5 років тому +10

      I would rather take one constant and make everything else in percentage about the first one

    • @TheCodingTrain
      @TheCodingTrain  5 років тому +7

      @@williampecoraro653 Yes, that's a great suggestion!

    • @Xnoob545
      @Xnoob545 5 років тому

      Isn't it like 9.8m/s sQuaREd?

    • @halusinjackbow8043
      @halusinjackbow8043 4 роки тому +1

      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.

  • @hrishikeshpatil7901
    @hrishikeshpatil7901 5 років тому +92

    I'd rather learn physics from you

    • @army6669990101
      @army6669990101 5 років тому +22

      I would learn anything from my professors if they had 1/3 of the amount of enthusiasm and heart he puts into his videos.

    • @zoltankurti
      @zoltankurti 5 років тому +5

      But you couldn't. He doesn't knoe much about physics.

  • @venido8308
    @venido8308 5 років тому +120

    How he is doing the same movement with his hand at 0:24 xD

  • @guyr989
    @guyr989 5 років тому +1

    Daniel. You are the BEST most annoying teacher I've ever seen. Thank you.

  • @Небудьбараном-к1м
    @Небудьбараном-к1м 5 років тому +3

    Why is your channel doesn't get millions of views? It's such a good and quality content herw

    • @ammarkamel6324
      @ammarkamel6324 5 років тому

      cus the most people like to do easy things

  • @OrangeC7
    @OrangeC7 5 років тому +17

    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!

  • @SotamiesTrolli
    @SotamiesTrolli 5 років тому +44

    The physicist inside me screamed you to set c=1

    • @luisangelpantojaarredondo4460
      @luisangelpantojaarredondo4460 5 років тому +1

      shoehaze and also g=1 😭

    • @thechrisgrice
      @thechrisgrice 4 роки тому +6

      Then you're not really that much of a physicist. We often set c=1 in what's called Natural Units.

    • @kr4301
      @kr4301 4 роки тому +4

      well theoretical physicists actually use natural units where c=hbar=1

  • @calebsherman886
    @calebsherman886 5 років тому +2

    YES, I've always wanted to see this! Thank you!

  • @muradeliyev6291
    @muradeliyev6291 5 років тому +2

    this guy deserves a medal

  • @morphman86
    @morphman86 5 років тому +1

    This was relatively interesting. Here, have a thumbs up!

  • @RAWRCoding
    @RAWRCoding 5 років тому +1

    Great Video! I used to love making these types of projects in university!

  • @user-og2lt8ou8i
    @user-og2lt8ou8i 4 роки тому +1

    _Thanks for having English captions Or subtitles_

  • @Saurastus
    @Saurastus 2 роки тому

    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.

  • @cap.blue-97sama99
    @cap.blue-97sama99 5 років тому +1

    Watched the whole thing, You're a wonderful teacher!

  • @johaneric1400
    @johaneric1400 5 років тому +7

    Owh yeah....i love this when u talk about science and javascript..........😍😍😍😍😍😍😍

  • @iminni3459
    @iminni3459 5 років тому +15

    Nice editing for this video. :-)

  • @mattiarecchi4024
    @mattiarecchi4024 5 років тому +14

    Can you combine "rendering raycasting" with this? Would be awesome 😍

  • @BrainKlar
    @BrainKlar 2 роки тому +1

    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!

  • @jingato
    @jingato 2 роки тому +1

    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.

  • @JohnPatchesMicallef
    @JohnPatchesMicallef 5 років тому +1

    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).

    • @JohnPatchesMicallef
      @JohnPatchesMicallef 5 років тому +1

      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.

    • @TheCodingTrain
      @TheCodingTrain  5 років тому +1

      Thanks for this feedback and additional info!

  • @zacharymcarthur9013
    @zacharymcarthur9013 4 роки тому +5

    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.

  • @NobleMarcos
    @NobleMarcos 5 років тому

    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!

  • @jut2357
    @jut2357 Рік тому +2

    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 :)

  • @tezza48
    @tezza48 5 років тому +5

    "I don't play a physicist on youtube" is that a loose Scott Manley reference? :D

  • @lellow4188
    @lellow4188 5 років тому +5

    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.

  • @Simonjose7258
    @Simonjose7258 5 років тому

    I think you had it right at 35:40. It just feels right!

  • @lazyyw4081
    @lazyyw4081 5 років тому +1

    I was about to go and sleep but a coding train notification popped up

  • @Red_Skies
    @Red_Skies 5 років тому +1

    0:25 I like how he does the same arm gesture in both vids

    • @TheZenytram
      @TheZenytram 5 років тому

      the sync, pleasures my OCD

  • @iradnuriel9087
    @iradnuriel9087 5 років тому

    Love those long videos so much!!!!!!!!!!!
    Very good video(I actually learned a lot from this video!!)

  • @kwinvdv
    @kwinvdv 5 років тому

    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.

  • @pyrommph
    @pyrommph 5 років тому

    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!

  • @enverko
    @enverko 5 років тому +4

    5:36 Black holes are flat confirmed!

  • @ffggddss
    @ffggddss 5 років тому +1

    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

  • @zonetwelve5881
    @zonetwelve5881 5 років тому +4

    Oh ya!, I love to see that again.

  • @matusjakuboc9623
    @matusjakuboc9623 5 років тому

    Gravitational constant is determined by unit m3 x kg-1 x s-2 or N x m2 x kg-2

  •  5 років тому +1

    this is a good topic, thank you Dan!

  • @Melthornal
    @Melthornal 5 років тому +1

    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.

    • @TheCodingTrain
      @TheCodingTrain  5 років тому +1

      Yes, this is a good idea! Using createGraphics() for the photon trails would be a great solution.

  • @arthurs5099
    @arthurs5099 Рік тому

    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.

  • @finnk2551
    @finnk2551 3 роки тому

    thank you for making such a great video! love it

  • @KaizenCodes
    @KaizenCodes 2 роки тому

    If we didn’t have blackholes, what were we supposed to do with all this light?

  • @42Hz
    @42Hz 5 років тому +3

    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.

    • @thockinity
      @thockinity 4 роки тому +2

      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

  • @antiphlex
    @antiphlex 5 років тому +3

    Light travels at the speed of itself.

    • @vidaroni
      @vidaroni 5 років тому

      Aren't we all, though? 🤔

  • @FakeFakovick
    @FakeFakovick Рік тому

    Broooo.... My own task of my p5 chalange was make a black hole model, but u also does it😮

  • @ethanhermsey
    @ethanhermsey 5 років тому +1

    Hats off to matthieu ;) :D

  • @samueleb.6739
    @samueleb.6739 5 років тому

    I WAS WAITING THIS SO BAD

  • @Madmadfr
    @Madmadfr 5 років тому

    Awesome as always, thank you very much for this :)

  • @QuiqueFlowers
    @QuiqueFlowers 5 років тому

    I luv JS and your explanation

  • @boggo3848
    @boggo3848 5 років тому +1

    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.

  • @connorclub6244
    @connorclub6244 2 роки тому +1

    6:24 I'm not entirely sure if my math is correct, but it came out to about 7.67616655e12

    • @connorclub6244
      @connorclub6244 2 роки тому

      edited 3 times just because of how bad my math was

  • @brunoharari6454
    @brunoharari6454 5 років тому +5

    You have to try to make it 3D that is gonna be cool!

  • @imporbis345
    @imporbis345 5 років тому +1

    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.

  • @muhammadisraraslam2487
    @muhammadisraraslam2487 3 роки тому

    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.

  • @kernelpanic2887
    @kernelpanic2887 5 років тому +1

    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 :)

    • @experimentators8699
      @experimentators8699 5 років тому

      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

  • @luismiguelgallegogomez8000
    @luismiguelgallegogomez8000 5 років тому

    Still starting to watch, but i'm sure the challenge will be awesome!

  • @olma97
    @olma97 2 роки тому

    Could you do this and actually solve the field equations in js? Personally I would do it as a reverse ray-trace

  • @codatheseus5060
    @codatheseus5060 8 місяців тому

    Now how about making your black hole spin and the effect that has on the gravity

  • @hamadaag5659
    @hamadaag5659 4 роки тому

    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”?

  • @plshalpme173
    @plshalpme173 4 роки тому

    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

  • @Cowboy8625
    @Cowboy8625 5 років тому

    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.

  • @thedankatheist3466
    @thedankatheist3466 5 років тому +1

    I love this video 3000

  • @mina86
    @mina86 5 років тому

    12:25 - 6.67e-11. No need for pow plus using e is likely more precise.

  • @mralextacy
    @mralextacy 5 років тому

    simply amazing

  • @robertlister5192
    @robertlister5192 5 років тому

    Hi I have a question on your 7.6 object intersection how would it work with a square and a circle intersecting?

  • @TheZenytram
    @TheZenytram 5 років тому

    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

    • @gderu6109
      @gderu6109 5 років тому

      You got the math a bit wrong. Rs/R=around 25.6

    • @TheZenytram
      @TheZenytram 5 років тому

      @@gderu6109 i did not see again :),
      the m87 black hole is around 120AU

  • @luckylmj
    @luckylmj 4 роки тому

    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!)

  • @EnfermeiroPensador
    @EnfermeiroPensador 5 років тому

    I think, is possible to use ray marching on top of that to create some kind of shader?

  • @morphman86
    @morphman86 5 років тому

    29:28
    Did that one photon just make an oberon maneuver using a black hole as its slingshot centre?

  • @M.MaX1
    @M.MaX1 5 років тому

    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

  • @goodclover
    @goodclover 5 років тому +1

    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?

    • @A1rPun
      @A1rPun 5 років тому

      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`.

  • @jamriissam5825
    @jamriissam5825 5 років тому

    Keep going you do awesome work ;)

  • @Pablo-um5cm
    @Pablo-um5cm 3 роки тому +1

    Good video, but you completely messed up with physics. For black holes you need to use relativistic mechanics and schwarzschild space-time metric.

  • @ThankYouESM
    @ThankYouESM 4 роки тому

    Request: Colliding Galaxies

  • @morphman86
    @morphman86 5 років тому

    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.

  • @02Inam
    @02Inam 4 роки тому

    could you do a video to show your setup

  • @KhrisnaGunanasurya
    @KhrisnaGunanasurya 5 років тому

    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?

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      This is from the p5.js library, for more: p5js.org.

  • @johnzhang1821
    @johnzhang1821 5 років тому

    Now ima going to try to do this in python

  • @rastislavsvoboda4363
    @rastislavsvoboda4363 Рік тому

    Ďakujeme.