tzplot 套件:面積計算問題

tzplot 套件:面積計算問題

我開始用tzplotpackage代替tikzpackage。有很多有用的快捷方式。但現在我遇到了問題(也許是我的錯)。從這段程式碼來看:

\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. 計算陰影面積的一個近似值(黎曼法)。

對於前兩點沒有問題。對於第三點,結果始終為零(請參閱圖中的黃色區域)。如果在同一個區域中,我嘗試列印的不是面積值,而是列印\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在文件層級使用的單字母巨集。

相關內容