Differential geometry of curves. Part 1

Foreword



Hello to all readers. I just decided to write an article on differential geometry of curves. In my opinion, the topic of "continuous" mathematics will be useful to most Habr readers, at least for the next hour =), given that this is an IT resource, and IT is somewhere closer to discrete mathematics (again, in my imperfect view). But in some places, I know for sure there is not only a discrete one, for example, CAD design systems have engines built on differential geometry (well, of course, not just one, and computational geometry is there, and so on). Perhaps it’s used in games, I don’t know. After all, a game is usually a movement, and to describe a movement it would be nice to know the geometry.



Introduction



Differential geometry of curves (as the name implies) deals with the geometry of curves, but using methods of differential calculus, or matanalysis.



For those who set the curves only on the plane, in this form:





y=ax+b





or the like:





y= frac1 sigma sqrt2 pi exp left(βˆ’ frac(xβˆ’ mu)22 sigma2 right)







even so (implicit task):





y3x=7x2+4







I will say that this is not the best way, that is, it is not universal, but it may be inconvenient (for spaces of higher dimension). It is possible, of course, and so, it will be good for your tasks, but in general, the curves are set in parametric form. Because if you set this way already in 3D space, you get something like:

\ begin {equation *}

\ begin {cases}

z = 2x-y,

\\

z = x ^ {2} + y ^ {2}

\ end {cases}

\ end {equation *}

and even so:

\ begin {equation *}

\ begin {cases}

z = 2x-y,

\\

y = x ^ {2} + z ^ {2}

\ end {cases}

\ end {equation *}

What can be interpreted as the intersection of two arbitrary surfaces. It is the intersection that sets the spatial curve for us. And another circle example:

\ begin {equation *}

\ begin {cases}

x ^ {2} + y ^ {2} + z ^ {2} = 1,

\\

x + y + z = 1

\ end {cases}

\ end {equation *}

image

Picture for a better understanding of what happens when you cross



And you ask why these methods are similar. Well, look, in the plane we have in general the implicit specification of the curve F(x,y)=0. Then in 3D space, by analogy, I want to write down the equation by adding one coordinate F(x,y,z)=0. But all the same it turns out not a curve, but a surface. Then if you add another equation, you get a system, or two surfaces:

\ begin {equation}

\ begin {cases}

F (x, y, z) = 0,

\\

G (x, y, z) = 0.

\ end {cases}

\ end {equation}

which, generally speaking, may not intersect, because arbitrary F and G not always give a curve.



Therefore, let us rather move on to the parametric assignment of curves.



Curve Parametric



β€œDefine a curve parametrically” means to specify the coordinate of each point on the curve. That is, each coordinate individually will be a function of the general parameter.

\ begin {equation *}

\ begin {cases}

x = x (t),

\\

y = y (t),

\\

z = z (t).

\ end {cases}

\ end {equation *}

This thing is usually called the radius vector.  vecr(t)=(x,y,z). Or, to be more precise, more correct as follows:





 vecr(t)=(x,y,z)T= beginbmatrixxyz endbmatrix







A regular vector is a column vector, or a transposed row vector. If we go into the wilds of tensor analysis, then column vector = vector, and row vector = covector. But this does not matter to us, because anyway, in the orthogonal normalized basis, in which we work, the difference between them disappears. Next, I will write the vectors into a string, it does not affect anything, but compactly it turns out.



By the way, if you look at system 1, and for convenience, indicating, for example, z=t :

\ begin {equation *}

\ begin {cases}

F (x, y, t) = 0,

\\

G (x, y, t) = 0.

\ end {cases}

\ end {equation *}

then formally solving this system of equations with respect to x,y , we obtain a solution depending on the parameter \ {x (t), y (t) \}\ {x (t), y (t) \} . And now, if everything is combined into one vector:

\ begin {equation *}

\ begin {cases}

x = x (t),

\\

y = y (t),

\\

z = t

\ end {cases}

\ end {equation *}

we get some parameterization of the curve, until recently, given as the intersection of surfaces.



Well, for example, a helix:

\ begin {equation *}

\ begin {cases}

x = cos (t),

\\

y = sin (t),

\\

z = t

\ end {cases}

\ end {equation *}

image

Helix



Here in the picture is the parameter t runs over values ​​from 0 before 4 pi . By the way, with the sentence earlier, I said β€œsome parameterization”. And this is no accident. Because there can be infinitely many parametrizations of this particular helix.

For example, the same line:

\ begin {equation *}

\ begin {cases}

x = cos (t ^ {2}),

\\

y = sin (t ^ {2}),

\\

z = t ^ {2}

\ end {cases}

\ end {equation *}

this is the same helix, and the picture will be the same (I will not insert it again), however, t runs over values ​​from 0 before 2 sqrt pi .

Anyway, making a replacement t=g( tildet) , it will be the same helix (provided that g( tildet) - monotonous):

\ begin {equation *}

\ begin {cases}

