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
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
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!
"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.
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!! )
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 !
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.
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.
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 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.
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
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!
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.
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.
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...
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've just discovered you man and your videos are just soo perfect. Guess what? Our teacher gave an assignment about this but in 3D and implement with cuda 😅
4 роки тому
the production quality is insane, very nice video! :D
I used a similar algorithm when I was coding a “random roads” visualization. It was a square grid, North was 1, East was 2, South 4, West 8 and the binary number represented which of 16 possible tiles to place. I had never heard of marching squares, though! Took me weeks to think of that solution.
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.
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.
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.
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
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
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
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.
Oh come on!! This is too amazing to not use now AAA! I just finished using perlin noise for an island height map but this.... NOOOO back to the drawing board ty ty
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)
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!
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.
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.
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.
Amazing. AMAZING!!!
Thank you @Jabrils!!
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
So glad I'm not the only one constantly looking up switch statement syntax in different languages.
Python dosent have one
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
After a long week at the keyboard hammering out web code for hospitals, I love these videos to relax my brain. Thank you, sir.
The happiness with which you code is a life goal
"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.
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 love how everyone else in the comment section liked the video as much as i did. really brilliant how well made it is.
I watch your videos for over 5 years, I love your videos, your didactics, you concern for explain, etc. please don't stop it.
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
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!
I wish UA-cam had a option to like a video multiple times because this video truly deserves it.
Gotta be the most wholesome coding UA-camr
"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.
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!! )
Literally my favorite UA-cam 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
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
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 !
this is probably the most optimal setting for any job involving sitting in-front of a computer
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 miss coding in the cabana
(22 February 2023- I still miss the cabana)
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.
I love this series please continue 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 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.
so glad I found this channel, thanks for making code feel more accessible!
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.
I love these coding in the cabana videos because you really get in depth into the algorithm.
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
You're like the Bob Ross of programming. Great video on a fascinating subject, stay gold!
boy that audio switch at 8:07 spooked the hell out of me. Great vid!
you are so great!!! it’s perfect to learn about algorythms with you!! fun, inspiring, brain-opening! i love you!! ❤️🙌🏾
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!
What a sweet little programming spot. I'm super jealous!
loving the vibes from the Cabana
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.
Your videos are awesome! You're awesome! I learned to program with you like 2 years ago, loved it!
Keep doing your thing!
Holy 5&!# I was literally looking up your videos yesterday trying to build this! You are brilliantly and cleverly convenient!
That's beautiful, I'll try playing with this code ! Thanks a lot for your work !
the power of numbers binary, is very good
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.
Sometimes I feel Dan gets progressively wiser as his beard grows
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...
Very cool and clever algorithm! I love Coding in the Cabana, thanks for the video!
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!
Thanks for this! You're the best. You're explanation of marching squares was a great help to me :)
I've just discovered you man and your videos are just soo perfect. Guess what? Our teacher gave an assignment about this but in 3D and implement with cuda 😅
the production quality is insane, very nice video! :D
Great great video among all marching square videos I watched!
This will make a lovely background for my led matrix clock. thank you.
Love the paintings in the background! :)
I used a similar algorithm when I was coding a “random roads” visualization. It was a square grid, North was 1, East was 2, South 4, West 8 and the binary number represented which of 16 possible tiles to place. I had never heard of marching squares, though! Took me weeks to think of that solution.
I have only one word to say for this video:
*Mesmerizing*
Awesome video as always Dan! Liked and Subscribed!
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
You are the best teacher i have ever learned from :)
Love this! I may use this techinique in some indie game experiment one of these days
Great teacher! Always with something fun for us!
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.
Nice explanation! As a suggestion: you can also make a video on dual contouring and explain the pros and cons with marching squared.
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.
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.
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
these are my favorite videos of yours
Dude I just discovered your channel and you are amazing. Really great job and a video to enjoy. Thanks a lot!
the interpolated one looks great
Wow your new video very pack with information and still have a same average of video length duration. Cool. Thumbs up
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
Very helpful! I really love your style of teaching :)
That getState function would have been a great opportunity for some bitshifts and bitwise OR (i.e. return a
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
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 followed along with this in p5.js! Ooh boy were my laptop fans spinning near the end haha
Daniel Shiffman. Please never change.
*Cries in indexed map*
Amazing video as always, thanks for all the content you make for us :)
Oh come on!! This is too amazing to not use now AAA! I just finished using perlin noise for an island height map but this.... NOOOO back to the drawing board ty ty
Made my day better
The glorious return of Gloria! ❤️
Nice to see OpenSimplex going to good use as always!
So happy to see another one of your videos :)
I love your energy
Just wanted to say thank you for being amazing.
Love the ProPublica shirt!
Thumbed for aligning the spacing at 11:26. Aligned spacing 4 LYFE.
Excellent as always
Looks like I'll be watching this one with great interest
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)
These coding videos are really cool! Here is a suggestion: try coding Hidato
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!
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
I love the ProPublica shirt!!
i like the new video editing style and quality! :)
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.
Man what happened to coding challenges, I loved those so much