@@vincentfreddoyle7555 It doesn't follow from the axioms. Morality is complicated. You can't control who you fall in love with. You can (and should) control your actions. But you also can (and should) fight for your love ones. And in love (as in war) everything is allowed. Nobody will be judging the winners. Rant over, back to geometry.
10:00 To get rid of the "annoying dot" at the origin, just multiply the entire equation by (|x|+|y|)/(|x|+|y|). This factor is 1 everywhere except for the origin where the denominator is 0 and therefore the equation becomes undefined.
You could also multiply it by 0^((0^(x^2)) * (0^(y^2))) which basically (ab)uses the convention that 0^0=1 as a logical not gate, and so it's only 1 (true) when not(not(x^2) and not(y^2)) which means not((x^2 = 0) and (y^2 = 0)) and so it's only true when not on the origin
But some triangles have edges that legitimately go through the origin. *EDIT:* Never mind, I was ignoring some context of that particular part of the video, as others have pointed out below.
@@hughobyrne2588 oh true. Hmmmm, maybe what you can do is use a complicated logical-or kind of equation by basically checking if any of the edges actually include the origin, and if so then calculate the distance from the centre of the triangle, borrowing from another equation from the video
@@kyay10 Not exactly. Your solution is elegant for sure, but doesn't quite do the trick. The goal is to get rid of the 0 at the origin, so multiplying by another 0 doesn't really help. :D However, you could still use your approach by adding (1-0^((0^(x^2)) * (0^(y^2)))) to the equation. It adds 0 everywhere, excapt at the origin it adds 1.
What a relief, I was lying awake at night wondering when new equations for triangles would come and this is just what I need. Finally, something useful on the internet for once.
I mean your joke kind of defeats itself a tad at the end when you point out that the internet is known to be full of much, MUCH more information much more useless than this, so it begs the question why the joke would apply to this video in particular
@@aceman0000099 rest assured pixar is not using equations with one variable to render their movies. A game or rendering engine has the game time parameter but that is also not used to run equations, but rather to define the velocity of transformations applied to 3D meshes to render each frame. Each frame per se has no T as input, it just has static vertex positions which get in memory modified every T time.
@@marsovac they get modified in memory according to the curved paths of interpolation, which is an equation that takes position A and Position B and gives you a position in between based on T. Whether it's flash animation or 3D motion capture, there is undoubtedly interpolation and splines involved. I've made animations before.
Personally, I would start with something smooth... some kind of series... I know EXACTLY what I mean, but you'll appreciate it better if you work it out for yourself. *FURTHERMORE* ... there's a finesse which makes it even better.
@Beskamir it's the fact that everything is essentially explained from first principles that does it for me. That and the results are visually spectacular.
Shadertoy is so much fun. You go through your life barely using any trigonometry, then you draw even the tiniest shader effect, and oh god so much trig, suddenly everything is trig. It's especially mind-bending as a programmer, because you're so used to the idea of having explicit objects that you render, and it's a complete shift in perspective to fake the existence of objects with just a function from time and screen position to pixel colour.
Yeah but unfortunately the idea of rendering objects implicitly to the screen pixel by pixel doesn't seem to really be a thing outside of shadertoy. Fragment shaders like the one you get there are generally used to apply final effects to an individual face pixel by pixel, rather than the entire screen. It's a great playground for sure, but you do typically have real explicit objects to render
_Rendering Worlds with Two Triangles_ is a good introduction for non-graphic programmers, along with my _HOWTO: Ray Marching_ which has tons of examples to play with.
@@__8120 Rendering with fragment shaders (and raymarching) really isn't very popular, but it allows rendering complex shapes using only equations that describe them, which can be very short. That's why it's extensively used in the demoscene, specifically for 4KB/1KB intros. I'd say that is indeed its most prevalent place, however - it's mainly a thing for artsy programmers and not really used in the graphics world, but I still love it 🥰
8:00 I've seen prime computing equations (totally exist, but very long) smaller than that. Also I have a triangle myself but I can't post it here - it starts as a Isosceles Triangle and you can drag around the corners - it is made by drawing a line from each point to every other point.
inigo has their own youtube channel hwere they explain a lot of their code. it really helped me when i was in uni and i was doing some work on 4d shape rendering using raymarching, and he works from first principles which is amazing
abs(sqrt(3)*(xy+x)) + abs(y^2) = 1 gives an equilateral triangle. sqrt(3) can be changed for other isosceles triangles although this formula won't give scalene triangles. I also like abs(x^2 + y) + abs(2y^2+x^2) = 1/e which gives a semi circle with the baseline - even better is that by changing 1/e to another constant, you can get circles at varying stages of completion.
Good luck with the cinematic universe. But I am holding out for 'Triangle Hard with a Vengeance' caus I love a New York settings for my math thrillers. Can't wait for the scene where you walk through the Financial District with a sandwich board describing a controversial conjecture about triangles infuriating the local population.
I don't know how you continue to take one of my most hated subjects at school and make some of the most enjoyable and entertaining content on UA-cam. Thanks for making me want to learn more about maths ❤
The sign function shouldn't be a problem. You can represent it as x/abs(x) for any nonzero x. The absolute value can also be the positive solution to sqrt(x^2)
Does the sqrt(x^2) version technically leave some extra values in the imaginary/complex plane? Best case it ends up a second triangle, but that might count as similar to the one with the extra origin dot or the rays out the corners. (Didn't think of x/abs(x) though, clever!)
@@the1exnay negative zero is fun, but not useful, so positive nulls are asserted. MUCH worse is that the first derivative of abs() is discontinuous, any 3d shapes with "abs" will always have a shiny-kin/corner at their 1st derivative discontinuity, and that always looks "to oartificial" , unless you enforce "smooth abs" (seach "sabs" on shadertoy)
I'm hopelessly inept at math/maths, but just wanted to drop a note of appreciation at how entertaining Matt is at explaining it all. 85% of the time I have no idea what he's talking about, but I still love watching/listening to him do it. 😅
At 2:57, I believe that skewing and stretching the triangle can get you all triangles albeit, rotated and translated in the xy plane, so to fix this you could transform x and y into a new coordinate space x' y' and get all triangles that way. Basically I am stating that by stretching and skewing the triangle, you can generate any combination of internal angles of the triangle. Then by change of coordinate space, you can scale, translate, and rotate the triangle to wherever you want in the new coordinate space.
16:00 OOH YES it matters VERY much if your interval (for line-segments) is a closed-interval, open-interval or half-open-interval. I saw countless shadertoy-shaders that pondered about interval-error-cases, significantly losing out on precision or even losing out on performance. intervals become VERY tricky close to undefined/asymptotes, and you generally want to "rather have this area undefined (or replaced by a simpler non-asymptotic smoothing-function) than having it at a too low precision, too close to an asymptote" boundary near asymptotes. And that boundary better be a half-open-interval. a smoothing--function ideally is continuous, and for that you want an open-interval, but you to not want to use the slower function for the same point+solution, where 2 functions met, and then you better pick the right intervals where 2 functions switch.
well, the one at 16:50 is the perfect one. very nice, straightforward and i assume it generalizes to any polygon. at 15:00 it shouldn't be too hard though to find a function that works at the ends too, like 1+sqrt(1-abs(x-1)-abs(x)) for example.
Seeing those shapes that are not made up of triangles on Shadertoy was actually a thing of beauty. Maybe one day games will have actual curves being rendered on our GPUs.
This episode was fascinating to me. I'm in the FEA world working on a smooth potential to describe contact. A very closely related problem. The code at the very end looked like it was possibly based on the old algorithms in FEA with all sorts of problems and issues. Mainly they are only C^0 continuous. Using Non-Newtonian calculus it is possible to build smooth potentials that can describe any arbitrary shape.
This was a LOT of fun! My favourite was the affine transformation with the homogeneous co-ordinate matrices. That approach occurred to me immediately as soon as you showed the base triangle for it, because when I was young I spent a lot of time studying computer graphics techniques. Homogeneous co-ordinates are very useful.
The easiest way to make a triangle I think is to use max or min (works for all convex polytopes). Basically just take the max or the min of a bunch of affine-linear functions on the plane and you can get a polygonal-base cone (a generalized pyramid) as a graph of that max/min. Now pick another affine-linear function, could be as simple as just 0, and equate the two. The intersection of the two graphs typically is the border of a convex polygon (and it still is when projected back down onto the domain). Example: min { |m₁x - y + b₁|, |m₂x - y + b₂|, |m₃x - y + b₃| } = 0 in the notation of the video. You can choose an appropriate sign for each of the absolute values depending on the m's and b's. Note: max {x, y} = (x + |x - y| + y)/2 and min {x, y} = (x - |x - y| + y)/2, for the guys who don't want special functions. Note: You can also get weird unbounded "polytopes" in general. This is analogous to how cone intersections may not just give you ellipses but also hyperbolas or even parabolas.
There's a nice clean way to represent triangles in Desmos, just define a function l(A,B,t)=A+(B-A)t and then call [l(P,Q,t),l(P,R,t),l(Q,R,t)] where P, Q, and R are all called as points.
I just wanted to compliment the way you displayed and referred to the desmos equations. It felt really very natural and was a lot more engaging than a box off to the side!
That first equation reminds me of the "trick" where rearranges some pieces in a triangle and seems to create an extra square of area in the process, but the resultant is just a quadrilateral that looks very close to a triangle
The original "triangle" is also a quadrilateral. The seemingly straight edge has an angle that is less than 180° by exactly as much as the angle in the final one is more than 180°.
@@kazedcat If we take the 'sqrt' function as one that strictly works within the real numbers, i.e. it gives the result 'undefined' for less than zero, zero for zero, and a nonzero positive value for a nonzero positive value, then this trick can be used quite easily - instead of excluding the region outside a circle, excluding a region outside the triangle, as defined by the half-planes indicated by the sides of the triangle. Get nine values a1 b1 c1 a2 b2 c2 a3 b3 c3 such that aix+biy+ci=0 is an equation for line number 'i' of the triangle, and aix+biy+ci>0 is the half-plane that includes the triangle. Then, the equation sqrt(a1x+b1y+c1)*sqrt(a2x+b2y+c2)*sqrt(a3x+b3y+c3)=0, where the expression is evaluated at all stages in the reals, will give exactly the triangle. The square-roots ensure the expression does not give a value for any point outside the triangle (as long as you're not using complex-number-clever square roots), so if the point is on any line, and the product is defined, the product is zero, and if it's off every line, the product is nonzero.
I'd never noticed how fuzzy Matts ears are. But it makes sense. As a number ninja he can't wear ear muffs, since that would dampen the sound of any assassin integrals sneaking up on him, so he uses a natural alternative.
Today, Matt finds out demosceners have cracked a lot of the math behind aesthetic things, that demosceners are lazy AND efficient enough to make toolchains to go from sliced bread to sliced bread with the whole universe in between, that demosceners eat sleep code repeat, and we're all happily nerding out together. Matt, next year, visit any demoparty. You will be amazed by the things sceners showcase. Most of the time on a very limited codesize budget, to add to the challenge.
You can make an equation for a line segment easily: dist(a,p) + dist(p, b) - dist(a,b) = 0. You can then multiply a bunch of segment equations together to make the union of them.
Your video editing is always so amazing, i really need to say it, it's such a pleasure to not only have interesting videos about maths but also so well edited like yours. Thank you so much for your work!
Parametric equation of a triangle: p = p0 + r(p1 - p0) + s(p2 - p0), where pn are the 3 vertices, and r, s are scalars. The point p lies within the triangle for 0
It's not defined for zero but x/abs(x) will give you a one with the sign of x. And since abs can be done by using sqrt(x^2) using sign isn't a bad way.
"You're missing something infinitely small, which some would say, 'Does that really count?' I think it does." Seems like a bit of a change of heart on the significance of infinitesimals from Mr. Matt Parker.
I think that if you're going to be fine with the absolute value function then you should be fine with the sign function because it's very easy to derive the sign function using the absolute value function
15:52 would clever use of inequality signs and/or absolute values solve the better problem? Rather than forcing the function to be undefined outside the circle, you could use the inequality sign to specify only points inside (and on) the circle.
That's how I started it, but I wanted to make a true triangle "equation," not a piecewise function, inequality, or anything with the absolute value or sign operators. Just 5 operators (+, -, *, /, ^) and an equals sign.
So the thing is in roughly 15:30, there is a way to modify Graham's Equation using modular. There is a function f(x) = (|x| - |x| mod 1)(1/|x| - 1/|x| mod 1) or equivelently floor(|x|)floor(1/|x|) that at x = -1 or 1 has a value of 1 but everywhere else it has a value of 0. (If it wasn't absolute value negatives would mess stuff up for other negative values). It works because if x > 1 or x < -1, 1/|x| is between 0 and 1 so the floor is 0, and at -1 < x < 1, |x| is between 0 to 1 so the floor is 0, but when x = 1 and x = -1, the floor of |x| and 1/|x| are both 1. If you added this function but with x = x - x1 + 1, times this function at x = y - y1 + 1 and repeated for each vertex you would include the vertices. However this would create problems potentially at x - x1 = -2, y - y1 = -2, etc... This can be solved by modifying f(x) and doing (|x - x1 + 1| - |x - x1 + 1| mod 1)(1/|x - x1 + 1| - 1/|x - x1 + 1| mod 1)(0.5((x - x1 + 1) - (x - x1 + 1) mod 1)(1/(x - x1 + 1) - 1/(x - x1 + 1) mod 1) + 0.5((x - x1 + 1) - (x - x1 + 1) mod 1)(1/(x - x1 + 1) - 1/(x - x1 + 1) mod 1)^2) * this but with y1 and y instead of x1 and x, and the adding of this but with x2 and y2, etc... The reason this works is because the f(x - x1 + 1) with absolute value makes sure it is only 1 or -1 while the alternated non absolute value average does have the downside of having values besides that of -1 and 1 (negatives don't work since it'd require ceil instead), but if you square either of the terms when it is at x = -1 it becomes -1 not 1, and the average becomes 0 if x = -1, of course in our case x is either going to be x - x1 + 1, y - y1 + 1 for the first vertex. This essentially adds the vertexes because of the value 1 being added to the denominator at each vertex b (meaning that we get 0/1 instead of 0/0 causing our result to still be 0.
Concerning Graham Goble's entry, would either of the following put the vertices back? (1) Use his triangle equation as bounds on the same circle and then combine the two results. Essentially using his almost triangle to do what he did from the other side (2) Do what he did but use calculus to infinitesimally increase the radius of the circle to include the vertices
Anybody who's even dabbled in graphics programming should recognise the thumbnail immediately. Inigo's resources have saved/enabled all our asses continually
15:43 On the vertices, the distance should be exactly r, so the argument of the square root should be 0, so the equation would still be defined and true on the vertices. Edit: nvm I missed the part where it cuts out the entire circle of radius r afterwards
This confused me as well, didn't realize there was a ^1/4 in the denominator. @@simonwillover4175 Usually 0/0 is taken to be undefined, not 1 or any other value. Even the limit of x/x as x goes to 0 is undefined. But we aren't taking a limit here, so I don't think it's relevant.
I'm not a specialist or anything, but for me the simplest way to define a triangle is to have 2 vectors and a 3rd vector that is a product of their vector multiplication.
I noticed that with the almost-triangle equation featured around 5:00, there are certain non-integer values of *a* for which it is *extremely* not a triangle. At *a* = 12.5, for example, the almost-vertical almost-line at x = -1 turns into two (almost) lines shooting out from (-1, 2) and (-1, -2).
Can one just take any equation for an arbitrary (non-colinear) triangle, and turn that into an equation for any other triangle, by changing your basis? (Any function that applies a transformation to the X-Y plane also works as a transformation to all functions on the X-Y plane).
Legend says that if you say Inigo Quilez 5 times into a mirror at the right time of night, he will appear in person and write signed distance field shaders for you.
Guys, i'm not native English speaker. Could somebody explain me, why he refers to Anson Mansfield at 13:24 as "they" while using "the only person" shortly after?
I use nonlinear in my music all the time. Signum can make beautiful music. Or nerve impulses that let me play music. Absolute value is ... absolute value!
I have a confession, for literal ages I thought your channel name was stand-up maths in the sense you were showing off some really nice math. Recently I saw your bio and realized I might be an idiot. I think I’m just used to seeing stand up comedy written without the hyphen
sign02(a)=floor(floor(sqrt(a*a))-floor(a)) , where the floor() function just ensures good precision and floor() or fract() are ESSENTIAL for modulo-arithmetic on type float. sign02(a) //returns 0 or 2 (0 for negative) sign01(floor(sign02(a)*.5)) //returns 0 or 1 sign(floor(sign02(a)-1)) //returns -1 or 1 (-1 for negative)
I can't believe you didn't call the missing vertices "plot holes".
... *nice*
MASSIVELY underrated comment. Not even 69 smh
Edit: I see it now has over 69 likes but it is still not enough.
Someone gonna steal this idea for a T-Shirt, its so good lol. Bruh hurry up and secure the movie rights xD
@@HasekuraIsuna ... Nice
Would that make the stick man walking a plot twist?
“‘Every triangle’s a love triangle when you love triangles’ - Pythagoras” -James Acaster
Oh wow, that's so James Acaster. Can you say where this joke is from?
"Every love triangle has at least one obtuse angle" (obtuse ~ stupid)
@@JordanBiserkovmeaning none of them are right
(As in morally)
@@vincentfreddoyle7555 It doesn't follow from the axioms. Morality is complicated. You can't control who you fall in love with. You can (and should) control your actions. But you also can (and should) fight for your love ones. And in love (as in war) everything is allowed. Nobody will be judging the winners. Rant over, back to geometry.
@@JordanBiserkov yes,polygons angles surface area
10:00 To get rid of the "annoying dot" at the origin, just multiply the entire equation by (|x|+|y|)/(|x|+|y|). This factor is 1 everywhere except for the origin where the denominator is 0 and therefore the equation becomes undefined.
You could also multiply it by 0^((0^(x^2)) * (0^(y^2))) which basically (ab)uses the convention that 0^0=1 as a logical not gate, and so it's only 1 (true) when not(not(x^2) and not(y^2)) which means not((x^2 = 0) and (y^2 = 0)) and so it's only true when not on the origin
But some triangles have edges that legitimately go through the origin.
*EDIT:* Never mind, I was ignoring some context of that particular part of the video, as others have pointed out below.
@@hughobyrne2588 oh true. Hmmmm, maybe what you can do is use a complicated logical-or kind of equation by basically checking if any of the edges actually include the origin, and if so then calculate the distance from the centre of the triangle, borrowing from another equation from the video
@@kyay10 Not exactly. Your solution is elegant for sure, but doesn't quite do the trick. The goal is to get rid of the 0 at the origin, so multiplying by another 0 doesn't really help. :D
However, you could still use your approach by adding (1-0^((0^(x^2)) * (0^(y^2)))) to the equation. It adds 0 everywhere, excapt at the origin it adds 1.
@@hughobyrne2588 That is true in general but not in the specific graph in question
Of course it’s Inigo Quilez! You can expect the guy to pop up every time something resembling signed distance fields happens. An absolute legend.
His videos are amazing.
An absolute God
Yeah and he not only has equations for a triangle but also for spectacular animated 3d characters with lighting and shadows and scenery!
What a relief, I was lying awake at night wondering when new equations for triangles would come and this is just what I need. Finally, something useful on the internet for once.
😂
I really like the art on your channel
I really like the chart on your anal.
I mean your joke kind of defeats itself a tad at the end when you point out that the internet is known to be full of much, MUCH more information much more useless than this, so it begs the question why the joke would apply to this video in particular
It's good to see Inigo getting recognition. He's the shader programming GOAT
I was going to say that
his name is Inigo Mantoya
you killed his father
prepare to die
Inigo has worked on many Pixar films as well (Brave, The Good Dinosaur, Lava)
In 2050 they will teach about Inigo Q in the "history of computing" lessons
I believe I had commented about Inigo's SDF on the original video. He is indeed a shader god and deserves all the recognition.
Why not "Tri Harder"?
GENIUS
TriHard 7
Do or do not - there is no triangle
Triangle 3: the Threequel: Tri Harder.
@@sycration Cx
That walking-stickman plot was BONKERS. 🤣 I never would've thought to create an equation that animates a figure with a single dynamic value.
Wait until you hear about Pixar. And a little variable called T for time 😂
@@aceman0000099 rest assured pixar is not using equations with one variable to render their movies. A game or rendering engine has the game time parameter but that is also not used to run equations, but rather to define the velocity of transformations applied to 3D meshes to render each frame. Each frame per se has no T as input, it just has static vertex positions which get in memory modified every T time.
@@marsovac they get modified in memory according to the curved paths of interpolation, which is an equation that takes position A and Position B and gives you a position in between based on T. Whether it's flash animation or 3D motion capture, there is undoubtedly interpolation and splines involved. I've made animations before.
Personally, I would start with something smooth... some kind of series... I know EXACTLY what I mean, but you'll appreciate it better if you work it out for yourself.
*FURTHERMORE* ... there's a finesse which makes it even better.
*MATT* ... it's not "arbitary" ...the word is arbit *R* ary !!!
The triangular sequel!
We want a triangular trilogy!
*Triangle with a Vengeance*
Triangle prequel: line revolution
Triangle: the quadrilateral dynasty
yes!
Triangle² or Triangle³
"It was like a triangle that was in a hurry" - absolutely killed me. Coffee spat out everywhere. Thanks Matt.
A Parker triangle, innit?
They dont call him "stand up maths" for no reason.
Inigo, if you're reading this, I miss your paint by maths videos they were spectacular. Thanks for the content and for shadertoy :)
Agreed. Inigo is an absolute genius especially with how he breaks everything down in his explanation videos.
@Beskamir it's the fact that everything is essentially explained from first principles that does it for me. That and the results are visually spectacular.
Shadertoy is so much fun. You go through your life barely using any trigonometry, then you draw even the tiniest shader effect, and oh god so much trig, suddenly everything is trig.
It's especially mind-bending as a programmer, because you're so used to the idea of having explicit objects that you render, and it's a complete shift in perspective to fake the existence of objects with just a function from time and screen position to pixel colour.
trig is like the algebra of higher maths, it apears everywhere
Yeah but unfortunately the idea of rendering objects implicitly to the screen pixel by pixel doesn't seem to really be a thing outside of shadertoy. Fragment shaders like the one you get there are generally used to apply final effects to an individual face pixel by pixel, rather than the entire screen. It's a great playground for sure, but you do typically have real explicit objects to render
_Rendering Worlds with Two Triangles_ is a good introduction for non-graphic programmers, along with my _HOWTO: Ray Marching_ which has tons of examples to play with.
@@__8120 Rendering with fragment shaders (and raymarching) really isn't very popular, but it allows rendering complex shapes using only equations that describe them, which can be very short. That's why it's extensively used in the demoscene, specifically for 4KB/1KB intros.
I'd say that is indeed its most prevalent place, however - it's mainly a thing for artsy programmers and not really used in the graphics world, but I still love it 🥰
@@NitzanBueno oh absolutely
8:00 I've seen prime computing equations (totally exist, but very long) smaller than that.
Also I have a triangle myself but I can't post it here - it starts as a Isosceles Triangle and you can drag around the corners - it is made by drawing a line from each point to every other point.
I was super excited when Inigo Quilez popped up! Glad you took the time to talk a bit about shadertoy.
inigo has their own youtube channel hwere they explain a lot of their code. it really helped me when i was in uni and i was doing some work on 4d shape rendering using raymarching, and he works from first principles which is amazing
Inigo Quilez's SDF videos are so good. Masterpieces in educational content
I love these community contribution videos!
abs(sqrt(3)*(xy+x)) + abs(y^2) = 1 gives an equilateral triangle. sqrt(3) can be changed for other isosceles triangles although this formula won't give scalene triangles. I also like abs(x^2 + y) + abs(2y^2+x^2) = 1/e which gives a semi circle with the baseline - even better is that by changing 1/e to another constant, you can get circles at varying stages of completion.
Good luck with the cinematic universe. But I am holding out for 'Triangle Hard with a Vengeance' caus I love a New York settings for my math thrillers. Can't wait for the scene where you walk through the Financial District with a sandwich board describing a controversial conjecture about triangles infuriating the local population.
I don't know how you continue to take one of my most hated subjects at school and make some of the most enjoyable and entertaining content on UA-cam.
Thanks for making me want to learn more about maths
❤
you probably didn't hate maths in school because of maths, you probably hated it because of school.
@@theoriginaltubeofyous true, i hated it because of my maths teacher
The sign function shouldn't be a problem. You can represent it as x/abs(x) for any nonzero x. The absolute value can also be the positive solution to sqrt(x^2)
Does the sqrt(x^2) version technically leave some extra values in the imaginary/complex plane? Best case it ends up a second triangle, but that might count as similar to the one with the extra origin dot or the rays out the corners. (Didn't think of x/abs(x) though, clever!)
@@anomaliecosmos The circle equation is the same.
The sign function being undefined at 0 feels very appropriate.
@@anomaliecosmos yes, this fails for nonzero imaginary values, but these do not occur here. shortcuts are important.
@@the1exnay negative zero is fun, but not useful, so positive nulls are asserted.
MUCH worse is that the first derivative of abs() is discontinuous, any 3d shapes with "abs" will always have a shiny-kin/corner at their 1st derivative discontinuity, and that always looks "to oartificial" , unless you enforce "smooth abs" (seach "sabs" on shadertoy)
The 11:15 solution is just so beautiful. Using such simple concepts and yet getting such a magnificent result.
I'm hopelessly inept at math/maths, but just wanted to drop a note of appreciation at how entertaining Matt is at explaining it all. 85% of the time I have no idea what he's talking about, but I still love watching/listening to him do it. 😅
15:30
You can just multiply by (1+sqrt(r^2-(x-h)^2-(y-k)^2))
removing that annoying denominator and this way including the vertices of the triangle.
At 2:57, I believe that skewing and stretching the triangle can get you all triangles albeit, rotated and translated in the xy plane, so to fix this you could transform x and y into a new coordinate space x' y' and get all triangles that way.
Basically I am stating that by stretching and skewing the triangle, you can generate any combination of internal angles of the triangle.
Then by change of coordinate space, you can scale, translate, and rotate the triangle to wherever you want in the new coordinate space.
Wow... just re-watched yesterday your original video. Now today there's a part two.
16:00 OOH YES it matters VERY much if your interval (for line-segments) is a closed-interval, open-interval or half-open-interval.
I saw countless shadertoy-shaders that pondered about interval-error-cases, significantly losing out on precision or even losing out on performance.
intervals become VERY tricky close to undefined/asymptotes, and you generally want to "rather have this area undefined (or replaced by a simpler non-asymptotic smoothing-function) than having it at a too low precision, too close to an asymptote" boundary near asymptotes. And that boundary better be a half-open-interval.
a smoothing--function ideally is continuous, and for that you want an open-interval, but you to not want to use the slower function for the same point+solution, where 2 functions met, and then you better pick the right intervals where 2 functions switch.
well, the one at 16:50 is the perfect one. very nice, straightforward and i assume it generalizes to any polygon. at 15:00 it shouldn't be too hard though to find a function that works at the ends too, like 1+sqrt(1-abs(x-1)-abs(x)) for example.
Seeing those shapes that are not made up of triangles on Shadertoy was actually a thing of beauty. Maybe one day games will have actual curves being rendered on our GPUs.
This episode was fascinating to me. I'm in the FEA world working on a smooth potential to describe contact. A very closely related problem. The code at the very end looked like it was possibly based on the old algorithms in FEA with all sorts of problems and issues. Mainly they are only C^0 continuous. Using Non-Newtonian calculus it is possible to build smooth potentials that can describe any arbitrary shape.
This was a LOT of fun! My favourite was the affine transformation with the homogeneous co-ordinate matrices. That approach occurred to me immediately as soon as you showed the base triangle for it, because when I was young I spent a lot of time studying computer graphics techniques. Homogeneous co-ordinates are very useful.
"As a approaches infinity this will approach a triangle" was a way funnier line than one would expect
this is a VERY overused phrase in 8th to 13rth grade maths, usually not with triangles.
But i guess they stopped teaching that maths after the 90s.
The easiest way to make a triangle I think is to use max or min (works for all convex polytopes). Basically just take the max or the min of a bunch of affine-linear functions on the plane and you can get a polygonal-base cone (a generalized pyramid) as a graph of that max/min. Now pick another affine-linear function, could be as simple as just 0, and equate the two. The intersection of the two graphs typically is the border of a convex polygon (and it still is when projected back down onto the domain).
Example: min { |m₁x - y + b₁|, |m₂x - y + b₂|, |m₃x - y + b₃| } = 0 in the notation of the video. You can choose an appropriate sign for each of the absolute values depending on the m's and b's.
Note: max {x, y} = (x + |x - y| + y)/2 and min {x, y} = (x - |x - y| + y)/2, for the guys who don't want special functions.
Note: You can also get weird unbounded "polytopes" in general. This is analogous to how cone intersections may not just give you ellipses but also hyperbolas or even parabolas.
There's a nice clean way to represent triangles in Desmos, just define a function
l(A,B,t)=A+(B-A)t
and then call
[l(P,Q,t),l(P,R,t),l(Q,R,t)]
where P, Q, and R are all called as points.
Thanks Matt, I was not expecting such an excellent and informative video about triangles on a Wednesday, helps a lot!
I just wanted to compliment the way you displayed and referred to the desmos equations. It felt really very natural and was a lot more engaging than a box off to the side!
All Parker tri angles in one place.. love it 🤣
Conversations for Math aficionados. Truly fantastic.
First off... it's "Triangle 2: Electric Boogaloo." Secondly, I love that you started with triangles that were Parker Squares.
There's something so pure about the joy of math(s) nerds trying to solve somewhat meaningless yet captivating problems. I love it.
That first equation reminds me of the "trick" where rearranges some pieces in a triangle and seems to create an extra square of area in the process, but the resultant is just a quadrilateral that looks very close to a triangle
The original "triangle" is also a quadrilateral. The seemingly straight edge has an angle that is less than 180° by exactly as much as the angle in the final one is more than 180°.
The circumcircle method was clever! The fact that it misses just the three vertices is extremely funny to me haha
There must be a way to add back those 3 missing vertices
@@kazedcat If we take the 'sqrt' function as one that strictly works within the real numbers, i.e. it gives the result 'undefined' for less than zero, zero for zero, and a nonzero positive value for a nonzero positive value, then this trick can be used quite easily - instead of excluding the region outside a circle, excluding a region outside the triangle, as defined by the half-planes indicated by the sides of the triangle.
Get nine values a1 b1 c1 a2 b2 c2 a3 b3 c3 such that aix+biy+ci=0 is an equation for line number 'i' of the triangle, and aix+biy+ci>0 is the half-plane that includes the triangle. Then, the equation sqrt(a1x+b1y+c1)*sqrt(a2x+b2y+c2)*sqrt(a3x+b3y+c3)=0, where the expression is evaluated at all stages in the reals, will give exactly the triangle. The square-roots ensure the expression does not give a value for any point outside the triangle (as long as you're not using complex-number-clever square roots), so if the point is on any line, and the product is defined, the product is zero, and if it's off every line, the product is nonzero.
5:30 love the last words and transition
I'd never noticed how fuzzy Matts ears are.
But it makes sense. As a number ninja he can't wear ear muffs, since that would dampen the sound of any assassin integrals sneaking up on him, so he uses a natural alternative.
I was NOT read for the Matt Parker jumpscare in the new Captain Disillusion video. Very spooky
Today, Matt finds out demosceners have cracked a lot of the math behind aesthetic things, that demosceners are lazy AND efficient enough to make toolchains to go from sliced bread to sliced bread with the whole universe in between, that demosceners eat sleep code repeat, and we're all happily nerding out together.
Matt, next year, visit any demoparty. You will be amazed by the things sceners showcase. Most of the time on a very limited codesize budget, to add to the challenge.
You can make an equation for a line segment easily: dist(a,p) + dist(p, b) - dist(a,b) = 0. You can then multiply a bunch of segment equations together to make the union of them.
Gen Eric is so much more easy-going than any of the other Gen's ... well done Gen Eric
In this video: Matt is excited because he learned a new video editing trick.
The circumcircle solution is so nice. Love the creativity.
Your video editing is always so amazing, i really need to say it, it's such a pleasure to not only have interesting videos about maths but also so well edited like yours. Thank you so much for your work!
Parametric equation of a triangle: p = p0 + r(p1 - p0) + s(p2 - p0), where pn are the 3 vertices, and r, s are scalars. The point p lies within the triangle for 0
By far the best video I watched recently, I had a blast, I had a lot of fun! Although I knew most of this. Thank you my mate! I love you!
It's not defined for zero but x/abs(x) will give you a one with the sign of x. And since abs can be done by using sqrt(x^2) using sign isn't a bad way.
1:50 you can actually make a square parallel/perpendicular to the axes like so: abs(x+y) + abs(x-y) = n where n is the square’s side length
1:26 subtitles says 'James Street' instead of Jane Street
7:35 Subtitles says 'octan' instead of arctan
12:10 Subtitles says 'F9' instead of (presumable) affine
13:38 'Goebel' instead of Goble
19:56 'gene street'
0:38 subtitles says 'sine function' instead of sign function.
I'm pretty sure they're just autogenerated, so if that's the worst they did a good job.
also 1:26
subtitles say "James tree" instead of Jane Street
It also says "K9" instead of "canine"
10:53 "okay good" instead of "so good".
"You're missing something infinitely small, which some would say, 'Does that really count?' I think it does." Seems like a bit of a change of heart on the significance of infinitesimals from Mr. Matt Parker.
5:27 That's what I'd call a mathematically love triangle
I think that if you're going to be fine with the absolute value function then you should be fine with the sign function because it's very easy to derive the sign function using the absolute value function
The triangle lore deepens
15:52 would clever use of inequality signs and/or absolute values solve the better problem? Rather than forcing the function to be undefined outside the circle, you could use the inequality sign to specify only points inside (and on) the circle.
That's how I started it, but I wanted to make a true triangle "equation," not a piecewise function, inequality, or anything with the absolute value or sign operators. Just 5 operators (+, -, *, /, ^) and an equals sign.
that n sided shape equation is insane. feel like we need a video just on it
So the thing is in roughly 15:30, there is a way to modify Graham's Equation using modular. There is a function f(x) = (|x| - |x| mod 1)(1/|x| - 1/|x| mod 1) or equivelently floor(|x|)floor(1/|x|) that at x = -1 or 1 has a value of 1 but everywhere else it has a value of 0. (If it wasn't absolute value negatives would mess stuff up for other negative values). It works because if x > 1 or x < -1, 1/|x| is between 0 and 1 so the floor is 0, and at -1 < x < 1, |x| is between 0 to 1 so the floor is 0, but when x = 1 and x = -1, the floor of |x| and 1/|x| are both 1.
If you added this function but with x = x - x1 + 1, times this function at x = y - y1 + 1 and repeated for each vertex you would include the vertices. However this would create problems potentially at x - x1 = -2, y - y1 = -2, etc...
This can be solved by modifying f(x) and doing (|x - x1 + 1| - |x - x1 + 1| mod 1)(1/|x - x1 + 1| - 1/|x - x1 + 1| mod 1)(0.5((x - x1 + 1) - (x - x1 + 1) mod 1)(1/(x - x1 + 1) - 1/(x - x1 + 1) mod 1) + 0.5((x - x1 + 1) - (x - x1 + 1) mod 1)(1/(x - x1 + 1) - 1/(x - x1 + 1) mod 1)^2) * this but with y1 and y instead of x1 and x, and the adding of this but with x2 and y2, etc...
The reason this works is because the f(x - x1 + 1) with absolute value makes sure it is only 1 or -1 while the alternated non absolute value average does have the downside of having values besides that of -1 and 1 (negatives don't work since it'd require ceil instead), but if you square either of the terms when it is at x = -1 it becomes -1 not 1, and the average becomes 0 if x = -1, of course in our case x is either going to be x - x1 + 1, y - y1 + 1 for the first vertex.
This essentially adds the vertexes because of the value 1 being added to the denominator at each vertex b (meaning that we get 0/1 instead of 0/0 causing our result to still be 0.
Yoooo!! New equations for triangles just dropped🔥
Concerning Graham Goble's entry, would either of the following put the vertices back?
(1) Use his triangle equation as bounds on the same circle and then combine the two results. Essentially using his almost triangle to do what he did from the other side
(2) Do what he did but use calculus to infinitesimally increase the radius of the circle to include the vertices
Anybody who's even dabbled in graphics programming should recognise the thumbnail immediately. Inigo's resources have saved/enabled all our asses continually
15:43 On the vertices, the distance should be exactly r, so the argument of the square root should be 0, so the equation would still be defined and true on the vertices.
Edit: nvm I missed the part where it cuts out the entire circle of radius r afterwards
But it is defined there. And the limit of the 0/0 term = 1, not undefined.
This confused me as well, didn't realize there was a ^1/4 in the denominator.
@@simonwillover4175 Usually 0/0 is taken to be undefined, not 1 or any other value. Even the limit of x/x as x goes to 0 is undefined. But we aren't taking a limit here, so I don't think it's relevant.
@@simonwillover4175 it's okay to be wrong about 0/0 but please don't say it as if correcting someone
Inigo is a legend. I used his triangle SDF to do 3D collision detection!
Shader code is like a different universe of code, it's so much fun.
As soon as I saw the thumbnail I knew the video would end in Inigo Quiles. Absolutely insane shader artist
I'm not a specialist or anything, but for me the simplest way to define a triangle is to have 2 vectors and a 3rd vector that is a product of their vector multiplication.
Thumbnail looks like it is from Indigo Quilez's video. I'm already excited!
IQ is a legend in the shader coding and demoscene communities. Props for showing off his work!
"every triangle is a love triangle. If you love triangles" - Pythagoras, probably
5:30 it may not be a triangle, but it has its heart in it. Gets credit for triing
I noticed that with the almost-triangle equation featured around 5:00, there are certain non-integer values of *a* for which it is *extremely* not a triangle. At *a* = 12.5, for example, the almost-vertical almost-line at x = -1 turns into two (almost) lines shooting out from (-1, 2) and (-1, -2).
I look forward to the third installment, "Tri Hard With A Vengeance"
Today I bought both your books cause I’m in the uk for a family wedding! You’re my favourite educational UA-cam channel!
I'm just over here, being amazed at the overlay of the graphs on top of your face.
Can one just take any equation for an arbitrary (non-colinear) triangle, and turn that into an equation for any other triangle, by changing your basis?
(Any function that applies a transformation to the X-Y plane also works as a transformation to all functions on the X-Y plane).
Looks like we improved on the Parker triangle.
This is the earliest I’ve ever caught a video 😄
10:43 « l'équation zombie » 🤣
Curious to know what those n-gon equations give you for non-integer values
What does a shape with pi or sqrt(2) or i sides look like
10:42 - The walking got a literal round of applause from me.
Legend says that if you say Inigo Quilez 5 times into a mirror at the right time of night, he will appear in person and write signed distance field shaders for you.
11:00 the walking stick figure is amazing haha :D
Guys, i'm not native English speaker. Could somebody explain me, why he refers to Anson Mansfield at 13:24 as "they" while using "the only person" shortly after?
Triangle is my favorite shape! I'm so glad the sequel finally dropped :D
Nice video! I really should've expected iq and shadertoy to be in a video when there's the triangle sdf in the thumbnail haha
Thanks for providing captions/subtitles!
I use nonlinear in my music all the time. Signum can make beautiful music. Or nerve impulses that let me play music. Absolute value is ... absolute value!
I have a confession, for literal ages I thought your channel name was stand-up maths in the sense you were showing off some really nice math. Recently I saw your bio and realized I might be an idiot. I think I’m just used to seeing stand up comedy written without the hyphen
18:03
Those, and what follows on the shadertoy example, are called signed distance fields. Pretty usefull for some stuff :)
sign02(a)=floor(floor(sqrt(a*a))-floor(a)) , where the floor() function just ensures good precision and floor() or fract() are ESSENTIAL for modulo-arithmetic on type float.
sign02(a) //returns 0 or 2 (0 for negative)
sign01(floor(sign02(a)*.5)) //returns 0 or 1
sign(floor(sign02(a)-1)) //returns -1 or 1 (-1 for negative)
5:25 according to the Intermediate value theorem, somewhere between the triangle and the heart would be a love triangle.
▲ triangles are my favourite shape.
7:33 I don't laugh out loud much at videos, but this one got me somehow. 😆
doing that arctan tan can be used to actually make a mod function
I remember stumbling upon inigo’s channel some months ago, some really cool stuff
Shout out to Tristan's 2nd graph. I wish someone like him was around me to make maths this fun