我在这里看到了很多关于在实数上绘制椭圆曲线的有用信息,但我在有限域上做同样的事情时遇到了麻烦。例如,假设我们尝试在 E 上绘制点:y^2 = x^3 + 1,其中 x,y 在 17 个元素的域中。
我尝试了一些组合
\foreach \x in {1,...,16}
\foreach \y in {1,...,16}{
let \lhs = {int(mod(\y*\y, 17))}
let \rhs = {int(mod(\x*\x*\x + 1,17))}
\ifthenelse{\lhs = \rhs}{
\node[circle,draw] (\x \y) at (\x,\y) {\x};
}{}
}
但我从来没有真正让它工作...图像应该变得类似于
答案1
不能let
在路径之外使用。只需使用\pgfmathsetmacro\lhr{…}
(或者在这种情况\pgfmathtruncatemacro\lhr{…}
下删除该int
函数)或者evaluate
钥匙为了\foreach
。
我稍微调整了节点样式并添加了值\x
和\y
标签,以便您可以检查评估点。
代码
\documentclass[tikz]{standalone}
\usepackage{xifthen}
\begin{document}
\begin{tikzpicture}[every label/.append style={font=\small}]
\foreach[
evaluate={\rhs = int(mod(\x*\x*\x + 1, 17));}
] \x in {1,...,16}{
\foreach[
evaluate={\lhs = int(mod(\y*\y, 17));}
] \y in {1,...,16}{
\ifthenelse{\lhs = \rhs}{
\node[circle, red, fill, label={\x, \y}] at (\x,\y) {};
}{}
}
}
\end{tikzpicture}
\end{document}