Math question which surely has a well-known, simple answer but I can't seem to figure out what it's called in the literature:

I have a triangle. I want to find a function f :

**R**

^{2}→

**R**defined over that triangle. I have in mind fixed values I want f to attain on the vertices of that triangle. Along each edge of the triangle, I want the directional derivative of f in the direction perpendicular to that edge to be zero. I tried just letting f be a polynomial up to degree three and imposing all my constraints, (since that's what suffices for the familiar 1-dimensional easing curve y = 3x

^{2}- 2x

^{3}) but it appears to be overconstrained. Unless I did my algebra wrong, and believe me, if there's something I'm really expert at by now in my life, it's fucking up basic high school algebra done with pen and paper.

Also what I

*really*want is a similar thing where also the higher-order derivatives vanish, so I can stitch together interpolated triangle functions from the Delaunay triangulation of a 2-d Poisson process sample and get a nice C

^{∞}function. I know Perlin noise is way, way cheaper to compute, but it really bothers me that it isn't actually isotropic.

Or actually wait hm is Perlin's later "simplex noise" algorithm already doing the interpolation step I'm looking for? Should look into that.

---

Update from April 5:

I tried putting into sage the following:

R.

[

**Error:**Irreparable invalid markup ('<t,>') in entry. Owner must fix manually. Raw contents below.]Day 3 of ChefConf: Chef's CTO has some pretty impressive public speaking skills. Had some further productive chatting with my manager about the project.

Math question which surely has a well-known, simple answer but I can't seem to figure out what it's called in the literature:

