Umgang mit der Klothoide
 
 

 Author: Rolf Wirz / 2010  /  Erstellt mit Mathematica

Klothoide

1. Putzmaschine

Remove["Global`*"]

2. Definitionen

Drehmatrix

dreh[φ_] := {{Cos[φ], -Sin[φ]}, {Sin[φ], Cos[φ]}};
dreh[φ] // MatrixForm

Kurven

p2[m3_, m4_] = {m3, m4};

klotVec[len_, a_, c_] := 
        a {Integrate[Cos[c t^2], {t, 0, len}],  
            Integrate[Sin[c t^2], {t, 0, len}]};

p1[m1_, m2_] = {m1, m2};

klotVec[len_, a_, c_, p1_] := 
        a {Integrate[Cos[c t^2], {t, 0, len}],  
              Integrate[Sin[c t^2], {t, 0, len}]} + p1;

klotVec[len_, a_, c_, m1_, m2_] := 
        a {Integrate[Cos[c t^2], {t, 0, len}],  
              Integrate[Sin[c t^2], {t, 0, len}]} + {m1, m2};

kreis[r_, α_] := 
        r {Cos[α], Sin[α]};

kreis[r_, α_, m3_, m4_] := 
        r {Cos[α], Sin[α]} + {m3, m4};

kreis[r_, α_, p2_] := 
        r {Cos[α], Sin[α]} + p2;

Plotfunktionen (Beispiele siehe unter Tests und Plots)

pKloth[a_, c_, m1_, m2_, len1_, len2_, φ_] := 
      ParametricPlot[
        Evaluate[dreh[φ] . klotVec[len, a, c, m1, m2]], {len, len1, 
          len2}, AspectRatio -> Automatic]

pKreis[r_, m3_, m4_, φ1_, φ2_] := 
        ParametricPlot[
          Evaluate[
            kreis[r, α, m3, 
              m4]], {α, φ1, φ2}, 
          AspectRatio -> Automatic];

pKreisVoll[r_, m3_, m4_, φ1_, φ2_] := 
        ParametricPlot[
          Evaluate[
            kreis[r, α, m3, 
              m4]], {α, φ1, φ2}, 
Epilog -> {PointSize[0.03], Hue[1], 
              Point[{m3, m4}],     Line[{{m3, m4}, 
                  kreis[r, φ1, m3, m4]}],     Line[{{m3, m4}, 
                  kreis[r, φ2, m3, 
                    m4]}] }, 
AspectRatio -> 
            Automatic, 
          PlotRange -> {m4 - r - 0.1  r, m4 + r + 0.1 r}];

pKreisVoll[r_, p3_, φ1_, φ2_] := 
        pKreisVoll[r, p3[[1]], 
          p3[[2]], φ1, φ2];

Tangentenvektoren

1. Ableitung

D[Evaluate[klotVec[len, 1, 1/2]], len]

1. Ableitung

D[Evaluate[klotVec[len, 1, 1/2]], {len, 1}]

2. Ableitung

D[Evaluate[klotVec[len, 1, 1/2]], {len, 2}]

Vektor, n-te Ableitung, normiert

dKlotVec[laenge_, a_, c_, m1_, m2_, n_]  :=  
      Evaluate[ 
          D[Evaluate[klotVec[len, a, c, m1, m2], {len, n}]]] /. {len -> 
            laenge}

dKlotVecNorm[laenge_, a_, c_, m1_, m2_, n_]  :=  
      Evaluate[ 
          D[Evaluate[klotVec[len, a, c, m1, m2], {len, n}]]/
            Norm[D[Evaluate[
                  klotVec[len, a, c, m1, m2], {len, n}]]]] /. {len -> 
            laenge}

Krümmung der Klothoide

Benütze die Kurve   klotVec[len,a,c,m1,m2]

κ[laenge_, a_, c_, m1_, 
        m2_] := (Evaluate[(D[( klotVec[len, a, c, m1, 
                              m2][[1]]), {len, 
                          1}]  D[ (klotVec[len, a, c, m1, 
                              m2][[2]]), {len, 2}] - 
                    D[ (klotVec[len, a, c, m1, m2][[1]]), {len, 
                          2}] D[( klotVec[len, a, c, m1, 
                              m2][[2]]), {len, 
                          1}])/((D[( klotVec[len, a, c, m1, 
                                  m2][[1]]), {len, 1}]^2 + 
                        D[ (klotVec[len, a, c, m1, 
                                  m2][[2]]), {len, 1}]^2)^(3/
                        2))] // 
            Simplify) /. {Cos[c (len^2)]^2 +  Sin[c (len^2)]^2 -> 
            1, len -> laenge}

Krümmungsradius

κRadius[laenge_, a_, c_, m1_, m2_] := 
        1/κ[laenge, a, c, m1, m2];
κRadius[laenge_, a_, c_, p3_] := 
        1/κ[laenge, a, c, p3[[1]], p3[[2]]];

3. Tests und Plots

Koordinaten und Ableitungen

