"플롯 기능"을 사용하여 곡선 그리기 대 베지어 곡선(접선 방법)

"플롯 기능"을 사용하여 곡선 그리기 대 베지어 곡선(접선 방법)

표시된 MWE와 관련하여 다음 속성을 사용하여 포물선을 그려야 합니다.

  • 포물선은 점 "A"에서 시작됩니다.
  • 포물선은 "B" 지점에서 끝납니다.
  • 포물선의 정점은 "F" 지점에 있습니다.
  • "AE"는 "A" 지점에서 포물선에 접합니다.
  • "BE"는 "B" 지점에서 포물선에 접합니다.
  • "II"는 "F" 지점에서 포물선에 접합니다.

나는 세 가지 방법을 사용하여 이 포물선을 그렸습니다.

  • 플롯 기능: 자홍색 선이 올바른 것
  • 시작점과 끝점만 정의된 2개의 제어점이 있는 베지어 곡선(빨간색 곡선)
  • 2개의 제어점이 있는 베지어 곡선. 시작점과 끝점은 물론 포물선의 정점도 정의됩니다(파란색 곡선).

문제는 항상 곡선의 기능을 얻을 수 없기 때문에 플롯 기능을 통해 얻은 것과 동일한 결과를 얻을 수 있도록 접선 방법(제어점, 베지어 곡선....)을 사용하여 포물선을 그리는 방법입니다. . 간단히 말해서:

  • 표시된 접선 및 제어점에 대한 지식을 통해 베지어 곡선 방법( ...controls ...)을 사용하여 결과가 "플롯 함수"로 얻은 자홍색 곡선과 동일하도록 곡선을 그리는 방법( 어느 쪽이 맞는지)
  • (A)와 (B)의 각도가 각각 (14.036243468)도 및 (82.874983651)도라는 것을 알게 된 경우(수평선: 각도 = 0)(각도는 약간 다를 수 있으며 프로세스를 강조하기 위한 것입니다. ), 각도도 알고 있는 경우 접선의 각도를 어떻게 정의할 수 있습니까??
\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}

여기에 이미지 설명을 입력하세요

답변1

이것은 매뉴얼에서 어느 정도 따온 것입니다 hobby.

\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}

여기에 이미지 설명을 입력하세요

hobby이는 라이브러리를 사용하여 입력(시작점, 끝점, 끝점 및 경사를 결정하는 지점)으로부터 경로를 구성하는 스타일입니다 .

\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}

여기에 이미지 설명을 입력하세요

3차 베지어 곡선에는 8개의 매개변수가 있습니다. 그 중 3개는 두 개의 변환 매개변수와 하나의 각도입니다. 따라서 곡선을 특성화하는 데 사용할 수 있는 5개의 매개변수가 있습니다. 거꾸로 작업하여 위의 곡선을 구성할 수 있지만 hobby적어도 여기서 설명하는 상황에서는 그렇게 합니다.

관련 정보