In Bezug auf das gezeigte MWE muss ich eine Parabel mit den folgenden Eigenschaften zeichnen:
- Parabel beginnt am Punkt "A"
- Parabel endet am Punkt "B"
- Der Scheitelpunkt der Parabel liegt am Punkt „F“
- "AE" ist die Tangente der Parabel im Punkt "A"
- "BE" ist die Tangente der Parabel im Punkt "B"
- "II" ist Tangente der Parabel im Punkt "F"
Ich habe diese Parabel mit drei Methoden aufgezeichnet:
- Plotfunktion: Die richtige ist die in der magentafarbenen Linie
- Bezierkurve mit 2 Kontrollpunkten, wobei nur Start- und Endpunkt definiert sind (rote Kurve)
- Bézierkurve mit 2 Kontrollpunkten, an denen Start- und Endpunkte sowie die Spitze der Parabel definiert sind (blaue Kurve).
Das Problem ist, wie ich die Parabel mit der Tangentenmethode (Kontrollpunkte, Bézierkurve usw.) zeichnen kann, sodass ich dasselbe Ergebnis wie mit der Plotfunktion erreiche, da ich die Funktion der Kurve nicht immer erhalten kann. Also kurz gesagt:
- Durch Kenntnis der dargestellten Tangenten und Kontrollpunkte: Wie kann ich die Kurve mit der Bézierkurvenmethode ( ...kontrolliert ...) so zeichnen, dass das Ergebnis mit der Magentakurve übereinstimmt, die ich mit der „Plot-Funktion“ erhalte (die die richtige ist)
- Falls ich zufällig weiß, dass die Winkel bei (A) und (B) (14,036243468) Grad bzw. (82,874983651) Grad betragen (horizontale Linie: Winkel = 0) (die Winkel können leicht variieren, es dient nur dazu, den Vorgang hervorzuheben), wie kann ich den Winkel der Tangenten bestimmen, wenn ich die Winkel ebenfalls kenne??
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{figure}[!htbp]
\begin{center}
\begin{tikzpicture}
%%%%%%%%%%%%%%GRID%%%%%%%%%%%%%%%%%%%%%%%%
\draw[help lines,step=0.5](0,2) grid(12,25);
\coordinate (a1) at (0,12.5);
\node[circle,inner sep=2pt,fill=none, draw=black] at (a1) (a1) {A};
\coordinate (b1) at (12,12.5);
\node[circle,inner sep=2pt,fill=none, draw=black] at (b1) (b1) {B};
\draw [very thick] (a1) -- (b1);
\coordinate (V1) at (2*12/3,12.5-0.1*32);
\node[circle,inner sep=2pt,fill=none, draw=black] at (V1) (V1) {E};
\draw [dashed] (a1) -- (V1);
\draw [dashed] (V1) -- (b1);
\coordinate (ZS1) at (12/3^0.5,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none, draw=black] at (ZS1) (ZS1) {F};
\coordinate (V2L) at (0,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none, draw=black] at (V2L) (V2L) {I};
\coordinate (V2'L) at (04.6188,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none, draw=black] at (V2'L) (V2'L) {C};
\coordinate (V2R) at (12,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none,draw=black] at (V2R) (V2R) {I};
\coordinate (V2'R) at (12-2.3094,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none,draw=black] at (V2'R) (V2'R) {B};
\draw[dashed] (V2L) -- (V2R);
%RED CURVE
\draw[very thick,color=red] (a1) .. controls (V2'L) and (V2'R) .. (b1);
%BLUE CURVE
\draw[very thick,color=blue] (a1) .. controls (V2'L) .. (ZS1) .. controls (V2'R).. (b1);
%plot the function
\begin{scope}[shift={(0,12.5)}]
\draw[very thick,color=magenta, domain=0:12] plot (\x, {0.1*-(2*-1)*pow(\x,3)/(6*12)+\x*12*0.1*(2*-1)/6});
\end{scope}
\end{tikzpicture}
\end{center}
\end{figure}
\end{document}
Antwort1
Dies ist mehr oder weniger aus der hobby
Anleitung übernommen.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}[tangent/.style={%
in angle={(180+#1)} ,
Hobby finish ,
designated Hobby path=next , out angle=#1,
}]
\draw[color=magenta,ultra thick, domain=0:12] plot
(\x, {0.1*-(2*-1)*pow(\x,3)/(6*12)+\x*12*0.1*(2*-1)/6});
\draw[thick,use Hobby shortcut] ([tangent=-22]0,0) .. ([tangent=0]7,-1.85) ..
([tangent=38]12,0);
\end{tikzpicture}
\end{document}
Und dies ist ein Stil, der die hobby
Bibliothek verwendet, um den Pfad aus den Eingaben zu konstruieren: Startpunkt, Endpunkt, Spitze und Punkt, der die Steigungen bestimmt.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc,hobby}
\begin{document}
\begin{tikzpicture}[tangent/.style={%
in angle={(180+#1)} ,
Hobby finish ,
designated Hobby path=next , out angle=#1},
para/.code={\tikzset{/tikz/params/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/params/##1}}
\tikzset{use Hobby shortcut,insert path={let \p1=($(\pv{S})-(\pv{start})$),
\p2=($(\pv{end})-(\pv{S})$),\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)} in
([tangent=\n1]\pv{start}) .. ([tangent=0]\pv{tip}) .. ([tangent=\n2]\pv{end})
}}
},params/.cd,start/.initial={-1,0},end/.initial={1,0},
tip/.initial={0,-1},S/.initial={0,-2}]
% define the coordinates in an intuitive way
\path (0,0) coordinate (A) (12,0) coordinate (B)
(2*12/3,-0.1*32) coordinate (E)
(12/3^0.5,-0.1*18.475) coordinate (F);
% your plot
\draw[color=magenta,ultra thick, domain=0:12] plot
(\x, {0.1*-(2*-1)*pow(\x,3)/(6*12)+\x*12*0.1*(2*-1)/6});
% your tangents
\draw[dashed] (A) -- (E) (B) -- (E);
% hobby-based path
\draw[thick,para={start=A,end=B,tip=F,S=E}];
% label the points
\path foreach \X in {A,B,E,F}
{(\X) node[circle,fill,inner sep=1pt,label=below:{$\X$}]{}};
\end{tikzpicture}
\end{document}
Beachten Sie, dass eine kubische Bézierkurve 8 Parameter hat. 3 davon sind zwei Translationsparameter und ein Winkel. Sie haben also 5 Parameter, die zur Charakterisierung der Kurve verwendet werden können. Sie können rückwärts arbeiten, um die obige Kurve zu konstruieren, aber hobby
das erledigt es für Sie, zumindest für die Situation, die Sie hier beschreiben.