Parallel curve of parametric equation without "cusps"?

478 Views Asked by At

Given a parametric curve $\{f_x[t], f_y[t]\}$, the parametric formulas for its parallel (two branches) with a positive offset $d$ is

$$ \left\{f_x[t] + \dfrac{df_y'[t]}{\sqrt{f_x'[t]^2 + f_y'[t]^2}},\, f_y[t] - \dfrac{d f_x'[t]}{\sqrt{f_x'[t]^2 + f_y'[t]^2}} \right\} $$

[Here is a picture showing an example of a parallel curve of a sine wave.]

parallel sine

Is it possible to find a curve parallel to a curve but without these loopy "cusp" things on top? It would look like the top curve in the picture, but with the parts cut off where it crosses itself.

2

There are 2 best solutions below

0
On

The red curve ( that appears as a sine curve) has a wavelength/period, say $p$ and amplitude $A$. For cosine curve $ y= A \cos \dfrac{2 \pi x}{\lambda} $ we can find minimum radii of curvatures. Radius of curvature at crest or trough is found by differentiation using standard curvature formula to be:

$$ R= \dfrac{ \left( {\lambda/{2 \pi}} \right)^2}{ A} $$

The given green and purple curves are here drawn with $ d \approx \lambda/2 >R $.

If they had been drawn with $d<R,$ no cusp will appear and the parallel curve would be smooth and wavy.

If they had been drawn exactly with $d= R $ one cusp only will appear. What forms in this case "touches" evolute normally by contact at the vertex center of curvature.

And when $d>R$ there would be two cusps with ever increasing domes and troughs of the parallel curves coverage with crests and troughs producing bigger arcs spanning between their bi-cusps.

Parallel Curve Wiki first figure illustrates it all, with single minimum it is less complicated. They are offset curves in Engineering parlance, and for 3-space they are known as Bertrand parallel Surfaces.

0
On

the sine curve is periodic. you can get rid of the cusps by using its period or by using max(a,b) or min(a,b) understand y=sin(x) as modulo where every other tile is mirrored.

//return p modulo s/2, but with every other tile mirror-reversed. s=period. float pModMirror1(in float p, float s){float h=s*.5; return (mod(p+h,s)-h)*(mod(floor((p+h)/s),2.)*2.-1.);}//from hg_sdf by mercury