I have a triangle. I want to find a function f : <b>R</B><sup>2</sup> → <b>R</B> defined over that triangle. I have in mind fixed values I want f to attain on the vertices of that triangle. Along each edge of the triangle, I want the directional derivative of f in the direction perpendicular to that edge to be zero. I tried just letting f be a polynomial up to degree three and imposing all my constraints, (since that's what suffices for the familiar 1-dimensional easing curve y = 3x<sup>2</sup> - 2x<sup>3</sup>) but it appears to be overconstrained. Unless I did my algebra wrong, and believe me, if there's something I'm really expert at by now in my life, it's fucking up basic high school algebra done with pen and paper.

Also what I <i>really</I> want is a similar thing where also the higher-order derivatives vanish, so I can stitch together interpolated triangle functions from the Delaunay triangulation of a 2-d Poisson process sample and get a nice C<sup>∞</sup> function. I know Perlin noise is way, way cheaper to compute, but it really bothers me that it isn't actually isotropic.

Or actually wait hm is Perlin's later "simplex noise" algorithm already doing the interpolation step I'm looking for? Should look into that.

---

Update from April 5:

I tried putting into sage the following:

<pre>

R.<t, ax, ay, az, bx, by, bz, cx, cy, cz, x, y, c00, c01, c02, c03, c04, c10, c11, c12, c13, c20, c21, c22, c30, c31, c40> = QQbar[]

f = c00 * x^0 * y^0 + c01 * x^0 * y^1 + c02 * x^0 * y^2 + c03 * x^0 * y^3 + c04 * x^0 * y^4 + c10 * x^1 * y^0 + c11 * x^1 * y^1 + c12 * x^1 * y^2 + c13 * x^1 * y^3 + c20 * x^2 * y^0 + c21 * x^2 * y^1 + c22 * x^2 * y^2 + c30 * x^3 * y^0 + c31 * x^3 * y^1 + c40 * x^4 * y^0

fx = derivative(f, x)

fy = derivative(f, y)

abline = ((ay - by) * fx + (bx - ax) * fy).substitute({x:ax * (1-t) + bx * t,y:ay * (1-t) + by * t})

bcline = ((by - cy) * fx + (cx - bx) * fy).substitute({x:bx * (1-t) + cx * t,y:by * (1-t) + cy * t})

caline = ((cy - ay) * fx + (ax - cx) * fy).substitute({x:cx * (1-t) + ax * t,y:cy * (1-t) + ay * t})

[f.substitute({x:ax,y:ay}) - az, f.substitute({x:bx,y:by}) - bz, f.substitute({x:cx,y:cy}) - cz, abline.coefficient({t: 0}), bcline.coefficient({t: 0}), caline.coefficient({t: 0}), abline.coefficient({t: 1}), bcline.coefficient({t: 1}), caline.coefficient({t: 1}), abline.coefficient({t: 2}), bcline.coefficient({t: 2}), caline.coefficient({t: 2}), abline.coefficient({t: 3}), bcline.coefficient({t: 3}), caline.coefficient({t: 3})]

</pre>

and it does indeed give me a big 15x15 matrix, and when I put in some numerical values for [a,b,c][x,y,z], it gave me solution, so I guess it's full rank, but sage choked when I tried solving it symbolically.

Math question which surely has a well-known, simple answer but I can't seem to figure out what it's called in the literature:

I have a triangle. I want to find a function f : <b>R</B><sup>2</sup> → <b>R</B> defined over that triangle. I have in mind fixed values I want f to attain on the vertices of that triangle. Along each edge of the triangle, I want the directional derivative of f in the direction perpendicular to that edge to be zero. I tried just letting f be a polynomial up to degree three and imposing all my constraints, (since that's what suffices for the familiar 1-dimensional easing curve y = 3x<sup>2</sup> - 2x<sup>3</sup>) but it appears to be overconstrained. Unless I did my algebra wrong, and believe me, if there's something I'm really expert at by now in my life, it's fucking up basic high school algebra done with pen and paper.

Also what I <i>really</I> want is a similar thing where also the higher-order derivatives vanish, so I can stitch together interpolated triangle functions from the Delaunay triangulation of a 2-d Poisson process sample and get a nice C<sup>∞</sup> function. I know Perlin noise is way, way cheaper to compute, but it really bothers me that it isn't actually isotropic.

Or actually wait hm is Perlin's later "simplex noise" algorithm already doing the interpolation step I'm looking for? Should look into that.

---

Update from April 5:

I tried putting into sage the following:

<pre>

R.<t, ax, ay, az, bx, by, bz, cx, cy, cz, x, y, c00, c01, c02, c03, c04, c10, c11, c12, c13, c20, c21, c22, c30, c31, c40> = QQbar[]

f = c00 * x^0 * y^0 + c01 * x^0 * y^1 + c02 * x^0 * y^2 + c03 * x^0 * y^3 + c04 * x^0 * y^4 + c10 * x^1 * y^0 + c11 * x^1 * y^1 + c12 * x^1 * y^2 + c13 * x^1 * y^3 + c20 * x^2 * y^0 + c21 * x^2 * y^1 + c22 * x^2 * y^2 + c30 * x^3 * y^0 + c31 * x^3 * y^1 + c40 * x^4 * y^0

fx = derivative(f, x)

fy = derivative(f, y)

abline = ((ay - by) * fx + (bx - ax) * fy).substitute({x:ax * (1-t) + bx * t,y:ay * (1-t) + by * t})

bcline = ((by - cy) * fx + (cx - bx) * fy).substitute({x:bx * (1-t) + cx * t,y:by * (1-t) + cy * t})

caline = ((cy - ay) * fx + (ax - cx) * fy).substitute({x:cx * (1-t) + ax * t,y:cy * (1-t) + ay * t})

[f.substitute({x:ax,y:ay}) - az, f.substitute({x:bx,y:by}) - bz, f.substitute({x:cx,y:cy}) - cz, abline.coefficient({t: 0}), bcline.coefficient({t: 0}), caline.coefficient({t: 0}), abline.coefficient({t: 1}), bcline.coefficient({t: 1}), caline.coefficient({t: 1}), abline.coefficient({t: 2}), bcline.coefficient({t: 2}), caline.coefficient({t: 2}), abline.coefficient({t: 3}), bcline.coefficient({t: 3}), caline.coefficient({t: 3})]

</pre>

and it does indeed give me a big 15x15 matrix, and when I put in some numerical values for [a,b,c][x,y,z], it gave me solution, so I guess it's full rank, but sage choked when I tried solving it symbolically.