Tangent circles, Curvature and Parallel paths

This project assumes some knowledge of calculus but hopefully will still be understandable without it.

Have you seen some railroad tracks, maybe thought about function values that are close to but not quite on a curve, possibly wondered which side of a road is longer. All of these scenarios involve something called a parallel curve

Defining a parallel curve

The first question to ask is, what does this even mean. Theres a good chance that until now you've always just thought about parallel as only applying to lines which strictly speaking is true but by changing the definition a little bit we can apply it to curves as well. If you define a parallel line as a line with a fixed distance from another, theres nothing special about lines there. If you were to take a point on a curve and draw a circle, all points on the circle would have the same distance to the curve at that point

the problem though is that the particular point on the circle that you choose is extremely important. for example if you always pick the highest point on the circle you just shift it up by one unit which is not a parallel curve. WHile the distance at that point is 1, that is not the minimum distance

sidenote, if you just pick a (pseudo random) point on the circle for each point on the curve function you actually end up filling up the space like a high stroke width.

That leads to a definition of a parallel curve as the envelope of a circle on every point of the curve. Since the envelope practically consists of the very outer edge of each curve, it should make sense that the points on the envelope are (at least locally) constant minimum distance to the curve. visually this is super apparent. Unfortunately envelopes tend to be difficult to work with because given some point on the original curve you can't easily get the corresponding point on the envelope.

