Я нарисовал график параболы y = 0.5 - a x^2
, которая пересекает ось x в точках "корней" 0.75
и -0.75
имеет изгиб в точке с координатой (0, 0.5)
. И я хочу отметить точку на параболе, которая имеет координату 0.33 * \rootPosition
на оси x. (Вот \rootPosition
число 0.75
). Я написал следующий код
\documentclass[tikz]{standalone}
\usepackage{tikz, pgfmath}
\begin{document}
\begin{tikzpicture} [scale=3, >=stealth]
\def\bendPosition{0.5};
\def\rootPosition{0.75};
\def\coeffA{\pgfmathdivide{\bendPosition}{\pgfmathpow{\rootPosition}{2}}};
\draw[thick] (-\rootPosition,0) parabola bend (0, \bendPosition) (\rootPosition, 0);
\def\arbitraryPosition{0.33 * \rootPosition};
\coordinate (arbitrary_point) at (\arbitraryPosition, \bendPosition - \coeffA* \pgfmathpow{\arbitraryPosition}{2}));
\filldraw[black] (arbitrary_point) circle(0.4pt);
\end{tikzpicture}
\end{document}
Но когда я компилирую этот код, я получаю ошибку
! Incomplete \iffalse; all the text ignored after line 14
, где 14 строка начинается с\coordinate (arbitrary_point)..
В чем дело?
решение1
Не следует использовать символ подчеркивания в именах макросов, хотя TikZ обрабатывает его достаточно хорошо для большинства случаев. Символ подчеркивания — это команда индекса mathmode, и вы можете спокойно избегать его с другими типами.
Основная проблема в том, что математические операции не расширяются до результата, когда встречаются на пути. Они сохраняют результат в вызываемом макросе \pgfmathresult
, и парсер должен видеть его, но не математические операторы.
\begin{tikzpicture} [scale=3, >=stealth]
\def\bendPosition{0.5};
\def\rootPosition{0.75};
\pgfmathsetmacro\coeffA{\bendPosition/(\rootPosition)^2}
\draw[thick] (-\rootPosition,0) parabola bend (0, \bendPosition) (\rootPosition, 0);
\pgfmathsetmacro\arbitraryPosition{0.33 * \rootPosition}
\coordinate (arbitrary_point) at (\arbitraryPosition, {\bendPosition - \coeffA* (\arbitraryPosition)^2});
\filldraw[black] (arbitrary_point) circle(0.4pt);
\end{tikzpicture}