Evaluate[klotVec[len, 1, 1/2]]

Evaluate[klotVec[1, 1, 1/2, p1[1, 1]]] // N

Evaluate[klotVec[1, 1, 1/2, 1, 1]] // N

kreis[1, 2, 5, 8] // N

kreis[1, 2, p2[5, 8]] // N

Vektor, n-te Ableitung

dKlotVec[len, 1, 1/2, 10, 20, n]

dKlotVec[laenge, 1, 1/2, 10, 20, 3]

Klothoidenstücke

plo1 = 
        ParametricPlot[Evaluate[klotVec[len, 1, 1/2]], {len, 0, 20}, 
          AspectRatio -> Automatic];

plo2 = 
        ParametricPlot[
          Evaluate[klotVec[len, 1, 1/2, p1[1, 1]]], {len, 0, 20}, 
          AspectRatio -> Automatic];

plo3 = 
        ParametricPlot[
          Evaluate[klotVec[len, 1, 1/2, 1, 1]], {len, -20, 20}, 
          AspectRatio -> Automatic];

plo4 = 
      ParametricPlot[
        Evaluate[dreh[Pi/9] . klotVec[len, 1, 1/2]], {len, -10, 10}, 
        AspectRatio -> Automatic]

Klothoidenstücke mit Plot als Funktion

plo5 = pKloth[1, 1/2, 3, 2, 1, 4, Pi/3];

plo6 = pKloth[1, 1/2, 3, 2, 1, -2, 0.5];

Kreisstücke mit Plot als Funktion

plo7 = pKreis[1, 10, 12, 1, 2];

plo8 = pKreisVoll[1, 10, 12, 1, 2];

plo9 = pKreisVoll[1, 10, 12, 1, 3.5];

plo10 = pKreisVoll[1, 0, 3, 1, 3.5];

pKreisVoll[1, {3, 1}, 0, 3.5];

Show[plo5, plo1, plo10, PlotRange -> {0, 6}];

Krümmung und Krümmungsradius der Klothoide

κ[laenge, a, c, m1, m2]

κ[len, 1, 1/2, 3, 4]

κ[20, 1, 1/2, 3, 4]

κRadius[20, 1, 1/2, 3, 4]

Grösse der Krümmung geplotet

Plot[
        Evaluate[κ[len, 1, 1/2, 3, 4]], {len, -3, 
          3}];

Plot[
        Evaluate[κRadius[u, 1, 1/2, 3, 4]], {u, 1, 8}];

4. Eine einfache Zusammensetzung einer Klothoide mit einem Kreis: Der Krümmungsradius des Kreises soll der gleiche wie der der Klothoide sein!

pl1 = pKloth[1, 1/2, 0, 0, 0, 3, Pi/3];

tang[0] = 
      Evaluate[dreh[Pi/3] . dKlotVecNorm[0, 1, 1/2, 0, 0, 1]  // 
          N]

Norm[tang[0]]

tang[3] = 
      Evaluate[dreh[Pi/3] . dKlotVecNorm[3, 1, 1/2, 0, 0, 1]  // 
          N]

Norm[tang[3]]

pun[0] = Evaluate[dreh[Pi/3] . klotVec[0, 1, 1/2, 0, 0]]

pun[3] = 
      Evaluate[dreh[Pi/3] . klotVec[3, 1, 1/2, 0, 0] // N]

kr[3] = 
        pKreisVoll[ Evaluate[κRadius[3, 1, 1/2, pun[3]]], 
          pun[3] + 
            dreh[Pi/2] . tang[3]    κRadius[3, 1, 1/2, pun[3]], 0, 
          2 Pi];

<< Graphics`Arrow`

Show[
        Graphics[{PointSize[0.03], Point[pun[0]],  
            Point[pun[3]], 
Hue[0],  
            Point[pun[3] + 
                dreh[Pi/2] . tang[3]    κRadius[3, 1, 1/2, 
                    pun[3]] ], 
Arrow[pun[0], 
              pun[0] + tang[0]], Arrow[pun[3], pun[3] + tang[3]], 
            Arrow[pun[3], pun[3] + dreh[Pi/2] . tang[3]]}], pl1, 
        AspectRatio -> Automatic];

Show[
        Graphics[{PointSize[0.03], Point[pun[0]],  
            Point[pun[3]], 
Hue[0],  
            Point[pun[3] + 
                dreh[Pi/2] . tang[3]    κRadius[3, 1, 1/2, 
                    pun[3]] ], 
Arrow[pun[0], 
              pun[0] + tang[0]], Arrow[pun[3], pun[3] + tang[3]], 
            Arrow[pun[3], pun[3] + dreh[Pi/2] . tang[3] ]}], pl1, kr[3], 
        AspectRatio -> Automatic];

4. Weitere Zusammensetzungen von Klothoiden und Kreisen (Strassen- und Schienenbau): Das ist jetzt die praktische Arbeit des Beauftragten...

Weiter mit eigener Arbeit!   .......................