x (\ tilde {t}) = cos (g (\ tilde {t})),

\\

y (\ tilde {t}) = sin (g (\ tilde {t})),

\\

z (\ tilde {t}) = g (\ tilde {t}).

\ end {cases}

\ end {equation *}

We will talk more about parameterization later, and about a special parameterization called β€œnatural”, but already in the following articles (maybe).



Derivative and tangent vector



And now, it's time to start the differential analysis of the curves. Don’t worry, the definition of the derivative of the vector will slip quickly;) So, here we have a vector depending on the parameter t :  vecr(t)=(x(t),y(t),z(t)).

You can write it laid out on a basis:  vecr(t)=x(t) veci+y(t) vecj+z(t) veck .

And the derivative, as usual, is defined as the limit:





 dot vecr= fracd vecrdt= lim Deltat to0 frac Delta vecr Deltat= lim Deltat to0 frac vecr(t+ Deltat)βˆ’ vecr(t) Deltat,







image

Derivative of a vector function (almost)



the limit of the vector function itself is the limits of each of the components:

\ begin {equation *}

\ dot {\ vec {r}} = \ lim _ {\ Delta t \ to 0} \ frac {[x (t + \ Delta t) \ vec {i} + y (t + \ Delta t) \ vec {j} + z (t + \ Delta t) \ vec {k}] - [x (t) \ vec {i} + y (t) \ vec {j} + z (t) \ vec {k}]} {\ Delta t } = \\

\ lim _ {\ Delta t \ to 0} \ frac {[x (t + \ Delta t) -x (t)] \ vec {i} + [y (t + \ Delta t) -y (t)] \ vec { j} + [z (t + \ Delta t) -z (t)] \ vec {k}]} {\ Delta t} = \\

\ lim _ {\ Delta t \ to 0} \ frac {x (t + \ Delta t) -x (t)} {\ Delta t} \ vec {i} + \ lim _ {\ Delta t \ to 0} ... = \ \ \ dot {x} \ vec {i} + \ dot {y} \ vec {j} + \ dot {z} \ vec {k} = (\ dot {x}, \ dot {y}, \ dot { z}).

\ end {equation *}

Well, even the figure shows where  Deltat not even rushed to zero that this vector  dot vecr is tangent to the curve. In the theory it is interpreted as speed and is designated as follows:





 dot vecr= vecv,







and the curve itself, respectively, as the trajectory of the motion of the material point, but we will talk more about this later.

So, this vector  vecv is tangent to our curve everywhere except for singular points (in the sense that at singular points of the tangent vector it may not exist). But there are so few of them that let's not even talk about them yet. And it turns out that our vector  vecv there is a basis for our curve, it shows where the curve goes further. Therefore, it would be better to make it single as all other unit vectors. Just divide by its length and designate as usual:





 vec tau= frac vecvv,







now then, it is always equal to one:





 langle vec tau, vec tau rangle= langle frac vecvv, frac vecvv rangle= frac langle vecv, vecv ranglev2= fracv2v2=1









Normal vector



And now, for the sake of fun, this equality can be differentiated, both the left and right sides (in general, in such matters, if you don’t meet anything, it’s better to differentiate just in case):





 fracd langle vec tau, vec tau rangledt= fracd(1)dt,







on the right, of course, zero. But on the left, we differentiate the scalar product of vectors. Given the rules of differentiation of scalar, vector products and other things (which are not at all difficult to prove, even having only what is written above in this article):





 fracd langle veca, vecb rangledt= langle dot veca, vecb rangle+ langle veca, dot vecb rangle,











 fracd[ veca, vecb]dt=[ dot veca, vecb]+[ veca, dot vecb],











 fracd(k veca)dt= dotk veca+k dot veca,







in the last expression k=k(t) scalar function depending on the parameter.

Well now, let's finish the job without any problems:





 langle dot vec tau, vec tau rangle+ langle vec tau, dot vec tau rangle=0,











2 langle vec tau, dot vec tau rangle=0,











 langle vec tau, dot vec tau rangle=0,







here we also took into account the symmetry property of the scalar product, and from there the two got out:





 langle veca, vecb rangle= langle vecb, veca rangle.







Well, now you can draw conclusions. The last scalar product is zero. And this happens only when either at least one of the vectors is zero, or they are perpendicular. Since our  vec tau completely arbitrary (why do we all do this? To calculate the tangent vector for absolutely any curve), we conclude that the derived vector from the unit tangent is always perpendicular to it, located at an angle 90 circ :





 vec tau perp dot vec tau.







Fine. This derived vector can be called the normal vector to our curve. But we want him to be single too, and this is completely optional at the moment. Therefore, we simply divide by its length, then it certainly will not go anywhere:





 vecn= frac dot vec tau| dot vec tau|.







Remembering what is  vec tau , find its derivative:





 dot vec tau= fracd vec taudt= fracddt left( frac vecvv right),







