4

Is it possible to create parametric equations to approximate a tapered cycloid offset curve without cusps, that does not require manual adjustment of values when the primary curve parameters are changed? If so, how?

tapered cycloid offset image link

Creating tapered offset curves without cusps has applications in computer aided design. CAD programs can not handle tapered offsets or self intersecting curves. Stress concentration occurs at cusps. Strain relief is accomplished by smoothing cusps and gradual tapering in accordance with Euler-Bernoulli beam theory.

For t = 0 to waveCount: $$\begin{align} &\mathrm{xWave}(t) = \mathrm{waveLength} (t - \mathrm{waveShape} \ \sin(2 \pi t + \pi)/(2 \pi)) \\ &\mathrm{yWave}(t) = \mathrm{waveHeight} (1 + \cos(2 \pi t + \pi))/2 + \mathrm{offset}/2 \\ &\mathrm{xOffset} = \mathrm{xWave}(t) + {\mathrm{offset} \ \mathrm{yWave}'(t) \over \sqrt{\mathrm{xWave}'(t)^2 + \mathrm{yWave}'(t)^2}} \\ &\mathrm{yOffset} = \mathrm{yWave}(t) - {\mathrm{offset} \ \mathrm{xWave}'(t) \over \sqrt{\mathrm{xWave}'(t)^2 + \mathrm{yWave}'(t)^2}} \end{align}$$

According to Mathematica: $$\begin{align} &\mathrm{xOffset} = \mathrm{waveLength} ( t + {\mathrm{waveShape} \ \sin(2 \pi t)/(2 \pi)}) \\ &\qquad + {\mathrm{offset} \ \pi \ \mathrm{waveHeight} \ \sin(2 \pi t) \over \sqrt{\mathrm{waveLength}^2 (1 + \mathrm{waveShape} \ \cos(2 \pi t))^2 + \pi^2 \mathrm{waveHeight}^2 \sin(2 \pi t)^2}} \\ &\mathrm{yOffset} = \mathrm{waveHeight}(1-\cos(2 \pi t))/2 + \mathrm{offset}/2 \\ &\qquad - {\mathrm{offset} \ \mathrm{waveLength}(1+\mathrm{waveShape} \ \cos(2 \pi t)) \over \sqrt{\mathrm{waveLength}^2 (1 + \mathrm{waveShape} \ \cos(2 \pi t))^2 + \pi^2 \mathrm{waveHeight}^2 \sin(2 \pi t)^2}} \end{align}$$

$$\begin{align} &\mathrm{offset} = \mathrm{startWidth} - (\mathrm{startWidth} - \mathrm{endWidth} ) t/\mathrm{waveCount} \\ &\mathrm{taper} = (\mathrm{startWidth} - \mathrm{endWidth})/(\mathrm{waveCount} \ \mathrm{waveLength}) \\ &\mathrm{xRelief} = \mathrm{waveLength} (t - \mathrm{reliefShape} \ \sin(2 \pi t + \pi - \mathrm{taper})/(2 \pi)) \\ &\mathrm{yRelief} = \mathrm{reliefHeight} (1 + \cos(2 \pi t + \pi - \mathrm{taper}))/2 - \mathrm{offset}/2 \\ &\mathrm{reliefHeight} = \mathrm{waveHeight} (\mathrm{reliefA} + \mathrm{reliefB} \ t/\mathrm{waveCount}) \end{align}$$

xWave and yWave are parametric equations for the cycloid curve, shown in blue. xOffset and yOffset are parametric equations for the tapered offset curve, shown in green. Typically, offset would be a value that specifies a parallel offset, but in this case, offset is an equation that specifies a tapered offset. xRelief and yRelief are parametric equations for the desired relief curve without cusps, shown in dashed red, but do not meet the additional condition of not requiring manual adjustment.

The relief curve in this example is implemented with another cycloid, fitting it to the tapered offset curve by trial and error manual adjustment of reliefShape, and reliefA and reliefB, which determine reliefHeight. Because it is not expressed in terms of the primary parameters, it is necessary to manually adjust it if the primary parameters (waveLength, waveCount, waveHeight, waveShape, startWidth, endWidth) are modified.

Subtracting waveShape/2 from reliefHeight almost but not quite compensates for changes to waveShape. waveShape determines the sine to cosine ratio: 1 = regular cycloid, .5 = curtate cycloid, 0 = pure (co)sine wave. .5 to 0 is the useful range for waveShape.

tapered cycloid offset image link

Mathematica code:

Clear["Global`*"]; SetOptions[ParametricPlot, ImageSize -> Full, PlotStyle -> {Blue, Green, {Dashed, Red}}];

xWave[t_] := waveLength (t - waveShape Sin[2 Pi t + Pi]/(2 Pi)) yWave[t_] := waveHeight (1 + Cos[2 Pi t + Pi])/2 + offset/2

xOffset = xWave[t] + (offset yWave'[t])/Sqrt[xWave'[t]^2 + yWave'[t]^2] yOffset = yWave[t] - (offset xWave'[t])/Sqrt[xWave'[t]^2 + yWave'[t]^2]

offset := startWidth - (startWidth - endWidth ) t/waveCount taper := (startWidth - endWidth)/(waveCount waveLength) xRelief := waveLength (t - reliefShape Sin[2 Pi t + Pi - taper]/(2 Pi)) yRelief := reliefHeight (1 + Cos[2 Pi t + Pi - taper])/2 - offset/2 reliefHeight := waveHeight (reliefA + reliefB t/waveCount)

waveLength = 1/4; waveHeight = 1/16; startWidth = 5/64; endWidth = 3/64; waveCount = 4; waveShape = .25; reliefShape = .5; reliefA = .72; reliefB = .14;

ParametricPlot[{{xWave[t], yWave[t]}, {xOffset, yOffset}, {xRelief, yRelief}}, {t, 0, waveCount}]

morsel
  • 41

0 Answers0