Picking just any point on each circle wont work though, theres a few obvious properties we want this curve to have.

  • It should be an actual connected curve.
  • tangent lines to one curve should be parallel to tangent lines of the other.
  • The distance between corresponding points should be constant
  • That distance should locally be the minimum to the curve.
  • If you imagine taking a small step \({\Delta} t\) along the curve, most of the points which are in the direction of that step become closer to the curve and thus those points don't fit the idea behind the curve. There's actually a nice geometric way to interpret this. What we want are all the points where the distance to \(f(t+\Delta t)\leq\) the distance to \(f(t)\). To do that you can draw an ellipse which corresponds to points that have a total distance of \(2r\) from \(f(t) and f(t+{\Delta}t)\). Then the points with a distance lower than \(r\) from \(f(t+{\Delta}t)\) are the ppoints inside the ellipse and on the circle. Then, since the intersection of the ellipse and the circle happens at the midpoint of the two foci, and the foci approach each other as \(\Delta t\) approaches 0, the points outside the ellipse are on the side of the curve opposite the little step.

    Thus, there are only two points where no matter which direction you go the distance stays the same. Those points are the points on the circle where the line connecting them to the curve intersects the curve at a right angle.

    That means that another way to construct a parallel curve to some curve \(\gamma\) is taking that curve and adding a unit normal vector

    $$\gamma_d = \gamma + d*\hat{n}$$

    and, because the normal vector to one curve is normal to the other

    $$\gamma = \gamma_d - d*\hat{n}$$ $$\text{where }d \in \mathbb{R}, \hat{n}\text{ is perpendicular to }\gamma\text{ and }||\hat{n}||=1$$

    This definition is significantly eeasier to work because given that you can construct a normal (which is fairly simple) you can actually get a parametric formula for a parallel curve. That makes it significantly easier to for example find the arclength or area.

    Arc Length and Area

    To find arc length, first we need to step back and think about speed. Thats because speed is (arc) length over time so given the speed (as a function of time) we can get the length. So, what's the speed of a particle on the other curve.

    $$\text{by definition speed} = \sqrt{{v_x}^2+{v_y}^2} \text{and, because velocity is linear,} v_x(\gamma_d(t))=v_x(\gamma(t))+v_x(d*\hat{n(t)}) \text{and same for }v_y$$

    The only way that \(d\hat{n}(t)\) can move is along a circle of radius d (keep in mind that this is true of any vector with length d it's not especially true here). Any line tangent to a circle is perpendicular to a radial line to the point of tangency. \(d \hat{n}\) is a radial line and since velocity is always tangent to a path, \(v(d \hat{n}\) is perpendicular to \(d \hat{n}\). Since it is perpendicular to a normal, it is parallel to \(v(\gamma(t)\) so \(v(d \hat{n}=d \kappa v(\gamma)\) (where \(\kappa\) is some scalar) \(v_x(d*\hat{n})=d*\kappa v_x(\gamma(t))\) and \(v_y(\hat{d*n(t)})=d*\kappa v_y(\gamma(t))\) so the speed is \(\sqrt{v_x^2+v_y^2}=\sqrt{(v_x(\gamma(t))+v_x(d*\hat{n}(t)))^2+(v_y(\gamma(t))+v_y(d*\hat{n}(t))))^2}=\sqrt{((1+d\kappa)v_x(\gamma(t)))^2+((1+d\kappa)v_Y(\gamma(t)))^2}=(1+d\kappa)\sqrt{v_x(\gamma)^2+v_y(\gamma)^2}=v(\gamma)(1+d\kappa)\)

    So now the question is, what is \(\kappa\). Well, by our definition it's the number to convert between speed on the curve and the speed of the normal vector. Since \(\hat{n}\) is constrained to lie on a circle its pretty natural to represent its velocity with its angular velocity and since the direction of the velocity and the normal vector velocity are the same their angular velocities are the same.

    $$\frac{||v(d\hat{n})||}{v(\gamma)}=\frac{d\omega}{r\omega} = \frac{d}{r}=d\kappa, \kappa = \frac{1}{r}$$

    so what is r. If you imagine extending the normal line until you reach a point that is stationary that length gives you r. If you actually trace a circle there it has the same position as the curve, it has the same velocity at that point and it has the same acceleration as the curve at that point. Since those 3 parameters uniquely define a circle this circle is the only circle that fits the curve to third order. This circle that fits the curve best has a special name, its called the osculating circle. The \(\frac{1}{r}\) isnt actually just \(\frac{1}{r}\) but \(\frac{1 rad}{r}\) in other words it gives how much the tangent vector rotate along the circle per unit distance travelled along the curve. Since a tighter circle corresponds to a higher \(\kappa\) and it measures how much something bends per unit length calling it curvature makes sense.

    Back to the original question we know the speed of a particle on the curve is \(v(\gamma)+d*v\kappa\) and obviously the v term just gives us the arc length of the original curve so all that is left is to figure out what the \(d*v\kappa\) part means. since \(\kappa\) gives the angle traveled per unit of arc length and speed is arclength per unit of time it should make sense that \(v(\gamma)\kappa\) gives the angle per unit time. in the same way that speed gave distance this angular speed gives an angle as an output (displacement beause its signed). Specifically it gives whats called the total curvature which can be interpreted as the difference in angle between the start and end points. (for calc people this is just the chain rule \(\frac{d\theta}{ds}\frac{ds}{dt}=\frac{d\theta}{dt} and so \int \kappa ds = \int v\kappa dt\)) This all means that the total length of some parallel curve is linearly dependant on d and is \(s_\gamma + d\Delta \theta\).

    There is one problem however and it happens whenever \(d\kappa \gt 1\). In that case the curvature is negative but the speed can't be as low as it needs to be for the equality to hold. If it were to, it would be negative. Fortunately, since the velocity varies continuously, IVT applies so if there is a point where the velocity is 0 which corresponds exactly to cusps on the curve so by restricting to only parallel curves with no singular points.

    Now, moving on to area which is considerably simpler. We already know that area is just arc length * width but since length varies we unfortunately can't just multiply them. We know that length is proportional to distance from the curve plus initial length so that means we can imgaine stretching out the curves to be straight lines. Then, because the length is just linearly dependant on distance the shape formed is a trapezoid so the area formula is simply \(d\frac{s_\gamma+(s_\gamma+d\Delta \theta)}{2}\)

    Trying it with a line is boring because it just gives l*d but a circle is actually interesting. On the one hand it should be \(\pi(r+d)^2-\pi r^2 = 2\pi rd+\pi d^2\) plugging in to the formula \(d\frac{s_\gamma+(s_\gamma+d\Delta \theta)}{2}=d\frac{2\pi r+(2\pi r+d2\pi)}{2} = 2\pi r d +\pi d^2 \) which gives a bit of confidence that this is actually correct.

    Generalization

    Parallel curves are very simple to generalize to higher dimensions. We've actually already done it. Nothing in our definition explicitly depends on dimension and its not difficult to construct a multidimensional normal to a surface. As for generalizing the length, in that direction lies only pain. You may think, "why can't we just use the same trick we used in the 2d case for this." The answer is that it doesn't work, the same line of reasoning says the change in the normal vector has to be in the plane tangent to the surface but the change in the normal vector for some step is not in general parallel to that step. To verify this you could think of a cone. The normal always points radially outward so a straight line across will cause the normal to sweep out a half circle which is not a line [citation needed].

    If you think of a small step on the tangent plane, the change in the normal vector almost lies on that plane and the smaller the step is the closer it is (this is just the generalization of the 2d arguement). That means we can define an operator S that maps from the plane tangent to the curve to itself and locally looks like the change in the normal vector. What we want is some vector such that the change in the normal vector looks like the original vector scaled up or down. in other words \(S\vec{v}=\lambda \vec{v}\). If we can do that, we can apply a similar arguement as the 2d case. Since the tranformation is linear, we can use the eigenvectors of S, if they exist, and rewrite our vectors as a combination of eigenvectors.

    The operator S is called the shape operator and is a self adjoint operator. That means it doesn't matter which side you apply it on when you take the dot product of both sides. This isn't entirely clear but because \(N \cdot F_u = 0, N \cdot F_v = 0\) their derivatives must be 0 as well so \(N_v \cdot F_u + N \cdot F_{uv} = 0 and N_u \cdot F_v + N \cdot F_{uv} = 0, N_u \cdot F_v = N_v \cdot F_u\) in other words, (where a and b are both in the tangent plane) \(S(a) \cdot b = S(b) \cdot a\). Using the fundamental theorem of algebra, there must exist at least one (possibly complex) eigenvalue \(\lambda\). THis is because \(S(v) = \lambda v if det(S - \lambda I ) = 0 \) and since the determinant consists of adding and multiplying entries, the determinant gives some polynomial in \(\lambda\) we could solve for. Thankfully we can prove that the eigenvalues must be positive. Since \( \lambda v \cdot v ) = (S(v) \cdot v) = (v \cdot \bar{S(v)}) = (\bar{\lambda}(v \cdot v)))\) it must be equal to its own conjugate and thus must be real. Then considering a vector p perpendicular to v \(v \cdot p = S(v) \cdot p = 0 = v \cdot S(p))\) hence S(p) must be perpendicular to v as well so, since in 2d space theres only one vector perpendicular to v S(p) must be on the span of p and so p must be another eigenvector.

    Thinking about curvature in 2d, you might realize that theres a nice way to define curvature in 3d given a direction which is to take the plane in that direction and take a cross section of the curve. To find the curvature, you find the change in the normal vector as before, but then you have to project it into the 2d space. In math terms, \(\kappa(\hat{u}) = S(\hat{u})\cdot \hat{u}\). If u is an eigenvector, we know that \(S(u) \cdot u = \lambda (u \dot u) = \lambda\). Given that an arbitrary unit vector can be decomposed as a sum of the two eigenvectors v1 and v2 \(u = v_1 \sin(\theta) + v_2\cos(\theta), S(u) \cdot u = S(v_1 \sin(\theta) + v_2\cos(\theta)) \cdot (v_1 \sin(\theta) + v_2\cos(\theta)) = \lambda_1 sin^2(\theta) + \lambda_2 cos^2(\theta)\) (This is known as Euler's theorem because Euler really had to do everything) So the eigenvalues of the shape operator are the maximum and minimum curvatures over all possible directions.

    If you imagine some smallbit of the curve, the surface area of that part of the curve can be approximated as the surface area of a plane which is given as the cross product of the vectors defining it which are the partial derivatives of the function.

    So surface area is given by \(\iint||r_u \times r_v|| du dv = \iint||(a_u+d n_u)\times(a_v+d n_v)|| du dv = \iint ||a_u\times a_v + a_u \times d n_v + d n_u \times a_v + d n_u \times d n_v|| du dv\). Fortunately since all of them lie in the same plane, the cross products are all in the same direction and the magnitude part can simply be ignored (for now). Now rewriting the derivatives of the normal vector as the shape operator applied to derivatives of the function, \(\iint ||a_u\times a_v + a_u \times d n_v + d n_u \times a_v + d n_u \times d n_v|| du dv = \iint ||a_u\times a_v + da_u \times S(a_v) + d S(a_u) \times a_v + d^2 S(a_u) \times S(a_v)|| du dv\)

    $$=\iint ||a_u\times a_v + da_u \times S(||a_v||(v_1 sin(\theta_2) + v_2 cos(\theta_2) + d S(||a_u||(v_1 sin(\theta_1) + v_2 cos(\theta_1)) \times a_v + d^2 S(||a_u||(v_1 sin(\theta_1) + v_2 cos(\theta_1)) \times S(||a_v||(v_1 sin(\theta_2) + v_2 cos(\theta_2)|| du dv$$ $$=\iint ||a_u\times a_v + d(||a_u||(v_1 sin(\theta_1) + v_2 cos(\theta_1) \times ||a_v||(\kappa_1 v_1 sin(\theta_2) + \kappa_2 v_2 cos(\theta_2) + d ||a_u||(\kappa_1 v_1 sin(\theta_1) + \kappa_2 v_2 cos(\theta_1)) \times ||a_v||(v_1sin(\theta_2) + v_2 cos(\theta_2)) + d^2 (||a_u||(\kappa_1 v_1 sin(\theta_1) + \kappa_2 v_2 cos(\theta_1)) \times ||a_v||(\kappa_1 v_1 sin(\theta_2) + \kappa_2 v_2 cos(\theta_2)|| du dv$$ $$=\iint ||a_u\times a_v + ||a_u||||a_v||(d((v_1 sin(\theta_1) \times + v_2 cos(\theta_1) \times (\kappa_1 v_1 sin(\theta_2) + \kappa_2 v_2 cos(\theta_2) + d(\kappa_1 v_1 sin(\theta_1) + \kappa_2 v_2 cos(\theta_1)) \times (v_1sin(\theta_2) + v_2 cos(\theta_2)) + d^2 ((\kappa_1 v_1 sin(\theta_1) + \kappa_2 v_2 cos(\theta_1)) \times (\kappa_1 v_1 sin(\theta_2) + \kappa_2 v_2 cos(\theta_2)|| du dv$$ $$=\iint ||a_u\times a_v + ||a_u||||a_v||(d(\kappa_2 cos(\theta_1)sin(\theta_2) - d\kappa_1 sin(\theta_1)cos(\theta_2)(v_1 \times v_2) + d\kappa_1 sin(\theta_1)cos(\theta 2) - d\kappa_2 sin(\theta 2)cos(\theta 1) (v_1 \times v_2)) + d^2 (( \kappa_1 \kappa_2 (sin(\theta_1) cos(\theta_2) - cos(\theta_1) sin(\theta_2) (v_1 \times v_2)|| du dv$$ $$=\iint ||(1 + d\kappa_1 +d\kappa_2 +d^2 \kappa_1 \kappa_2)||a_u||||a_v||sin(\theta)(v_1 \times v_2)||du dv$$ $$=\iint(1+d\kappa_1+d\kappa_2+d^2\kappa_1 \kappa_2)dA$$

    From here I would guess that in general the n dimension area of an n dimensional surface is \(\int \prod_1^{n} (1+\kappa_n dx_n)\)\).

    While the two individual curvature terms don't have a nice interpretation (as far as I know), the gauss-bonnet theorem gives a nice interpretation for the product of the curvatures. For a closed compact surface, /(\iint \kappa_1 \kappa_2 dA = 2\pi \chi /) where \(\chi\) is the Euler characteristic of the surface. That means for "regular" surfaces that don't have a hole, one part of the additional area from stretching the surface out by a distance d is \(\iint d^2 \kappa_1 \kappa_2 dA\2pi\chi d^2 = 4\pi d^2\) which is the area of a sphere with the same radius. There is a sort of similar interpretation of the 2 principal curvature terms. If the average mean curvature is \(\kappa_{avg}\), the total area is by definition \(2d\kappa_{avg}A\) which corresponds to taking the ratio of the distance d and the average radius of any circle and multiplying by the area and then multiplying by 2.

    volume is once again not too bad. Because \(\iint \kappa_1 dA, \iint \kappa_2 dA \iint \kappa_1 \kappa_2 dA\) are all constant, the volume is just \(\int A + d(C_1) +d^2 (C_2) dd = A*d + C_1 \frac{d^2}{2} + C_2 \frac {d^3}{3}\).

    Application

    Surprisingly, these curves actually pop up very regularly in things like machining and path design. In machining, because the thing you cut with has thickness its important that you never get too close to the surface otherwise the cutting thing will cut too much off of the object. The solution is to use an offset surface. As for paths, most paths are roughly constant width. That means that the outside of some path will be longer than the inside. In the context I originally learned about this, path efficiency, the most efficient path is whichever one ends up being on the inside and its independent of the precise path you are on.

    Conclusions

    Often when it comes to solving some problem, defining the thing to work with in a useful manner is half the battle. Once you get a useful definition, the actual math may not too bad.

    While the 2d case was fairly simple, trying to generalize lead to a lot of difficulty because of the additional freedoms but using the same thought process for the more specific case was helpful to find the answer.

    Math problems have a fractal like structure. Each problem that you solve reveals many new and interesting problems. There's interesting math everywhere if you just look far enough

    Reflection

    I am not an expert in this subject and I still am not very good at it. Even now I have many questions but I've run out of resources online as well as my own ability to answer them. I'm extremely grateful to both wikipedia and stack exchange for effectively giving all the information in this project as well as obviously SoME2 for giving me a reason to actually make a math project. It's likely I've made some mistake throughout because I'm not an expert so I just hope the project is mostly correct and understandable.