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}
나는 다음과 같은 결과를 얻었습니다.
내가 원하는 코드로:...
- 두 함수를 플롯합니다.
- 두 함수 사이의 영역을 음영 처리합니다. (이 경우 \N 매개변수를 설정할 수 있습니다.)
- 음영처리된 영역의 대략적인 값(리만 방법)을 계산합니다.
처음 두 지점에는 문제가 없습니다. 세 번째 점의 경우 결과는 항상 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
문서 수준에서 단일 문자 매크로를 정의할 때는 주의해야 합니다.