I dont mean to be offtopic but does any of you know of a tool to get back into an Instagram account?? I was stupid forgot the login password. I would appreciate any tricks you can give me!
@Raylan Decker i really appreciate your reply. I got to the site thru google and I'm waiting for the hacking stuff atm. I see it takes quite some time so I will get back to you later when my account password hopefully is recovered.
I really hope there are people here that haven't yet heard about Sebastian just so that they may now have the pleasure of finding his content for the first time. This channel and his are what keep me invested in programming as a form of expression.
I followed along with this. I've been "coding" as a hobby since 1983 (when you had to do a little coding to even get a PC to work). I gave up trying to keep up with the latest programming languages around the late 90s - early 2000s, although I am a C# fan (don't hate me--it's cheap). I'm a salty old man, now, but I appreciate your content. You make programming fun again. This one was especially fun--Marching Squares/Cubes is a concept I'd never heard of. Still, the potential applications (such as the mentioned Sebastian Lague's excellent series on cave generation) interested me. I tried doing some of the further challenges here and figured out for myself an algorithm for linear interpolation. It took me two days, but it was great fun. I had so much fun that I joined. Thanks, Dan.
My aversion is spacing, to me spacing elongates code lines and makes them harder to read. Anytime I am trying to understand some bit of someone else's code I first delete all unnecessary spaces. Spaces bad.
@@zebratangozebra for me personally it makes it a lot more readable, as i then can often look at a block of similar code as a whole and see what's going on in it, instead of having to go through every line separately. For small stuff like this it usually isn't a problem, and i don't always do it, but when the lines get really long, i do it a lot.
@@zebratangozebra in many coding languages I think you can have a code internal line break. And with those you can make pretty consistant looking code with some automatic formatting tools. E.g. they make you use shorter lines, or format it like that. Yet in principle you could still discuss about if you want to have spaces or not at all. I think I'd opt for spaces. Easier to read
"Is there a more efficient way than writing a line of code for each possibility? Possibly" vs "We're writing it this way, not for efficiency, but for understanding"
Writing it this way is the most efficient because it allows you to use a switch statement. You can find a way to write it with fewer lines of code but that won't make the code faster since you will undoubtedly require several nested "if" statements which are much slower than one big switch statement.
@@jensBendig If you were going to go down that route a hash-map would likely be better since you could map each value to a solution. either way you are going to have to declare all those solutions at some point, it's just a matter of whether or not the switch is making the code less readable. (In a better editor such as vscode you could just hide the logic in the switch statement too which could be a nice solution)
@@bradfin12 I like you. At least I like this attitude. Terry Davis made an interesting remark about Switch statements, too. Not sure if it applies in something as high-level as Processing or the JS-Processing, but whatever.
@@rabbitcreative Im not 100% sure but i think Davis would prefer fewer lines of code. Davis had two goals in mind when writing code: beautiful simplicity, and small file size. When doing large switch statements that process every case in the most efficient way is a somewhat ugly way to code and can increase file sizes which doesn't matter to most programmers but it would certainly matter to davis who wanted a divinely lightweight operating system.
I kind of liked when the mic was in the table and I could hear more of the background noise. It made me feel like I was there in the Cabana too. Great video, as always!
Daniel, I follow you since 2016, I found out about you at the start of my most productive phase of my life, first year of the university, you tought me so much, without you I would not be the same person whom I love. Great work as always, thank you so much.
Not only that. I guess estetics can also have an impact on readability. Especially when having long fragments or even those that break lines within expressions. Those are kind of making a mess readible. Just wonder how they would look like if you mix in random spacing. Sometimes yes sometimes not. errr pretty sure I wouldnt like it
One time I had another dev almost screaming at me for doing that 🤣🤣🤣 (I am still doing it :) and blabla you folks 'its harder to maintain', sure, but it's so much easier to read!! )
I have also recently started aligning my code by argument. It makes the intent so much clearer and much easier to figure out why my code is broken. It looks beautiful, thanks for another awesome video!
Thank you so much for existing, your videos, your voice, your way of explaining and everything in between is so calming and wonderful. Thank you for the things you do for this community.
WOW WHAT A VALUABLE VIDEO AND I LEARNT MANY THINGS FROM THIS VIDEO AS WELLAS FROM THIS CHANNEL. I WOULD LIKE TO RECOMMEND THIS CHANNEL TO MY CODING FRIEND
First, I started with GML. I saw your name on a youtube channel, I looked one of your vid. Two. Three, four, five, and so on. the addiction begun. I was planning to make some short video game (and a little bit of teaching). I'm actually trying to do art, "paint", fractal, and music with processing, and most of all, you made it fun to me. You're god teacher, thanks you. And great kisses from Belgium !
Thank you for making videos like these. They're always about something new and interesting to learn while not being too large in scope. They also make me really want a cabana to code in.
Geometric algorithms are always great to watch and to understand. Not only to be used for a single purpose. They pop up pretty much everywhere. And many have been invented years and years ago.Almost forgotten maybe even. Nice intro :-))
This is so awesome! I love your videos, somehow they make me relax after spending hours coding for work. The way you make math, geometry and coding so approachable and fun is unique, congrats!
NGL, i used to always come up to your videos while doing some coding searches and brushed off cos, well, i code(at least try to LOL) in c# and tbh never ever even have taken a look at java/JS(yeah, pigheaded , i know) oh boy was i wrong, now i am hooked, never found someone that explains hard concepts, and make it so easy to understand like this thank you sir =) cheers from Brazil
LOVED THE VIDEO (of course). I stopped formatting my code when those auto formatters appeared. I personally would rather turn them OFF, but the team would use it and then auto format any CUSTOM formatting out of existence. I blocks of code it's SO much more readable to line up equal signs, commas, parenthesis, etc. Your eye is able to pull out differences in the blocks quicker and the similarities will blend together creating less noise. I swear I need to write my OWN auto formatter... One of these days...
Dan, we really need you to start a series of video about shaders and shading languages. I keep looking around on the internet but nobody seems to even come closer to your ability to teach.
Wonderful blocking in this video, I love how the OpenSimplex noise created a lot more spacious and separate areas. It would be amazing to see how this could be utilized the the creation of video game levels.
the algorithm for connecting the middle points for only one and zero can be reduced to 4 case: the 2 special cases where you have to draw 2 lines: when there are 2 1s that are on the same diagonals (cases 5 and 10). the case where you have to draw none(case 16) In every other case, find the 2 middlepoints between a 0 and a 1 and connect them. so the pseudo code would be: find the number of "alternating" midpoints: if 0: done if 2: connect the 2 if 4: check whether it's case 5 or 10 and draw accordingly
I'm not sure of the efficiency of this, but for determining where to draw lines, if we treat the square as the bits (in the order we would read them), so topleft, topright,bottomleft, bottomright. then the lines inbetwee also as binary numbers, in the order top,left,right,down, then you can treat 1000 (topleft corner only) as connecting the edges top and left (1100) 0100 (topright only) connects top and right (1010) 0010 (bottomleft only) connects bottom and left (0101), and 0001 (bottomright only) connect bottom and right (0011) SO to get to the point, if we treat every sequence of corners as their individual parts, then convert those parts into the edges they connect and xor them together, you get which edges to connect for example 1100 would be the top two edges, and they should connect left to right (ie 0110), so we can decompose them into 1000 as 1100 and 0100 as 1010, then bitwise xor 1100 with 1010 to get 0110 which is what we expect. Hopefull this made sense.
Never be afraid to google the syntax for anything. Programming isn't syntax its understanding the problem given and being able to break it down into small parts and keep track of those connections. I haven't been programming for 20 years but i have been for 10 and I switch between languages constantly throughout the day (c#, java, js, sql, html). I google how to make a switch or a foreach everyday because theres documentation for that but there isnt documentation for your app. What i mean is as long as you figure out the logic you can always google the syntax or as long as you figured out you need a switch on a enum you can always look up how to write a switch and an enum for your language.
I realised the moment you explore the idea of colour you could easily create a light + shadow system, Also the idea of a lava lamp might work from what you showed at the end. Iv been wanting to imagine how to make a lava lamp work for a long time some very cool stuff :D always a treat!
Amazing tutorial. I recreated this in python. For perlin noise I basically made the array and just add 0, -1 or 1 to the points, to either keep em at 1 or go to zero or go from zero to 1. Gonna figure out how to make a nicer version.
to get rid of switch statement you need to make an array of a, b, c, d (points) and array of of their connections and each connection is four digits where first two digits are describing first line ans last two describing second line if it exists (we need max two lines), so state = getState(...)and p1, p2, p3, p4 = points[connections[state][0]], points[connections[state][1]] ..., then you need to validate p3 and p4 and then lines are ready(still much code but more elegant)
The 16 configurations I think could've been sized down to four configurations based on symmetry. 1. No line: fig. 0 & 15 2. One corner line: fig. 1, 2, 4, 7, 8, 11, 13 & 14 3. One straight line: fig. 3, 6, 9 & 12 4. Two corner lines: fig: 5 & 10
One alternative to using a switch statement would be to use a 16-element array of 6-bit integers. e.g. (using C/C++ as that is what I understand) const unsigned lines_to_draw[] = {000, 001, 002, 020, 004, 005, 040, 010, 010, 040, 012, 004, 020, 002, 001, 000}; unsigned l2d = lines_to_draw[cuts]; // where cuts is a number representing the edges to cut if (l2d & 001) // draw line cutting off corner D if (l2d & 002) // draw line cutting off corner C if (l2d & 004) // draw line cutting off corner B if (l2d & 010) // draw line cutting off corner A if (l2d & 020) // draw horizontal line if (l2d & 040) // draw vertical line
I think the best option for shortening and performance enhancing the switch statement is to just use an array of line parameter values to look up, with index n being the 1st parameter of case n/2 and index n+1 being the 2nd parameter of that case (alternatively have all the 1st parameters in order, then all the 2nd). The fact that the cases are mirrored along the middle doesn't matter as the array can be hardcoded into one or two lines so its not shorter, and computing the reverse would be worse than having a bit more space allocated to the array. The array would act a bit like a dictionary/map of key:value pairs, except the index is the key -1. Edit: just realised that there are sometimes two lines, doesn't really matter, you can make the array twice as big and fit all the 4 parameters in there. If there's 1 line then the two other values in that section of the array hold value 0 and when drawing lines iterating through the array, just don't draw a second line if it would be inputting two zeros.
A, B, D, C, etc are typically bad variable names because they are ambiguous. If you look at your code weeks later it may be a little confusing. Just food for thought!
What would be really cool is finding a way to completely fill in all of the shapes created by marching squares, then treat the filled in areas as surfaces and use them in a video game. With something like that you could use something like OpenSimplexNoise and have it progress at a very slow rate to make a shifting changing maze.
@@callowaysutton Do you mean the grid intersections that you are using to create the marching squares, or do you mean that they can only pass through pixels that have certain values?
@@callowaysutton So if I understand correctly, you would only use the marching squares as visualizations, and use the pixel values from the noise to determine the surfaces? That would be pretty cool, though I do feel that you would need fairly high resolution of the grid in order for it to feel natural and align with the visualization of marching squares. There was this one guy who made a game with this (The Coding Train liked his comment), so I think that I might look at his code and see how he did it. The youtuber was leonlenclos.
you could try to have the lines on the right and have it make a 3d model on the left using the animation of the 2d layers. basically, the left shows the 3rd dimension as time, and the right will show it as space using the 2d slices.
Really enjoyable video (as always)!
And thanks for the mention :)
Thank you Sebastian!!
you are rock
All the celebs in the comments section wow
I dont mean to be offtopic but does any of you know of a tool to get back into an Instagram account??
I was stupid forgot the login password. I would appreciate any tricks you can give me!
@Raylan Decker i really appreciate your reply. I got to the site thru google and I'm waiting for the hacking stuff atm.
I see it takes quite some time so I will get back to you later when my account password hopefully is recovered.
Amazing. AMAZING!!!
Thank you @Jabrils!!
Hey you mentioned Sebastian Lague's video in description!! I love his coding adventures
his latest video is sooo good
Yessss
Who doesn't!
Same! It's like a experiencing a condensed version of all the fun parts of programming without having to tear your hair out when you encounter a bug.
Man. I am back for more because this format is so refreshing. 😌
Hey same :)
I really hope there are people here that haven't yet heard about Sebastian just so that they may now have the pleasure of finding his content for the first time. This channel and his are what keep me invested in programming as a form of expression.
What I would give to watch him figure out clouds for the first time again.
You should watch ThinMatrix too!
@@rubenadema1094 I do! I love watching how his lifestyle influences his work ethic, its really inspiring.
@@rubenadema1094ooo thanks for the suggestion!
@@georhodiumgeo9827omg i still haven't watched the cloud one yet. You've just given put it at the top of the list
I followed along with this. I've been "coding" as a hobby since 1983 (when you had to do a little coding to even get a PC to work). I gave up trying to keep up with the latest programming languages around the late 90s - early 2000s, although I am a C# fan (don't hate me--it's cheap). I'm a salty old man, now, but I appreciate your content. You make programming fun again.
This one was especially fun--Marching Squares/Cubes is a concept I'd never heard of. Still, the potential applications (such as the mentioned Sebastian Lague's excellent series on cave generation) interested me.
I tried doing some of the further challenges here and figured out for myself an algorithm for linear interpolation. It took me two days, but it was great fun. I had so much fun that I joined. Thanks, Dan.
That's really cool
The happiness with which you code is a life goal
After a long week at the keyboard hammering out web code for hospitals, I love these videos to relax my brain. Thank you, sir.
"I must align all of the spacing here"
My teacher in highschool HATED when I always did that. I still do it to this day
My aversion is spacing, to me spacing elongates code lines and makes them harder to read. Anytime I am trying to understand some bit of someone else's code I first delete all unnecessary spaces. Spaces bad.
@@zebratangozebra for me personally it makes it a lot more readable, as i then can often look at a block of similar code as a whole and see what's going on in it, instead of having to go through every line separately. For small stuff like this it usually isn't a problem, and i don't always do it, but when the lines get really long, i do it a lot.
@@zebratangozebra in many coding languages I think you can have a code internal line break. And with those you can make pretty consistant looking code with some automatic formatting tools. E.g. they make you use shorter lines, or format it like that.
Yet in principle you could still discuss about if you want to have spaces or not at all. I think I'd opt for spaces. Easier to read
You guys are going to love Python then!
@@PixelThorn Python is too slow.
I watch your videos for over 5 years, I love your videos, your didactics, you concern for explain, etc. please don't stop it.
I love how everyone else in the comment section liked the video as much as i did. really brilliant how well made it is.
This was crazy cool! I love that you managed to fill in all the examples as you mentioned them-- this is a really high quality video!
I wish RUclips had a option to like a video multiple times because this video truly deserves it.
So glad I'm not the only one constantly looking up switch statement syntax in different languages.
Python dosent have one
Gotta be the most wholesome coding RUclipsr
"Is there a more efficient way than writing a line of code for each possibility? Possibly"
vs
"We're writing it this way, not for efficiency, but for understanding"
Writing it this way is the most efficient because it allows you to use a switch statement. You can find a way to write it with fewer lines of code but that won't make the code faster since you will undoubtedly require several nested "if" statements which are much slower than one big switch statement.
Instead of a switch, I prefer an Array of 16 Objects that hold 16 solutions...that is easy, quick and easy to understand. Great Video, b.t.w.
@@jensBendig If you were going to go down that route a hash-map would likely be better since you could map each value to a solution. either way you are going to have to declare all those solutions at some point, it's just a matter of whether or not the switch is making the code less readable. (In a better editor such as vscode you could just hide the logic in the switch statement too which could be a nice solution)
@@bradfin12 I like you. At least I like this attitude. Terry Davis made an interesting remark about Switch statements, too. Not sure if it applies in something as high-level as Processing or the JS-Processing, but whatever.
@@rabbitcreative Im not 100% sure but i think Davis would prefer fewer lines of code. Davis had two goals in mind when writing code: beautiful simplicity, and small file size. When doing large switch statements that process every case in the most efficient way is a somewhat ugly way to code and can increase file sizes which doesn't matter to most programmers but it would certainly matter to davis who wanted a divinely lightweight operating system.
Literally my favorite RUclips personality. Thank you for being awesome!
this has gotta be possibly my fav vid of yours, this is so insanely cool, especially all the different variations of visualizing it
I kind of liked when the mic was in the table and I could hear more of the background noise. It made me feel like I was there in the Cabana too. Great video, as always!
This is the coding video we need, where every problem is explained from basics. I love it. Thank you for sharing knowledge and making it wholesome :)
Daniel, I follow you since 2016, I found out about you at the start of my most productive phase of my life, first year of the university, you tought me so much, without you I would not be the same person whom I love. Great work as always, thank you so much.
I loved the part where you made all the spacing even
Thank you for accepting me.
I loved the part where, shortly after, it was all destroyed by the state line. I'm not a good person :)
@@TheCodingTrain I'll go farther than that. I'll say you're right and the people who don't do this are WRONG
Not only that. I guess estetics can also have an impact on readability. Especially when having long fragments or even those that break lines within expressions. Those are kind of making a mess readible. Just wonder how they would look like if you mix in random spacing. Sometimes yes sometimes not. errr pretty sure I wouldnt like it
One time I had another dev almost screaming at me for doing that 🤣🤣🤣 (I am still doing it :) and blabla you folks 'its harder to maintain', sure, but it's so much easier to read!! )
This is the best thing I have seen all year. We were taught this in our Geometry class but never really got to work with it
I have also recently started aligning my code by argument. It makes the intent so much clearer and much easier to figure out why my code is broken. It looks beautiful, thanks for another awesome video!
Thank you so much for existing, your videos, your voice, your way of explaining and everything in between is so calming and wonderful. Thank you for the things you do for this community.
WOW WHAT A VALUABLE VIDEO AND I LEARNT MANY THINGS FROM THIS VIDEO AS WELLAS FROM THIS CHANNEL.
I WOULD LIKE TO RECOMMEND THIS CHANNEL TO MY CODING FRIEND
this is probably the most optimal setting for any job involving sitting in-front of a computer
First, I started with GML.
I saw your name on a youtube channel, I looked one of your vid. Two. Three, four, five, and so on. the addiction begun.
I was planning to make some short video game (and a little bit of teaching). I'm actually trying to do art, "paint", fractal, and music with processing, and most of all,
you made it fun to me.
You're god teacher, thanks you. And great kisses from Belgium !
I love these coding in the cabana videos because you really get in depth into the algorithm.
I love this series please continue it
so glad I found this channel, thanks for making code feel more accessible!
Thank you for making videos like these. They're always about something new and interesting to learn while not being too large in scope. They also make me really want a cabana to code in.
You're like the Bob Ross of programming. Great video on a fascinating subject, stay gold!
Geometric algorithms are always great to watch and to understand. Not only to be used for a single purpose. They pop up pretty much everywhere. And many have been invented years and years ago.Almost forgotten maybe even. Nice intro :-))
boy that audio switch at 8:07 spooked the hell out of me. Great vid!
This is so awesome! I love your videos, somehow they make me relax after spending hours coding for work. The way you make math, geometry and coding so approachable and fun is unique, congrats!
you are so great!!! it’s perfect to learn about algorythms with you!! fun, inspiring, brain-opening! i love you!! ❤️🙌🏾
Sometimes I feel Dan gets progressively wiser as his beard grows
NGL, i used to always come up to your videos while doing some coding searches and brushed off cos, well, i code(at least try to LOL) in c# and tbh never ever even have taken a look at java/JS(yeah, pigheaded , i know)
oh boy was i wrong, now i am hooked, never found someone that explains hard concepts, and make it so easy to understand like this
thank you sir =)
cheers from Brazil
loving the vibes from the Cabana
Another great video, and I'd never heard of Processing before now. It adds a lot of nice stuff to Java to make it easier.
What a sweet little programming spot. I'm super jealous!
I miss coding in the cabana
(22 February 2023- I still miss the cabana)
LOVED THE VIDEO (of course). I stopped formatting my code when those auto formatters appeared. I personally would rather turn them OFF, but the team would use it and then auto format any CUSTOM formatting out of existence. I blocks of code it's SO much more readable to line up equal signs, commas, parenthesis, etc. Your eye is able to pull out differences in the blocks quicker and the similarities will blend together creating less noise. I swear I need to write my OWN auto formatter... One of these days...
Dan, we really need you to start a series of video about shaders and shading languages. I keep looking around on the internet but nobody seems to even come closer to your ability to teach.
Very cool and clever algorithm! I love Coding in the Cabana, thanks for the video!
Wonderful blocking in this video, I love how the OpenSimplex noise created a lot more spacious and separate areas. It would be amazing to see how this could be utilized the the creation of video game levels.
the algorithm for connecting the middle points for only one and zero can be reduced to 4 case:
the 2 special cases where you have to draw 2 lines: when there are 2 1s that are on the same diagonals (cases 5 and 10).
the case where you have to draw none(case 16)
In every other case, find the 2 middlepoints between a 0 and a 1 and connect them.
so the pseudo code would be:
find the number of "alternating" midpoints:
if 0: done
if 2: connect the 2
if 4: check whether it's case 5 or 10 and draw accordingly
The glorious return of Gloria! ❤️
the production quality is insane, very nice video! :D
Your videos are awesome! You're awesome! I learned to program with you like 2 years ago, loved it!
Keep doing your thing!
That's beautiful, I'll try playing with this code ! Thanks a lot for your work !
You are the best teacher i have ever learned from :)
Great teacher! Always with something fun for us!
Holy 5&!# I was literally looking up your videos yesterday trying to build this! You are brilliantly and cleverly convenient!
I'm not sure of the efficiency of this, but for determining where to draw lines, if we treat the square as the bits (in the order we would read them), so topleft, topright,bottomleft, bottomright. then the lines inbetwee also as binary numbers, in the order top,left,right,down, then you can treat
1000 (topleft corner only) as connecting the edges top and left (1100)
0100 (topright only) connects top and right (1010)
0010 (bottomleft only) connects bottom and left (0101), and
0001 (bottomright only) connect bottom and right (0011)
SO to get to the point, if we treat every sequence of corners as their individual parts, then convert those parts into the edges they connect and xor them together, you get which edges to connect
for example 1100 would be the top two edges, and they should connect left to right (ie 0110), so we can decompose them into
1000 as 1100 and
0100 as 1010, then bitwise xor 1100 with 1010 to get
0110 which is what we expect.
Hopefull this made sense.
Great great video among all marching square videos I watched!
I have only one word to say for this video:
*Mesmerizing*
Awesome video as always Dan! Liked and Subscribed!
Thanks for this! You're the best. You're explanation of marching squares was a great help to me :)
these are my favorite videos of yours
Made my day better
the power of numbers binary, is very good
Love the paintings in the background! :)
Never be afraid to google the syntax for anything. Programming isn't syntax its understanding the problem given and being able to break it down into small parts and keep track of those connections. I haven't been programming for 20 years but i have been for 10 and I switch between languages constantly throughout the day (c#, java, js, sql, html). I google how to make a switch or a foreach everyday because theres documentation for that but there isnt documentation for your app. What i mean is as long as you figure out the logic you can always google the syntax or as long as you figured out you need a switch on a enum you can always look up how to write a switch and an enum for your language.
I realised the moment you explore the idea of colour you could easily create a light + shadow system,
Also the idea of a lava lamp might work from what you showed at the end. Iv been wanting to imagine how to make a lava lamp work for a long time
some very cool stuff :D always a treat!
I haven't watched any of your Coding in the Cabana videos yet, but I'm getting some serious Bob Ross vibes from this video in particular :P
This will make a lovely background for my led matrix clock. thank you.
Amazing tutorial. I recreated this in python. For perlin noise I basically made the array and just add 0, -1 or 1 to the points, to either keep em at 1 or go to zero or go from zero to 1. Gonna figure out how to make a nicer version.
Just wanted to say thank you for being amazing.
Very helpful! I really love your style of teaching :)
24:41 An ant is locked inside the algorithm.
i just checked the comments to see who else saw the ant and i saw this comment lel
It's just a bug...
Aren't we all?
langton's ant
yes, it's a test if you pay attention
Nice to see OpenSimplex going to good use as always!
to get rid of switch statement you need to make an array of a, b, c, d (points) and array of of their connections and each connection is four digits where first two digits are describing first line ans last two describing second line if it exists (we need max two lines), so state = getState(...)and p1, p2, p3, p4 = points[connections[state][0]], points[connections[state][1]] ..., then you need to validate p3 and p4 and then lines are ready(still much code but more elegant)
Daniel Shiffman. Please never change.
So happy to see another one of your videos :)
The 16 configurations I think could've been sized down to four configurations based on symmetry.
1. No line: fig. 0 & 15
2. One corner line: fig. 1, 2, 4, 7, 8, 11, 13 & 14
3. One straight line: fig. 3, 6, 9 & 12
4. Two corner lines: fig: 5 & 10
One alternative to using a switch statement would be to use a 16-element array of 6-bit integers. e.g. (using C/C++ as that is what I understand)
const unsigned lines_to_draw[] = {000, 001, 002, 020, 004, 005, 040, 010, 010, 040, 012, 004, 020, 002, 001, 000};
unsigned l2d = lines_to_draw[cuts]; // where cuts is a number representing the edges to cut
if (l2d & 001)
// draw line cutting off corner D
if (l2d & 002)
// draw line cutting off corner C
if (l2d & 004)
// draw line cutting off corner B
if (l2d & 010)
// draw line cutting off corner A
if (l2d & 020)
// draw horizontal line
if (l2d & 040)
// draw vertical line
*Cries in indexed map*
Amazing video as always, thanks for all the content you make for us :)
Dude I just discovered your channel and you are amazing. Really great job and a video to enjoy. Thanks a lot!
Looks like I'll be watching this one with great interest
I love your energy
Excellent as always
I think the best option for shortening and performance enhancing the switch statement is to just use an array of line parameter values to look up, with index n being the 1st parameter of case n/2 and index n+1 being the 2nd parameter of that case (alternatively have all the 1st parameters in order, then all the 2nd). The fact that the cases are mirrored along the middle doesn't matter as the array can be hardcoded into one or two lines so its not shorter, and computing the reverse would be worse than having a bit more space allocated to the array. The array would act a bit like a dictionary/map of key:value pairs, except the index is the key -1. Edit: just realised that there are sometimes two lines, doesn't really matter, you can make the array twice as big and fit all the 4 parameters in there. If there's 1 line then the two other values in that section of the array hold value 0 and when drawing lines iterating through the array, just don't draw a second line if it would be inputting two zeros.
Love this! I may use this techinique in some indie game experiment one of these days
A, B, D, C, etc are typically bad variable names because they are ambiguous. If you look at your code weeks later it may be a little confusing. Just food for thought!
Thumbed for aligning the spacing at 11:26. Aligned spacing 4 LYFE.
the interpolated one looks great
Thank you! Very nice explanation.
Love the ProPublica shirt!
This is so awesome!!
Thanks for the great video :)
the coding train 23:35 : makes the canvas full screen
the youtube compression algorithm : *AAAAAH*
Nice explanation! As a suggestion: you can also make a video on dual contouring and explain the pros and cons with marching squared.
I love this format ❤️ keep it up
i like the new video editing style and quality! :)
Wow your new video very pack with information and still have a same average of video length duration. Cool. Thumbs up
So fun, great work
That getState function would have been a great opportunity for some bitshifts and bitwise OR (i.e. return a
What would be really cool is finding a way to completely fill in all of the shapes created by marching squares, then treat the filled in areas as surfaces and use them in a video game. With something like that you could use something like OpenSimplexNoise and have it progress at a very slow rate to make a shifting changing maze.
The values are already there? Make it so the player can only pass through points that have a certain magnitude :)
@@callowaysutton Do you mean the grid intersections that you are using to create the marching squares, or do you mean that they can only pass through pixels that have certain values?
@@scottbigbrain3944 Pixels of a certain value, the grid formed from the marching squares is formed from this as well too
@@callowaysutton So if I understand correctly, you would only use the marching squares as visualizations, and use the pixel values from the noise to determine the surfaces? That would be pretty cool, though I do feel that you would need fairly high resolution of the grid in order for it to feel natural and align with the visualization of marching squares. There was this one guy who made a game with this (The Coding Train liked his comment), so I think that I might look at his code and see how he did it. The youtuber was leonlenclos.
I love the ProPublica shirt!!
you could try to have the lines on the right and have it make a 3d model on the left using the animation of the 2d layers. basically, the left shows the 3rd dimension as time, and the right will show it as space using the 2d slices.