tzplot 패키지: 면적 계산 문제

tzplot 패키지: 면적 계산 문제

tzplot패키지 대신 패키지를 사용하기 시작했습니다 tikz. 유용한 단축키가 많이 있습니다. 하지만 이제 문제가 생겼습니다(아마도 내 실수일 것입니다). 이 코드에서:

\documentclass[12pt,a4paper]{article}
\usepackage{tzplot}
\def \N {50} % <-- change to higher/lower number if You want a more/less accurate shading
\begin{document}
    \begin{tikzpicture}[font=\scriptsize,scale=1.5]
        % axex, grid and ticklabels
        \tzhelplines[thick](-2,-4)(2,2)
        \tzshoworigin
        \tzaxes(-2,-4)(2,2)
        \tzticks{-2,-1,,1,2} % x-ticks
        {-4,-3,-2,-1,1,2} % y-ticks
        % plotting
        \clip (-2,-4) rectangle (2,2);
        \def\Fx{.3*(\x)^3-2} % <-- def cubic (F)
        \tzfn\Fx[-2:2]       % <-- naming the path F
        \def\Gx{-2*(\x)^2+2} % <-- def parabola (G)
        \tzfn\Gx[-2:2]       % <-- naming the path G
        \tzXpoint*{Fx}{Gx}(P){$A$}[0]{2pt}
        \tzdot(P-2){$B$}[0]{2pt}  
        \tzgetxyval(P){\Px}{\Py}% <-- coordinate of first point of intersection between F and G
        \tzgetxyval(P-2){\Qx}{\Qy}% <-- coordinate of second point of intersection between F and G
        \pgfmathsetmacro{\dx}{(\Qx-\Px)/\N};
        \def \t {0}; % <-- initial Riemann area
        \foreach \n in {0,1,...,\N}{% <-- loop for shading area
            \pgfmathsetmacro{\x}{\Px+\n*\dx};
            \tzvXpointat{Fx}{\x}(R)%{$R_\n$}[b]
            \tzgetxyval(R){\Rx}{\Ry} % <-- IT SEEMS DONT WORK IN THIS CASE
            \tzvXpointat{Gx}{\x}(S)%{$S_\n$}[t]
            \tzgetxyval(S){\Sx}{\Sy} % <-- IT SEEMS DONT WORK IN THIS CASE
            \pgfmathsetmacro{\t}{\t+(\Sy-\Ry)*\dx} %<-- temporary Riemann area
            \draw[blue!50,opacity=.3] (R)--(S);
        }
        \tzfn[very thick,magenta]\Fx[-2:2]
        \tzfn[very thick,cyan]\Gx[-2:2]
        \draw (0,-3.5) node[fill=yellow,font=\ttfamily] {Area|,=\;\t}; % <-- final Riemann area
    \end{tikzpicture}
\end{document}

나는 다음과 같은 결과를 얻었습니다.

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

내가 원하는 코드로:...

  1. 두 함수를 플롯합니다.
  2. 두 함수 사이의 영역을 음영 처리합니다. (이 경우 \N 매개변수를 설정할 수 있습니다.)
  3. 음영처리된 영역의 대략적인 값(리만 방법)을 계산합니다.

처음 두 지점에는 문제가 없습니다. 세 번째 점의 경우 결과는 항상 0입니다(그림의 노란색 영역 참조). 동일한 구역에서 면적 값 이 아닌 이전에 계산된 \Rx, \Ry, 의 값을 인쇄하려고 하면 오류가 발생합니다. 그래서 저는 이러한 변수의 계산에서 문제가 발생한다고 생각합니다. 어떠한 제안? (내 영어로 미안해요)\Sx\Sy

참고: 그림의 경우 음영 영역 값은 7.68 영역 단위와 같아야 합니다.

참고 1: 아마도 루프 외부의 루프 내부에 하나의 변수를 사용할 수 없을 것입니다! 하지만 하나의 해결책을 찾을 수 없습니다 ...

답변1

나는 당신의 계산이 완전히 괜찮다고 생각하지만 루프 내부의 모든 것이 범위 지정되므로 범위 지정 문제가 발생합니다 \foreach. 따라서 \global\let다음과 같은 방법을 사용하여 계산된 값을 루프 외부로 푸시해야 합니다 .

\documentclass[12pt,a4paper]{article}
\usepackage{tzplot}
\def\N{50} % <-- change to higher/lower number if You want a more/less accurate shading
\begin{document}
    \begin{tikzpicture}[font=\scriptsize,scale=1.5]
        % axex, grid and ticklabels
        \tzhelplines[thick](-2,-4)(2,2)
        \tzshoworigin
        \tzaxes(-2,-4)(2,2)
        \tzticks{-2,-1,,1,2} % x-ticks
        {-4,-3,-2,-1,1,2} % y-ticks
        % plotting
        \clip (-2,-4) rectangle (2,2);
        \def\Fx{.3*(\x)^3-2} % <-- def cubic (F)
        \tzfn\Fx[-2:2]       % <-- naming the path F
        \def\Gx{-2*(\x)^2+2} % <-- def parabola (G)
        \tzfn\Gx[-2:2]       % <-- naming the path G
        \tzXpoint*{Fx}{Gx}(P){$A$}[0]
        \tzdot(P-2){$B$}[0]  
        \tzgetxyval(P){\Px}{\Py} % <-- coordinate of first point of intersection between F and G
        \tzgetxyval(P-2){\Qx}{\Qy} % <-- coordinate of second point of intersection between F and G
        \pgfmathsetmacro{\dx}{(\Qx-\Px)/\N}
        \def\gt{0} % <-- initial Riemann area (global variable)
        \def\t{0}  % <-- initial Riemann area (local variable inside loop)
        \foreach \n in {0,1,...,\N} { % <-- loop for shading area
            \pgfmathsetmacro{\x}{\Px+\n*\dx}
            \tzvXpointat{Fx}{\x}(R) % {$R_\n$}[b]
            \tzgetxyval(R){\Rx}{\Ry} 
            \tzvXpointat{Gx}{\x}(S) % {$S_\n$}[t]
            \tzgetxyval(S){\Sx}{\Sy} 
            \pgfmathsetmacro{\t}{\gt + (\Sy-\Ry)*\dx} % <-- temporary Riemann area
            \global\let\gt\t % <-- set global variable to new value
            \draw[blue!50,opacity=.3] (R)--(S);
        }
        \tzfn[very thick,magenta]\Fx[-2:2]
        \tzfn[very thick,cyan]\Gx[-2:2]
        \draw (0,-3.5) node[fill=yellow,font=\ttfamily] {Area\;=\;\gt}; % <-- final Riemann area
    \end{tikzpicture}
\end{document}

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

그런데 \def문서 수준에서 단일 문자 매크로를 정의할 때는 주의해야 합니다.

관련 정보