They way he get things wrong really help me to not feel so anxious by making mistakes on my own projects. He Just makes mistakes look "fun" that really motivates me to pickup old projects from earlier
I'm not even a programmer and I enjoyed watching this from beginning to end! Even lifted my spirits a bit because the coder has such a bright and fun personality. Loved the finished result. Screenshot it so I could share it with others. Thank you for this!
@@TheCodingTrain It was recommended to me. I'm into studying a bunch of things. Mathematics/physics... Weird mysticism stuff 😆 I watched a numberphile video on The Hilbert Curve and I think that's why it was recommended by TH-cam for me 🤷 I'm really interested in watching lectures on topology & geometric knots. 😅 I get around LOL!
These videos are amazing. I used to hate coding but after watching and following along with a few of your vids I’m starting to love it. There’s so many Amazing possibilities!
Great video, I love the very personal feel of the cabana!! It is fantastic that you show the whole process of coding, including planning, research, errors, and debugging.
I love your Coding in the Cabana series! It's really like how I program for fun -- just play around with math, noise, cellular automata, and procedural generation in a creative/artistic way. It's soo much fun and every once in a while you discover something really cool! :)
I know it's not the Processing way, but I think this curve drawing is worth revisiting recursively. In particular, the 3b1b videos on the towers of hanoi and sierpinski's triangle have a really neat perspective on the recursion. In this case, we're counting in base 4, with a flourish of rotation and translation thrown in between the subtasks. I don't know if processing can cleanly express that idea, but I'd love to see the more pure, if less perfomant, solution.
Actuallly, the nice thing about the Hilbert Curve is that u can map every Point of an INFINITE plane to one single scalar. When just counting line by line, u already couldn't count the second line, because those values are infinite, cause the first row is infinite. Nice video :D
funny how I instinctively guessed this was filmed in Brooklyn by seeing the opening snowing scene --- Brooklyn just has a unique architectural look --- justifiably nonplus yet pervasive block after block
I know this video is fairly old now; I implemented this in java with java fx recently for a project (super helpful video, thank you!). I found you get a really cool fractal effect if you draw the order 8 curve in 1024x1024 window and only draw the line if the point you are drawing's index modulus 1.5 is 0. You get some really cool and wacky effects if you change the order or the 1.5 to other values. Take a look and let me know what you think! private void draw() { for (int i = 1; I < path.length; i++) { // Start at one so we can draw backwards. double hue = map(i, path.length); gc.setStroke(Color.hsb(hue, 1, 1)); try { // Draw the line if (i % 1.5 != 0) { gc.strokeLine(path[i].getX(), path[i].getY(), path[i - 1].getX(), path[i - 1].getY()); } } catch (IndexOutOfBoundsException ignored) { }
} } private double map(float coordinateIndex, float maxIndex) { return (coordinateIndex/maxIndex) * 360; // Note that when using the hue value in the hsb method, it will loop round to red } Not sure where I can post an image of it so that's why I am dumping here. Let me know if you try it or where I could post the result! P.S. This is not my actual draw function, this is a simplified version since I had to optimise mine for an AnimationTimer class.
Hey, just saw all the Cabana videos today, and I loved them all! Maybe the next one could be a tutorial on how to plant all those beautiful flowers from the previous episodes! The timing couldn't be better, since you guys at the northern hemisphere are entering Spring haha. Cheers!
"You guys are probably screeming at you're television, nobodys watching this on television..." well umm Im actully doing both... my dog thinks im crazy
The amazing thing about the Hilbert Curve is very clearly shown in the video at 25:15 where you color it and increase the order, the colors would still be mapped to the same location, whereas if you'd color it just line by line, and increase the order, the result would look completely different for each order, not stabilizing at any point, whereas when filled with the hilbert curve, the color at each point is the value of the hilbert curve color mapping for order to infinity. This color can't be defined for the line-by-line mapping.
Perhaps a random catch-phrase generator is in need :) Perhaps the excitement this would bring at the end of each episode would be too overwhelming, however. Thanks for the maths, Uncle Shiffles x
I tried Hilbert curve in Unity, transforming it to Hilbert maze, Really beautiful to dive into this amazing maze , I skip one wall each time randomly choosen So that even I, have no idea where the exit could be. Thanks Daniel for this beautiful video.
@20:49 -- err, I've only ever watched your videos on my TV; and yes, I spend a significant amount of time shouting at the TV about something or other that you get wrong (but usually eventually fix). 😅
I'm a bit confused at 4:20, if you rotate the original connection on the top left counter clockwise wouldn't it be connected to the higher up point? How do you decide where to connect there?
I know that I am about 3 years behind on this video but as a computer science student I might build an app. One that takes in a certain image and converts it to a Hilbert curve pixelation as a research project. Just an idea. Either way, I love your videos man!
Dude, you're awesome! I'm sitting under my (diagonal) window a lot, even when it's winter outside. Got me some hot tea and as long as the wind's not chilling my hands I'm a happy little camper. :D
Absolutely fascinating. I need to learn more maths. But I think I can use this to smoothly transition an RGB LED through every color in the spectrum...time to hook up the Arduino and start tooling around.
Instead do it in python, create an explanatory video about it, and submit in manim discord channel for summer of math exposition 3. Wishing you good luck
L => +RF-LFL-FR+ R => -LF+RFR+FL- Where * means to change the direction of rotation and (.) period means to rotate. L needs to be rotation & direction neutral, or fixups would be required after each L. Splitting the rotate operator allowed further optimization because the first four symbols repeat. Leading to: L => RRL.F*L.* R => *.LF
Hilbert curbe is cache unfriendly. The average distance between points A and B that are one step away is about 1/2 the total number of cells you have. On a small scale it looks great, but when you cross from boundary 4 to 5 what would normally be only +/- 1 row pitch or one cell left/right is significantly further. ... I put together a program and added an averge for each cell the offset to the next cells above/below/right/left of the current and it was sinificantly bad at > like a 5x5 square, and my voxel sectors are 32x32x32. That put most accesses in seprate pages for every point in many points of the cube.... since it's only 32 (times 8 for cell data size) 256 bytes from one row to another instead of 16384 .... memory pages are cached in 4k chunks.... But you're doing it all in JS so what does it matter? it's not like your mapping typed arrays
So say now all the points are calculated how would one go about adding triangles to make a terrain? Then have the triangles scale with the order as a type of LOD system.
How about a recursive approach? Roughly speaking, to draw nth-order curve, draw 4 n-1 order curves rotating and positioning appropriately. When n is 1 just draw the simple U-shape and a line to connect to the next one.
I watch the vast majority of TH-cam on my television 😉 Phones are for texts, phone calls and photos, tablets are for browsing and media consumption when on the go!
This is quite cool! Though, about the hilbert function, couldn't it have been made recursive? So the function would get the order and call 4 copies of itself with a lower order.
I took a look at your P5*JS version of this Hilbert Curve program and added a sleep() function so it would pause after completing each plot. I found that it would not show the complete final quadrant of the plot. This was due to your code that increments your counter variable by 50 which I think you did in order to speed up the program, plotting the new stuff in batches of 50 instead of 1 by 1. The result was the final batch which probably was not an even multiple of 50 would not get plotted. When I changed the code so the counter variable was incremented by 1 instead of 50, I found it plotted most of the final quadrant... all except for the last two lines of the last Hilbert Curve. I took a closer look at your code and in two places I decided you should be using a "
Can u make a coding video in which we can turn any number or letter into binary form and can u re-edit the same code to turn it in ternary form pls thanks
Catchphrase: “I’ll see you at the next stop”
Like how trains stop at each station
The thought is beautiful and wholesome. Hope Coding Train adopts it.
please keep doing these. You are the reason I started to genuinely enjoy programming :))
They way he get things wrong really help me to not feel so anxious by making mistakes on my own projects. He Just makes mistakes look "fun" that really motivates me to pickup old projects from earlier
@@amund8767 I can relate. Truly the Bob Ross of programming.
"Nobody is watching this on a television"
Yeah, about that...
CrashingThunder me too
Using my TV as a second monitor so yea...
Came here to say this.
Ditto, thanks Roku. 😁
Here, here.
This may be the single best series out there
he cordially codes in the cold cabana, regardless of the condensation conundrum
I love your enthusiasm Mister Shiffman! This is wonderful
I'm not even a programmer and I enjoyed watching this from beginning to end! Even lifted my spirits a bit because the coder has such a bright and fun personality. Loved the finished result. Screenshot it so I could share it with others. Thank you for this!
How did you find this video?
@@TheCodingTrain It was recommended to me. I'm into studying a bunch of things. Mathematics/physics... Weird mysticism stuff 😆
I watched a numberphile video on The Hilbert Curve and I think that's why it was recommended by TH-cam for me 🤷
I'm really interested in watching lectures on topology & geometric knots. 😅
I get around LOL!
Catchphrase: Remind me to refactor this later, bye
I love the fact you are always happy and smiling it's so cheering
"Nobody is watching this on a televison"
I feel attacked
As usual I’m terribly misguided in my understand of the world!
I prefer TV to watch the coding train too! David, can I ask you to make video about different splines, but not Bézier curves?! Thanks!
I’m watching this on tv too! Blast it on my speakers so the neighbors can be interested! (Just kidding on that last bit)
This is so sweet!
I'm also very excited for the new nature of code series!
Keep up man :)
I watched 3blue1brown's video on the Hilbert curve a while ago........ I can already tell this video is gonna be fun
Your catchphrase should be: "Goodbye, and don't forget the this dot."
And after that, a "Choo choo!". That would be the perfect catchphrase!
Meh
Drop "the" , then it would be better.
wow, i was watching 3b1b's video literally 30mins before this got uploaded, and wanted to draw it in processing and now u post this, that's amazing.
Love how the animation finishes right at the end of the video!
Who could possibly dislike such a wonderful video like this. Thumbs up to you Dan!
love the way you code ...
it’s so homely, it’s so nice to see and hear you, keep shooting the video, and keep your joy to yourself always!
Loved the editing on this episode!
These videos are amazing. I used to hate coding but after watching and following along with a few of your vids I’m starting to love it. There’s so many Amazing possibilities!
17:00
float len = order;
v.x += order
...
Yep, seems about right xD
Great video, I love the very personal feel of the cabana!! It is fantastic that you show the whole process of coding, including planning, research, errors, and debugging.
telling me to hold on and wait a minute, like im just barely listening to you over my typing, just coding away, ha no im in amazement ha. love this
I watched on my TV, great coding, I had fun, thanks!
I love your Coding in the Cabana series! It's really like how I program for fun -- just play around with math, noise, cellular automata, and procedural generation in a creative/artistic way. It's soo much fun and every once in a while you discover something really cool! :)
Wonderfully explained! Thank you so much and please! Keep warm! I suffered watching you coding in that cold!
I know it's not the Processing way, but I think this curve drawing is worth revisiting recursively. In particular, the 3b1b videos on the towers of hanoi and sierpinski's triangle have a really neat perspective on the recursion.
In this case, we're counting in base 4, with a flourish of rotation and translation thrown in between the subtasks. I don't know if processing can cleanly express that idea, but I'd love to see the more pure, if less perfomant, solution.
Watching this during the summer in the middle of the corona virus, makes the cabana and snow look very enjoyable at this time.
Thank you for making programming so much fun. I have learned so many maths concepts from your coding videos. Thank you much :)
truly the famous last words every programmer has uttered at one point
Actuallly, the nice thing about the Hilbert Curve is that u can map every Point of an INFINITE plane to one single scalar. When just counting line by line, u already couldn't count the second line, because those values are infinite, cause the first row is infinite. Nice video :D
love this series. very soothing and calming, especially in my moments of feebleness. thank you.
funny how I instinctively guessed this was filmed in Brooklyn by seeing the opening snowing scene --- Brooklyn just has a unique architectural look --- justifiably nonplus yet pervasive block after block
I know this video is fairly old now; I implemented this in java with java fx recently for a project (super helpful video, thank you!).
I found you get a really cool fractal effect if you draw the order 8 curve in 1024x1024 window and only draw the line if the point you are drawing's index modulus 1.5 is 0. You get some really cool and wacky effects if you change the order or the 1.5 to other values. Take a look and let me know what you think!
private void draw() {
for (int i = 1; I < path.length; i++) { // Start at one so we can draw backwards.
double hue = map(i, path.length);
gc.setStroke(Color.hsb(hue, 1, 1));
try { // Draw the line
if (i % 1.5 != 0) {
gc.strokeLine(path[i].getX(), path[i].getY(), path[i - 1].getX(), path[i - 1].getY());
}
} catch (IndexOutOfBoundsException ignored) {
}
}
}
private double map(float coordinateIndex, float maxIndex) {
return (coordinateIndex/maxIndex) * 360; // Note that when using the hue value in the hsb method, it will loop round to red
}
Not sure where I can post an image of it so that's why I am dumping here. Let me know if you try it or where I could post the result!
P.S. This is not my actual draw function, this is a simplified version since I had to optimise mine for an AnimationTimer class.
Hey, just saw all the Cabana videos today, and I loved them all! Maybe the next one could be a tutorial on how to plant all those beautiful flowers from the previous episodes! The timing couldn't be better, since you guys at the northern hemisphere are entering Spring haha. Cheers!
"You guys are probably screeming at you're television, nobodys watching this on television..."
well umm Im actully doing both... my dog thinks im crazy
The amazing thing about the Hilbert Curve is very clearly shown in the video at 25:15 where you color it and increase the order, the colors would still be mapped to the same location, whereas if you'd color it just line by line, and increase the order, the result would look completely different for each order, not stabilizing at any point, whereas when filled with the hilbert curve, the color at each point is the value of the hilbert curve color mapping for order to infinity. This color can't be defined for the line-by-line mapping.
Just came to say... I watched this on a television! (And thank you!)
Love your work and your passion for programming. It is really inspiring, best wishes from Chile.
I watch all your videos on my tv lol my cats LOVE watching you code things
Perhaps a random catch-phrase generator is in need :) Perhaps the excitement this would bring at the end of each episode would be too overwhelming, however.
Thanks for the maths, Uncle Shiffles x
I tried Hilbert curve in Unity, transforming it to Hilbert maze, Really beautiful to dive into this amazing maze , I skip one wall each time randomly choosen So that even I, have no idea where the exit could be.
Thanks Daniel for this beautiful video.
Wow that looks really cold!
I have never been this early. I just randomly watch coding videos and whelp here I am lol
I like how his breath eventually stops steaming as the electronic equipment warms the cabana.
@20:49 -- err, I've only ever watched your videos on my TV; and yes, I spend a significant amount of time shouting at the TV about something or other that you get wrong (but usually eventually fix). 😅
my fingers are cold just watching!!!
catchphrase idea "May the code in your heart be the same code that fills your screens."
Awesome video. Thanks for enduring the cold for us!
I'm a bit confused at 4:20, if you rotate the original connection on the top left counter clockwise wouldn't it be connected to the higher up point? How do you decide where to connect there?
Nice, i was waiting for you to make it like a week before
The Bob Ross of coding
I only ever watch you on my TV. Loved this, very interesting.
I know that I am about 3 years behind on this video but as a computer science student I might build an app. One that takes in a certain image and converts it to a Hilbert curve pixelation as a research project. Just an idea. Either way, I love your videos man!
Nice touch with the notepad!!
5 minutes in and I had to go get a cup of tea! So cozy in your cabana
Dude, you're awesome! I'm sitting under my (diagonal) window a lot, even when it's winter outside. Got me some hot tea and as long as the wind's not chilling my hands I'm a happy little camper. :D
Colour ful animation😍 I am excited when I am watching the coding👏👌🙂
I have a suggestion for the catch phrase: "I will see you in the next iteration!"
Amazing video, much love from Romania!
I actually just watched this on my television.
I love what u do
Never stop it
Absolutely fascinating. I need to learn more maths. But I think I can use this to smoothly transition an RGB LED through every color in the spectrum...time to hook up the Arduino and start tooling around.
Instead do it in python, create an explanatory video about it, and submit in manim discord channel for summer of math exposition 3. Wishing you good luck
Hope you reach 1M subs soon.👍
I swear to god you are like the Bob Ross of programming
15:51 why didn't you use switch statement
I like this style of coding maybe more than your normal white board series!
Total awesomeness ! .....as usual
Bravo Dan!!
Interesting thing would be to give a function the x, y coordinate and return the index in the curve
Catch phrase: final station, please leave the train.
You should do a video based around the Feigenbaum Constant considering it is such a crucial part (as far as I know) of chaos theory.
Props for the editing.
Please make a video about dithering with hilbert curves
Thank you for braving the cold for us
I’m watching on my television!
L => +RF-LFL-FR+
R => -LF+RFR+FL-
Where * means to change the direction of rotation and (.) period means to rotate. L needs to be rotation & direction neutral, or fixups would be required after each L. Splitting the rotate operator allowed further optimization because the first four symbols repeat. Leading to:
L => RRL.F*L.*
R => *.LF
I'm currently working on programming a hilbert curve, and I've always reflected instead of rotate.
Hilbert curbe is cache unfriendly. The average distance between points A and B that are one step away is about 1/2 the total number of cells you have. On a small scale it looks great, but when you cross from boundary 4 to 5 what would normally be only +/- 1 row pitch or one cell left/right is significantly further. ... I put together a program and added an averge for each cell the offset to the next cells above/below/right/left of the current and it was sinificantly bad at > like a 5x5 square, and my voxel sectors are 32x32x32. That put most accesses in seprate pages for every point in many points of the cube.... since it's only 32 (times 8 for cell data size) 256 bytes from one row to another instead of 16384 .... memory pages are cached in 4k chunks....
But you're doing it all in JS so what does it matter? it's not like your mapping typed arrays
So say now all the points are calculated how would one go about adding triangles to make a terrain? Then have the triangles scale with the order as a type of LOD system.
This is how Ikea demo rooms are built.
How about a recursive approach?
Roughly speaking, to draw nth-order curve, draw 4 n-1 order curves rotating and positioning appropriately. When n is 1 just draw the simple U-shape and a line to connect to the next one.
You're like Santa in February!
This man is by far the best coding teacher. Jelous of the cabana. Where did NYU go?
It's still there, just another way for me to make videos!
4:25 creeper! aw man!
Man, you are awesome!
Do you think this program would be more optimal using a recursive function instead of an iterative one?
I watch the vast majority of TH-cam on my television 😉 Phones are for texts, phone calls and photos, tablets are for browsing and media consumption when on the go!
This is quite cool! Though, about the hilbert function, couldn't it have been made recursive? So the function would get the order and call 4 copies of itself with a lower order.
loops are actually sort of recursive functions
"whoopsie! that's our destination for the day" Catchphrase idea haha
I took a look at your P5*JS version of this Hilbert Curve program and added a sleep() function so it would pause after completing each plot. I found that it would not show the complete final quadrant of the plot. This was due to your code that increments your counter variable by 50 which I think you did in order to speed up the program, plotting the new stuff in batches of 50 instead of 1 by 1. The result was the final batch which probably was not an even multiple of 50 would not get plotted. When I changed the code so the counter variable was incremented by 1 instead of 50, I found it plotted most of the final quadrant... all except for the last two lines of the last Hilbert Curve. I took a closer look at your code and in two places I decided you should be using a "
Thanks for pointing this out!
Instead of bitshift 2 then and 3, could you just and 12? So instead of masking with 1 and 2 after shifting 2, could you and with 4 and 8 (12)
You can also generate Hilbert curves with an L-system then use the resulting string to rebder with turtle graphics.
it looks like an episode of frozen
At least in this video he was seated.
Please keep your warm beverage a bit further from your wonderful device. Making me spill nervous
And here’s me thinking of just creating the first cell and duplicating the window as a PImage in the appropriate orientation four times...
Do you have another space filling curves?
Can u make a coding video in which we can turn any number or letter into binary form and can u re-edit the same code to turn it in ternary form pls thanks
Ooh great topic with a great venue!