実数体上の楕円曲線を描くための役立つ情報がここにたくさんありましたが、有限体上で同じことを行うのに苦労しています。たとえば、17 個の要素を持つ体で x、y を持つ E: y^2 = x^3 + 1 上の点を描画するとします。
いくつかの組み合わせを試してみました
\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}