here the differentiable function is a scalar multiplied by a vector k(t) vecv(t) where k(t)= frac1v=vβˆ’1 then:





 fracddt left( frac vecvv right)= fracddt left(vβˆ’1 vecv right)= fracd(vβˆ’1)dt vecv+vβˆ’1 fracd vecvdt.







The second term is clear:





 fracd vecvdt= dot vecv=( ddotx, ddoty, ddotz),







and we’ll deal with the first one just by differentiating as a complex function:





 fracd(vβˆ’1)dt=(βˆ’1)vβˆ’2 fracdvdt,







here v= sqrt dotx2+ doty2+ dotz2= sqrt langle vecv, vecv rangle Is the module of our velocity vector, a scalar function, therefore we will simply further differentiate it as complex:





 fracdvdt= fracd sqrt langle vecv, vecv rangledt= frac12 sqrt langle vecv, vecv rangle fracd langle vecv, vecv rangledt= frac12v2 langle vecv, dot vecv rangle= dfrac langle vecv, dot vecv ranglev,







and now everything can be put together:





 fracd(vβˆ’1)dt=(βˆ’1)vβˆ’2 dfrac langle vecv, dot vecv ranglev=βˆ’ dfrac langle vecv, dot vecv ranglev3,







and finally:





 dot vec tau=βˆ’ dfrac langle vecv, dot vecv ranglev3 vecv+vβˆ’1 dot vecv= frac dot vecvvβˆ’ vecv dfrac langle vecv, dot vecv ranglev3= dfrac dot vecvv2βˆ’ vecv langle vecv, dot vecv ranglev3= dfrac dot vecv langle vecv, vecv rangleβˆ’ vecv langle vecv, dot vecv ranglev3.







The numerator strongly resembles the formula β€œbang minus dab” - a double vector product:





 left[ veca, left[ vecb, vecc right] right]= vecb langle veca, vecc rangleβˆ’ vecc langle veca, vecb rangle,







now if you accept  vecb= dot vecv, veca= vecv, vecc= vecv:





 dot vecv langle vecv, vecv rangleβˆ’ vecv langle vecv, dot vecv rangle= left[ vecv, left[ dot vecv, vecv right] right].







Now it’s not at all difficult to write the normal vector, and everything will be clear while still:





 vecn= frac dot vec tau| dot vec tau|= dfrac left[ vecv, left[ dot vecv, vecv right] right]/v3 left| left[ vecv, left[ dot vecv, vecv right] right] right|/v3= dfrac left[ vecv, left[ dot vecv, vecv right] right] left| left[ vecv, left[ dot vecv, vecv right] right] right|.









Binormal vector



Everything seems to be ready, but it feels like something is missing ... Our curve lives in three-dimensional space, where the number of basis vectors should be 3. We have so far received two perpendicular unit vectors. Well, no question, the third is easy to obtain using the vector product of the first two. Moreover, it will be perpendicular to the original one, and plus another unit, since the tangent and normal are single. People before us called it β€œbinormal”:





 vecb= left[ vec tau, vecn right],







but in order not to injure the psyche with a triple vector product, let's write the normal vector in this form:





 vecb= left[ frac vecvv, dfrac dot vecvv2βˆ’ vecv langle vecv, dot vecv rangle left| left[ vecv, left[ dot vecv, vecv right] right] right| right]= dfrac1v left| left[ vecv, left[ dot vecv, vecv right] right] right| left(v2 left[ vecv, dot vecv right]βˆ’ langle vecv, dot vecv rangle left[ vecv, vecv right] right),







where the second term is zero, because the vector product of the vector of itself = 0. And to simplify the denominator, we write:





 left| left[ vecv, left[ dot vecv, vecv right] right] right|=v left| left[ dot vecv, vecv right] right| sin( phi),







Where  phi= frac pi2 - angle between vectors  vecv and  left[ dot vecv, vecv right] . Naturally, it is direct, since the vector  left[ dot vecv, vecv right] perpendicular to its parents, so to speak.

Total we have a binormal vector:





 vecb= dfracv2 left[ vecv, dot vecv right]v2 left| left[ dot vecv, vecv right] right|= dfrac left[ vecv, dot vecv right] left| left[ vecv, dot vecv right] right|.







Well now that’s it, we got expressions for calculating the tangent, normal, and binormal vector for arbitrary parameterization of the curve. Let's write them all together:





 vec tau= frac vecvv,











 vecn= dfrac left[ left[ vecv, dot vecv right], vecv right] left| left[ left[ vecv, dot vecv right], vecv right] right|,











 vecb= dfrac left[ vecv, dot vecv right] left| left[ vecv, dot vecv right] right|.







Here we edited the normal vector a bit so that everything was in a good tone. That is, they rearranged in the inner bracket of the vector, and in the outer. Twice, because the sign remained the same.



Example



image

Curve "helix" and its vector: tangent - red, normal - green, binormal - blue



References:

Differential geometry of curves



If possible, to be continued ...



All Articles