![使用“calc”库的“TikZ”图中坐标放错](https://linux22.com/image/376136/%E4%BD%BF%E7%94%A8%E2%80%9Ccalc%E2%80%9D%E5%BA%93%E7%9A%84%E2%80%9CTikZ%E2%80%9D%E5%9B%BE%E4%B8%AD%E5%9D%90%E6%A0%87%E6%94%BE%E9%94%99.png)
在下面的代码中,绘制了一个五角星和它外接的正五边形。根据 Wolfram 的 Eric Weisstein 的说法,如果五角星的每条边为 1,则星形的每个点与其五角星形的最近顶点之间的距离为(1/2)*(3 - sqrt(5)) \approx 0.382
,而外接五角星的圆的半径为sqrt((1/10)*(5 - sqrt(5))) \approx 0.526
。星形的点分别标记为A
、B
、C
、D
和E
,并且相对于圆心A
位于。(-126:0.526)
要求画一个梯形,它的顶点分别是五边形的两个顶点和五角星的两个顶点,梯形的一个顶点在线段 上AD
,梯形的另一个顶点在线段 上BE
。
\coordinate (a_vertex_of_isosceles_trapezoid) ($(A)!{(1/2)*(3 - sqrt(5))}!(D)$);
\coordinate (another_vertex_of_isosceles_trapezoid) ($(B)!{(1/2)*(3 - sqrt(5))}!(D)$);
看起来这两个坐标都位于圆心。为什么会这样?(梯形的另外两个顶点是C
和E
。)
\documentclass{amsart}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\coordinate (center_of_pentagon) at (0,0);
\draw ($(center_of_pentagon) +(-126:{sqrt((1/10)*(5 - sqrt(5)))})$) coordinate (A)
-- ($(center_of_pentagon) +(-54:{sqrt((1/10)*(5 - sqrt(5)))})$) coordinate (B)
-- ($(center_of_pentagon) +(18:{sqrt((1/10)*(5 - sqrt(5)))})$) coordinate (C)
-- ($(center_of_pentagon) +(0,{sqrt((1/10)*(5 - sqrt(5)))})$) coordinate (D)
-- ($(center_of_pentagon) +(162:{sqrt((1/10)*(5 - sqrt(5)))})$) coordinate (E) -- cycle;
%
\coordinate (a_vertex_of_isosceles_trapezoid) ($(A)!{(1/2)*(3 - sqrt(5))}!(D)$);
\coordinate (another_vertex_of_isosceles_trapezoid) ($(B)!{(1/2)*(3 - sqrt(5))}!(D)$);
%
%\path[draw=black, fill=gray!50] (a_vertex_of_isosceles_trapezoid) -- (another_vertex_of_isosceles_trapezoid) -- (C) -- (E) -- cycle;
%
\draw[dashed, green] (A) -- (D);
\draw (D) -- (B);
\draw[dashed, green] (B) -- (E);
\draw (E) -- (C);
\draw (C) -- (A);
\end{tikzpicture}
\end{document}
答案1
语法\coordinate
是
\coordinate (<name>) at (<coordinate>);
你有
\coordinate (<name>) (<coordinate>);
(0,0)
在本例中,将使用默认坐标。因此,您的
\coordinate (a_vertex_of_isosceles_trapezoid) ($(A)!{(1/2)*(3 - sqrt(5))}!(D)$);
是相同的
\coordinate (a_vertex_of_isosceles_trapezoid) at (0,0) ($(A)!{(1/2)*(3 - sqrt(5))}!(D)$);
末尾的($(A)!{(1/2)*(3 - sqrt(5))}!(D)$)
并没有起到什么作用。我猜它只是将路径的当前点设置为($(A)!{(1/2)*(3 - sqrt(5))}!(D)$)
。
请注意,手册中明确指出,at
可以省略坐标规范部分。这是 3.0.1a 手册第 218 页的内容: