Coding Challenge 181: Weighted Voronoi Stippling

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 ม.ค. 2025

ความคิดเห็น • 204

  • @DanielMiclos
    @DanielMiclos 10 หลายเดือนก่อน +263

    I just wanted to drop by and express my heartfelt appreciation for the amazing content you've been sharing on your channel. Your videos are not only educational, but also a huge source of inspiration for me and many others in the coding community. The generosity with which you share your knowledge and passion for coding is truly commendable. Thank you for being such a fantastic resource and for all the hard work you put into making complex concepts accessible and fun. Keep up the incredible work!

    • @tiagdvideo
      @tiagdvideo 10 หลายเดือนก่อน

      100%!

    • @Haagimus
      @Haagimus 10 หลายเดือนก่อน +1

      Would like to second this as well Daniel for making both education and programming fun and at the same time. I've watched you for years and years and I have always enjoyed everything that you've made, especially the coding challenges. For a little while, I even replicated some of the coding challenges in Python using the p5 package for python. Keep up the great stuff and don't ever stop Sir!

    • @arikardasis
      @arikardasis 10 หลายเดือนก่อน +2

      I was going to say "This rules. You rule". But your's is more good words.

  • @TheFlimTV
    @TheFlimTV 10 หลายเดือนก่อน +163

    I love how this feels both like a University Lecture, and a kids educational channel!

    • @jounouchi123
      @jounouchi123 2 หลายเดือนก่อน

      the pinnacle of eli5

    • @fuschia-draws
      @fuschia-draws 2 หลายเดือนก่อน

      perfect videos for adults who loved bill nye as kids

  • @xM0nsterFr3ak
    @xM0nsterFr3ak 10 หลายเดือนก่อน +151

    14:40 "This is lovely, but it's collapsing into an black hole..." That's a very funny quote 😂

    • @GoldbergToastyBred
      @GoldbergToastyBred 10 หลายเดือนก่อน +3

      it looks so organic there

    • @jaredgreen2363
      @jaredgreen2363 10 หลายเดือนก่อน +6

      Accidentally made a gravity simulator…

  • @conorohagan9947
    @conorohagan9947 10 หลายเดือนก่อน +19

    I love your enthusiasm and I really appreciate that you show your mistakes and laugh about them. Let's be honest, learning to program is boring. You make it really fun.

  • @orangejuice732
    @orangejuice732 10 หลายเดือนก่อน +23

    In college a was an undergraduate research assistant converting a 2d voronoi lattice simulation to 3d. 7 years later I think I finally have a grasp on what that simulation was actually meant to do because of this video so thank you.

  • @nicolaswinck9562
    @nicolaswinck9562 10 หลายเดือนก่อน +21

    how fascinating it was to see Gloria Pickle turning into Gloria pixels! you make it look so easy!

    • @radadadadee
      @radadadadee 10 หลายเดือนก่อน +3

      I program for a living and I couldn't agree more. He makes it looks so easy! But I know it's much more complicated, he's just so good at his job.

  • @vcvracarkad
    @vcvracarkad 10 หลายเดือนก่อน +48

    I'd love to see this done for each R G B channel individually. i think that would create a really cool comic book type of effect.

  • @sentinelaenow4576
    @sentinelaenow4576 10 หลายเดือนก่อน +12

    The Coding Train is by far the most awesome educational and inspiring coding lessons there is. Thank you so much for sharing your coding adventures, you are the best. ♥

  • @TheMasonX23
    @TheMasonX23 10 หลายเดือนก่อน +3

    As a former graphics programmer, I loved this! Also, your enthusiasm and positivity is infectious! Love it man, always happy to hop on board!

  • @mariovelez578
    @mariovelez578 10 หลายเดือนก่อน +2

    Can’t believe this guy taught me so many wonders of coding back in the day and he’s still going! Keep up the good work!

  • @guzman-do
    @guzman-do 5 หลายเดือนก่อน +2

    This channel is the best programming channel on TH-cam... You make the most difficult concepts simple.. amazing

  • @barco10001
    @barco10001 10 หลายเดือนก่อน +3

    In all my (few) but intense years of learning creative coding I have not had a greater source of learning and inspiration from your channel. Your ways of teaching and exploring deep and complex topics of creative coding are amazing, fun, and highly enjoyable. The coding community cannot thank you enough!

  • @HeadmostCantaloupe
    @HeadmostCantaloupe 9 หลายเดือนก่อน +3

    I love the new editing style Dan! Feels refreshing to see intros and the Apple ][ jingles being used in the beginning of the video!

  • @RyanMcCoppin
    @RyanMcCoppin 8 หลายเดือนก่อน +2

    Dude, you are doing a great job. You are personally entertaining, you are providing problem solving techniques and the projects you are doing are very cool. I'm glad I found this channel.

  • @MyCodingDiary
    @MyCodingDiary 10 หลายเดือนก่อน +9

    You're doing a fantastic job. Don't ever stop creating!

  • @dr_ned_flanders
    @dr_ned_flanders 10 หลายเดือนก่อน +3

    Wonderful video, Daniel. I love how each video is so visual and leads me to learn a new algorithm or mathematical technique as well as improving my coding.

  • @Rand00mThing
    @Rand00mThing 10 หลายเดือนก่อน +5

    Wow I admire your coding skills. I could not do what you keep doing. I don't have the passion to always throw myself into new coding problems.
    I will never forget you, "Coding Rainbow" 🙏

  • @hamiltonianpathondodecahed5236
    @hamiltonianpathondodecahed5236 10 หลายเดือนก่อน +2

    Every time you introduce some idea, I feel like, "yeah sure, I know the math, that's how that works, no way you can implement it in a single video", then you simply code it up. I am amazed.

  • @agzertuche
    @agzertuche 10 หลายเดือนก่อน

    Thanks!

  • @CocoaBeans660
    @CocoaBeans660 10 หลายเดือนก่อน +3

    This guy makes me so happy and is such an inspiration for TH-cam and coding in general. I love it

  • @cashewABCD
    @cashewABCD 6 หลายเดือนก่อน

    Watching these for free, what a great world your building, thank you!

  • @MarioTorre
    @MarioTorre 10 หลายเดือนก่อน

    Pretty good stuff. This seems a very useful method to correctly simulate film grain in a digital photo

  • @krepker
    @krepker 10 หลายเดือนก่อน +1

    Mindblowing His ability to pick some abstract concept and just use it to solve an real problem in minutes

  • @munzeralseed
    @munzeralseed 10 หลายเดือนก่อน +24

    Love it! It reminds me of a technique you used before, which is Floyd-Steinberg dithering. However, this one seems more challenging since you used an external library, but it sets a challenge to write the whole algorithm from scratch and optimize it, which I think I will attempt!

    • @TheCodingTrain
      @TheCodingTrain  10 หลายเดือนก่อน +6

      oh, please do! I would love to see it!!!

    • @SianaGearz
      @SianaGearz 10 หลายเดือนก่อน

      Floyd Steinberg performs error diffusion in some direction, whatever direction you're scanning towards, say towards bottom right, so if you apply it to a moving image, your start of scan is relatively stable say top left corner but your bottom right is very noisy. This isn't visible in static images, only moving.
      You could potentially start scanning out from the middle but that doesn't really solve the problem, it will still be obvious where the noise is eminating from.
      There's a more modern algorithm with a similar visual outcome to Floyd Steinberg but without bias in any direction, where you use a precomputed blue noise as a threshold function, and you can reuse the same across frames or use a spatiotemporal variant, and the way to compute this blue noise, the foundation is in this very video - Lloyd's Relaxation of a random point set.
      Blue noise sampling is the foundation of a lot of modern stochastic rendering methods in graphics. There's a whole research group at Nvidia concerned with blue noise.

    • @landsgevaer
      @landsgevaer 10 หลายเดือนก่อน

      You don't need voronoi for how it was eventually done.
      You could just determine the point that is closest to the pixel ... (That point's voronoi cell will contain the pixel.)

    • @a.lollipop
      @a.lollipop 7 หลายเดือนก่อน

      ​@@landsgevaer the voronoi diagram is necessary for getting the polygons whose centroid the points move to.

    • @landsgevaer
      @landsgevaer 7 หลายเดือนก่อน

      @@a.lollipop Like I said, you don't need it anymore the way it was eventually done. I gave the much simpler alternative above...

  • @pattvira
    @pattvira 10 หลายเดือนก่อน +2

    I felt so relaxed watching this 😌with a nice touch of Dan's enthusiastic sounds every time he got the next thing to work. Jokes aside! Got lots of inspiration from this tutorial - thank you Dan!

  • @JUNGELMAN2012
    @JUNGELMAN2012 10 หลายเดือนก่อน

    Hands down....Black belt in coding. I love it.

  • @paper_airplane
    @paper_airplane 10 หลายเดือนก่อน

    Just wanted to note that there are more sophisticated stippling algorithms, like the one based on power diagrams, which is a generalization of Voronoi diagrams (implementing it _is_ a coding challenge). See "Blue noise through optimal transport" paper for details.
    Besides, you check whether the center of each pixel is inside the Voronoi cell to calculate its mass center. Considering each pixel as a square and calculating the intersection area with each Voronoi cell will give a significant quality improvement for the Lloyd algorithm.

  • @rohitwesley
    @rohitwesley 10 หลายเดือนก่อน +2

    Hay i been braking my head on this algo for the last yr, was exploring how to go from delaney to nanite 😂 and went as mad as you have, 😅 the fact that u had a hard time, makes me not feel so dumb anymore, not to take anything away from you, love your stuff watch as many as i can, would love to see you experiment with shadertoy constraints and do some crazy stuff 😊

  • @dgo4490
    @dgo4490 10 หลายเดือนก่อน +1

    This algorithm is good for relaxing UV maps for unfolded meshes for artist texturing. The "raster dots" effect can easily be achieved by averaging the image into boxes of n by n pixels and drawing a circle scaled to the magnitude of the average value. Instead of scaled the dot can also be proportionally occluded by another offset dot masking it out, or a hole dot within the dot and whatnot...

  • @menaced.
    @menaced. 10 หลายเดือนก่อน +11

    This is basically just shader math, you should try doing a video about/using glsl or hlsl, theres some fun stuff you can do with them, maybe use shader toy? (Never used it bc Im a gamedev so use shaders in engine/in opengl)

  • @GoldbergToastyBred
    @GoldbergToastyBred 10 หลายเดือนก่อน

    Im so excited! I saw your video on nebula tv but i didnt had any subscription so i couldnt watch i didnt think you would upload it this early

  • @Autopawn
    @Autopawn 10 หลายเดือนก่อน +2

    Thank you! Your work is inspiring 😄

  • @Hamomim1
    @Hamomim1 10 หลายเดือนก่อน

    My brain hurt, but I was amazed by the beauty of mathematics and your explanation. I have been following it more or less for years. thanks

  • @ThugLifeModafocah
    @ThugLifeModafocah 10 หลายเดือนก่อน +2

    I understood the absolute number of ZERO things. Thank you.

  • @soadsam
    @soadsam 10 หลายเดือนก่อน +5

    babe wake up! new coding train video just dropped!

  • @BillionPlusOne
    @BillionPlusOne 10 หลายเดือนก่อน

    This was super fun to watch, thanks so much!

  • @aeschynanthus_sp
    @aeschynanthus_sp 10 หลายเดือนก่อน +1

    The formula for the area of a polygon is the famous shoelace formula! Mathologer, among other people, has a nice video about it.

  • @Flackon
    @Flackon 10 หลายเดือนก่อน +3

    Back in the day I made a random map generator and the coastlines and elevation features were drawn via voronoi diagrams. I coded the main app in p5 but also imported d3 for the voronoi computations, so, yeah. No shame in that, lol.

  • @astropgn
    @astropgn 10 หลายเดือนก่อน

    This has been my favorite channel since I don`t know, 2017

  • @kasperchristensen8416
    @kasperchristensen8416 10 หลายเดือนก่อน

    Thank you for another great video, Mr. Shiffman 😁👍

  • @gazzaka
    @gazzaka 10 หลายเดือนก่อน

    You are brilliant...loving the videos, thanks 🙂

  • @xenedon1509
    @xenedon1509 10 หลายเดือนก่อน +1

    well that was awesome

  • @HomeofLawboy
    @HomeofLawboy 10 หลายเดือนก่อน +1

    14:43 God coding the fabric of spacetime

  • @Tomtekavler
    @Tomtekavler 10 หลายเดือนก่อน +1

    I can't and have never coded in my life but i still love your videos!

    • @SianaGearz
      @SianaGearz 10 หลายเดือนก่อน

      You can. Just start somewhere and one step at a time.

  • @gfabasic32
    @gfabasic32 10 หลายเดือนก่อน

    Such a great series!

  • @galzajc1257
    @galzajc1257 10 หลายเดือนก่อน +1

    fun fact: we just had those in our first lecture of solid state physics this monday. i'm deffinitely tempted to make a 3D version of this, and make it efficiently, that seems like a fun geometric problem.

  • @mrmb84
    @mrmb84 10 หลายเดือนก่อน

    The black hole! 😯 Unexpected but so cool!

  • @adamgliwa896
    @adamgliwa896 10 หลายเดือนก่อน

    Hard work, and good explanation. Very helpful! 👍

  • @EXPLAIN_TO_YOURSELF
    @EXPLAIN_TO_YOURSELF 10 หลายเดือนก่อน

    Maybe I should leave a comment on each video you upload. Whenever I'm coding or facing a task, I play one of your challenge videos. They inspire and empower me to overcome the obstacles in my tasks.

  • @flameofthephoenix8395
    @flameofthephoenix8395 10 หลายเดือนก่อน

    0:39 Yeah! I kind of am a little confused about that particular thing, currently what I've always thought them to be was when you take a bunch of points with a given radius, then starting with the highest radius and going down just render every circle, then bits closer to a point will be prioritized over ones further resulting in segments being created. But it was never really clear whether this was actually Voronoi or just another simpler method intended to replicate it.

    • @flameofthephoenix8395
      @flameofthephoenix8395 10 หลายเดือนก่อน

      8:29 Ah! So, it sounds like the method I learned actually is Voronoi and it's much more efficient for finding the areas than the method of having each pixel calculate their distance.

  • @sachinsurya007
    @sachinsurya007 10 หลายเดือนก่อน

    You are Bob Ross of programming

  • @allaze-eroler
    @allaze-eroler 6 หลายเดือนก่อน

    It’s been YEARS (about 5 to 8 years) that i was looking something exactly that! It would have been immensely interesting to adapt it as a lizard skin! I’m now curious how it will be done with blender (open source 3D modeling software) my idea was to use the white color as inexistant scale while the black color would represent the smallest scale of a lizard. Your example is exactly what I’m trying to reproduce as a lizard skin generator!
    Anyway, thank again for the amazing video you did here!

  • @randospawn7495
    @randospawn7495 10 หลายเดือนก่อน

    I like dithering in art, it looks cool

  • @kuoyulu6714
    @kuoyulu6714 10 หลายเดือนก่อน +1

    I have no idea whats going on but this is so cool 😃

  • @PumpiPie
    @PumpiPie 10 หลายเดือนก่อน +1

    amazing :D

  • @riccardoronconi2146
    @riccardoronconi2146 10 หลายเดือนก่อน

    Well. This was pretty amazing

  • @realcygnus
    @realcygnus 10 หลายเดือนก่อน

    Good one Dan !

  • @IgneousGorilla
    @IgneousGorilla 10 หลายเดือนก่อน

    Amazing video!

  • @DarkoRomanov
    @DarkoRomanov 10 หลายเดือนก่อน

    The black holee is mesmerizing

  • @metallust
    @metallust 10 หลายเดือนก่อน

    Cool as always

  • @kevinrichter6503
    @kevinrichter6503 10 หลายเดือนก่อน

    Small mistake on 9:07, where the last circumcircle of the right triangle should be. But overall, that was a fun and educational coding challenge! As always ;)

  • @PaulMurrayCanberra
    @PaulMurrayCanberra 10 หลายเดือนก่อน

    @4:31 Other ways to convert an array of x/y into a flat array of pairwise numbers:
    const somePoints = [{x:1,y:2},{x:3,y:4},{x:5,y:6}];
    const method2 = [];
    somePoints.forEach(p => {
    method2.push(p.x);
    method2.push(p.y);
    });
    console.log(JSON.stringify(method2));
    const method3 = somePoints.reduce((vec, p) => vec.concat([p.x, p.y]), []);
    console.log(JSON.stringify(method3));
    .forEach is quite a bit better than writing for loops. .reduce is for functional programming weenies, although it is admittedly cool and tends to be compact.

  • @aquelaquelaquelaquel
    @aquelaquelaquelaquel 10 หลายเดือนก่อน

    Man.. I really love your videos although I don't code almost at all.. but damn i like how you integrate things that are pure abstractions for me into applicable real projects. You are a true professor.

  • @knevari3952
    @knevari3952 10 หลายเดือนก่อน

    You are the best !

  • @samable9585
    @samable9585 10 หลายเดือนก่อน

    I like ,relax, followed by head scratching 😂😂

  • @PeterHellmich
    @PeterHellmich 10 หลายเดือนก่อน +2

    Could be a beautiful effect to transform from the totally distributed dots to those of the image.

    • @munzeralseed
      @munzeralseed 10 หลายเดือนก่อน +1

      He already did it with the logo at 0:09 and it looks so cool!

    • @PeterHellmich
      @PeterHellmich 10 หลายเดือนก่อน

      Okay but how? Simply the reversed process?

    • @munzeralseed
      @munzeralseed 10 หลายเดือนก่อน

      Yes I think so

  • @vicentesoto1628
    @vicentesoto1628 10 หลายเดือนก่อน

    geez xD this is high vibration content
    Loved it
    Is it maths, cs or stand up comedy though

  • @aleksander5127
    @aleksander5127 10 หลายเดือนก่อน


    I love your content. If you allow me, here is a suggestion. You could implement an algorithm to find the path to the goal on the Micro Mouse Race.

  • @tyhuffman5447
    @tyhuffman5447 10 หลายเดือนก่อน +1

    Stunning as always!

  • @Crazyclay78YT
    @Crazyclay78YT 10 หลายเดือนก่อน

    oh man ive been wanting to do this

  • @HexaflexagonFan
    @HexaflexagonFan 10 หลายเดือนก่อน

    the point where you made the points relax based on the centre of gravity could (maybe) be used for liquid simulation

  • @tiosam1426
    @tiosam1426 10 หลายเดือนก่อน

    It's a translation of light and shadow with a circle radius variation.

  • @nembobuldrini
    @nembobuldrini 10 หลายเดือนก่อน

    fascinating and relaxing

  • @stabilini
    @stabilini 10 หลายเดือนก่อน

    Amazing content, thanks !

  • @StefanWolfrum
    @StefanWolfrum 10 หลายเดือนก่อน

    Wow, so cool!!! ❤

  • @yertzar775
    @yertzar775 10 หลายเดือนก่อน

    This is actually part of Solid state Physics formulation of the K-Space for electrons

  • @YuHayate
    @YuHayate 10 หลายเดือนก่อน +2

    Coding Challenge 182: edge detection?

  • @KeithKritselis
    @KeithKritselis 10 หลายเดือนก่อน +2

    “Let's put them into an array. And lerp the original points towards the centroid.” It seems weird that I understand that...

  • @MatheusLeston
    @MatheusLeston 11 วันที่ผ่านมา

    22:10 was 🤯

  • @anon_y_mousse
    @anon_y_mousse 10 หลายเดือนก่อน

    This does look like fun. I think I'll try it in C with RayLib, and use color. This might make for a really cool image viewer.

  • @olli3686
    @olli3686 10 หลายเดือนก่อน

    Wow! Last week, I wrote a kinetic voronoi algorithm which doesn't require any triangularization

  • @landsgevaer
    @landsgevaer 10 หลายเดือนก่อน

    Instead of converting points to voronoi, and then figuring out which polygon a pixel is in, you could just determine which point is closest to the pixel...
    (The trick with remembering the previous pixel's index still works, or you could use a k-d Tree to make it efficient.)

  • @clearwavepro100
    @clearwavepro100 10 หลายเดือนก่อน

    Excellent!! :)

  • @programmieraufgaben8391
    @programmieraufgaben8391 10 หลายเดือนก่อน

    thats cool!

  • @RikMaxSpeed
    @RikMaxSpeed 10 หลายเดือนก่อน

    Lovely video but I lost count of the misspelled Dalaunays? 😅

  • @Jova
    @Jova 10 หลายเดือนก่อน

    Awesome!

  • @flameofthephoenix8395
    @flameofthephoenix8395 10 หลายเดือนก่อน

    While unrelated to this particular video, surely this comment section is as good as any! I was thinking about how it may be nice to see what you can do with exclusively bill-boarding in 3d graphics, there's of course traditional bill boarding, but you can also make other bill boarding rendering techniques, like for instance rendering 3d lines, this is where you position your image in-between the projected versions of two points then scale it up according to the distance between them and rotate it to fit between, this works really well for a similar cost to standard bill-boarding, you can also do something similar to traditional bill boarding but where you place the image at the incenter of the projected version of a 3d triangle and of course scale it to the size of the incenter too, though I haven't worked out how you could also try incorporating rotation into that to make it a little better. Regardless, I'm curious just how far you could go with just methods like these, I've already made some interesting things with it like a spider since spiders are mostly just lines anyway that could be made out of the 3d line rendering, similarly skeletons would be easy, but for anything beyond that you may need to get super artistic with both traditional and incenter bill boarding plus possibly making new rendering techniques.

  • @MartinSvandaDeveloper
    @MartinSvandaDeveloper 8 หลายเดือนก่อน

    oooooh man you are really crazy

  • @RedHair651
    @RedHair651 10 หลายเดือนก่อน

    I'm currently learning Apps Script for work as a Python person in private, and this video gave me violent flashbacks.

  • @npexception
    @npexception 10 หลายเดือนก่อน

    This looks like a great way to create something that can be fed to a pen plotter. I imagine a giant stipple plot of a picture of my cat :D

  • @somedude5951
    @somedude5951 10 หลายเดือนก่อน

    Would be great to have a shader for that effect.

  • @jvsonyt
    @jvsonyt 10 หลายเดือนก่อน

    15:08 it would be cool if you wrapped the averaging code in an "if then" with a size greater than or equal to like 9 pixels or something to limit how deep the blackhole became

  • @adrinoadrino6832
    @adrinoadrino6832 10 หลายเดือนก่อน

    Reminded me of Origami and Crease Pattern

  • @TheGoatsy
    @TheGoatsy 9 หลายเดือนก่อน

    How does your preview change dynamically?? Like damn

  • @muhammadikmal9626
    @muhammadikmal9626 10 หลายเดือนก่อน

    Where did you do your livestreams?

  • @pt_codes
    @pt_codes 10 หลายเดือนก่อน

    I hope one of you train enthusiasts can answer this - how did you know the delaunay portion of the d3 library was available from the cdn (with that particular url)? I looked on the d3 site and I couldn't find the option of linking to just portions of the d3 libraries without using import statements etc. I much prefer your method of just putting it as a source in index.html, but don't know how to find that it exists? Great video!

  • @JaafarCherkaoui
    @JaafarCherkaoui 10 หลายเดือนก่อน

    Nice

  • @coder0xff
    @coder0xff 10 หลายเดือนก่อน

    I wonder if there are simpler ways to achieve the same effect, like have the points attracted to dark pixels and repeled by eachother.

  • @iamtimsson
    @iamtimsson 10 หลายเดือนก่อน

    how did you and the paper fit under your pillow and did you use protection? twofish?

  • @geoffwagner4935
    @geoffwagner4935 10 หลายเดือนก่อน

    Who ever decided on "ducks" at Columbia Collage was a genius, you'd have to be to pick an animal that just says quack all day long as they walk up and down the sidewalk.