我的问题参考这个帖子: 在 Latex 中绘制椭圆曲线 我希望它们不太相似,但这些问题的答案对我来说不起作用。我正尝试在 Latex 中绘制它
但是,当我尝试使用问题“在 Latex 中绘制椭圆曲线”中的答案中的代码时,我始终得到一条左侧开放的曲线。
我正在使用 Texmaker 并希望将此图包含在文档类中
\documentclass[11pt,a4paper,british,openright]{book}
如果有人能告诉我在使用 Latex 实现这个功能时所犯的错误,或者告诉我如何正确实现它,我会非常高兴。
在评论中,有人建议我更改“域”部分。但我不知道这部分对我的情节有什么作用,所以最后变得相当混乱。
\documentclass[border=5pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.12,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-3,
xmax=4,
ymin=-7,
ymax=7,
xlabel={$x$},
ylabel={$y$},
scale only axis,
axis lines=middle,
% set the minimum value to the minimum x value
% which in this case is $-\sqrt[3]{7}$
domain=-2.646:4,
samples=200,
smooth,
% to avoid that the "plot node" is clipped (partially)
clip=false,
% use same unit vectors on the axis
axis equal image=true,
]
\addplot [red] {sqrt(x^3+7)}
node[right] {$y^2=x^3+7$};
\addplot [red] {-sqrt(x^3+7)};
\draw[color=blue] (-4, 0) node[left] {$\bullet$};
\draw[color=blue] (-1.71, 1.4) node[left] {$P_1$};
\draw[color=blue] (-1.71, 1.4) node[left] {$\bullet$};
\draw[color=blue] (0.33,2.65) node[left] {$P_2$};
\draw[color=blue] (0.33,2.65) node[left] {$\bullet$};
\draw[color=blue] (1.76, 3.53) node[left] {$R$};
\draw[color=blue] (1.76, 3.53) node[left] {$\bullet$};
\draw[color=blue] (1.76, -3.53) node[left] {$P_3 = P_1+P_2$};
\draw[color=blue] (1.76, -3.53) node[left] {$\bullet$};
\end{axis}
\end{tikzpicture}
\end{document}
如果有人能帮助我,我将非常感激。
一切顺利,
卢卡
答案1
正如下面的评论中所述,达莱夫并在回答中约翰内斯domain
由于您使用了错误的起点,因此曲线没有“闭合” 。
(有趣的是,你用过我的回答来自相应的问题,但无论出于何种原因,将domain
起点改为-2.646
...我们也已经在该答案下面的评论中讨论过这一点。)
对于第二点:您的标记没有绘制在您期望的位置,因为您首先声明一个坐标,然后说应该绘制一个节点[left]
指定坐标的作为$\bullet$
文本。
请查看代码的注释来了解其工作原理的更多细节。
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
% `calc' library used for the line from (P0) through (P3)
\usetikzlibrary{calc}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}[
% define the style `point' which is used for the nodes on the coordinates
point/.style={
circle,
fill=blue,
inner sep=1.5pt,
},
]
\begin{axis}[
xmin=-4.5,
xmax=4,
ymin=-7,
ymax=7,
xlabel={$x$},
ylabel={$y$},
scale only axis,
axis lines=middle,
% set the minimum value to the minimum x value
% which in this case is $-\sqrt[3]{7}$
domain=-1.912931:3,
samples=200,
smooth,
% to avoid that the "plot node" is clipped (partially)
clip=false,
% use same unit vectors on the axis
axis equal image=true,
]
\addplot [red] {sqrt(x^3+7)}
node[right] {$y^2=x^3+7$};
\addplot [red] {-sqrt(x^3+7)};
% add nodes to the points and the corresponding labels
\node [point]
(P0) at (-4,0) {};
\node [point,label={left:$P_1$}]
(P1) at (-1.71,1.4) {};
\node [point,label={above:$P_2$}]
(P2) at (0.33,2.65) {};
\node [point,label={right:$P_3 = P_1 + P_2$}]
(P3) at (1.76,3.53) {};
\node [point,label={right:$R$}]
(R) at (1.76,-3.53) {};
% draw a line from (P0) a bit further than just to (P3)
\draw [blue] (P0) -- ($ (P0)!1.1!(P3) $);
\end{axis}
\end{tikzpicture}
\end{document}
答案2
使用domain=<x1>:<x2>
和,samples=<num>
您可以指定在哪些点pgfplots
处计算函数值。因此,只有当这样的数据点恰好是函数的根时,绘图才会从 x 轴开始。
最朴素的解决方案是将样本数量增加到荒谬的数量,然后只希望获得最佳效果。更聪明的方法是手动计算根(正如 daleif 已经建议的那样)并相应地指定域。
编辑:由于 Stefan 已经解决了节点标签的问题,我只想向您展示另一种计算交点的方法(似乎不适用于该
smooth
选项):
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-4.5,xmax=4,ymin=-7,ymax=7,
xlabel=$x$,ylabel=$y$,
scale only axis,axis lines=middle,
samples=200,%smooth,
clip=false,axis equal image=true
]
\addplot [red,domain=-1.91293:4,name path=CurveA] {sqrt(x^3+7)};
\addplot [red,domain=-1.91293:4,name path=CurveB] {-sqrt(x^3+7)};
\path [name path=LineA] (-4,0) -- (4,4.90);
\path [name path=LineB] (-4,0) -- (4,-4.90);
\fill [blue,name intersections={of=CurveA and LineA}]
(intersection-1) circle (2pt) node [above left] {$P_1$}
(intersection-2) circle (2pt) node [below right] {$P_2$}
(intersection-3) circle (2pt) node [below right] {$R$};
\path [blue,name intersections={of=CurveB and LineB}];
\fill [blue] (intersection-3) circle (2pt)
node [above right] {$P_3 = P_1 + P_2$};
\fill [blue] (-4,0) circle (2pt);
\fill [blue] (-4,0) circle (2pt);
\end{axis}
\end{tikzpicture}
\end{document}