2010-12-04 58 views
4

我正在嘗試重建TikZ中的歐元符號。我的基本指南 http://upload.wikimedia.org/wikipedia/commons/5/57/Euro_Construction.svg用pgf/tikz創建歐元符號

我碰到的問題是,我可以計算所有交點,到目前爲止,但 我無法指示tikz從例如畫圓弧A到K.雖然我可以畫出 那個使用裁剪的弧線,據我所知,不會產生連接的 路徑。我試圖避免手動計算所有角度。

對於SVG的支持有\ pgfpatharcto,儘管這似乎有點矯枉過正, 它可能做的工作,這使我的下一個問題:我如何才能從 \ pgfpoints命名協調例如(A)在\ pgfpatharcto中使用它們?更好: 我怎麼能在svg路徑數據中使用命名座標? (B) - (A)svg「a 6 6 0 0 0(K)」 - (O)...;

我已經是這樣的:

Alt text http://img.skitch.com/20101204-ef3a3xwh2reqis67phqenmuxa2.png
上傳Skitch

使用帶:

\begin{tikzpicture} 
\draw[step=5mm, gray, very thin] (-7.5,-7.5) grid (7.5,7.5); % grid 

% inner and outer circle to be used for the intersections 
\path[name path=outer] (0,0) circle[radius=6]; 
\path[name path=inner] (0,0) circle[radius=5]; 

% upper, semi upper, semi lower and lower horizontal lines. 
\path[name path=U] (-7.5,1.5) -- (4,1.5); 
\path[name path=u] (-7.5,0.5) -- (4,0.5); 
\path[name path=l] (-7.5,-0.5) -- (4,-0.5); 
\path[name path=L] (-7.5,-1.5) -- (4,-1.5); 

% the upwards slope and the vertical line at +-40 deg at 5 units. 
\path[name path=slope] ($(0,-6)!0.25!(40:5)$) -- ($(0,-6)!1.25!(40:5)$); 
\path[name path=fourty] ($(40:5)!0.5!(-40:5)$) -- ($(40:5)!1.25!(-40:5)$); 

% naming all the intersections. 
\path[name intersections={of=outer and slope, by={A}}]; 
\path[name intersections={of=inner and slope, by={B}}]; 

\path[name intersections={of=U and slope, by={C}}]; 
\path[name intersections={of=u and slope, by={D}}]; 
\path[name intersections={of=l and slope, by={E}}]; 
\path[name intersections={of=L and slope, by={F}}]; 

\path[name intersections={of=U and inner, by={G}}]; 
\path[name intersections={of=u and inner, by={H}}]; 
\path[name intersections={of=l and inner, by={I}}]; 
\path[name intersections={of=L and inner, by={J}}]; 

\path[name intersections={of=U and outer, by={K}}]; 
\path[name intersections={of=u and outer, by={L}}]; 
\path[name intersections={of=l and outer, by={M}}]; 
\path[name intersections={of=L and outer, by={N}}]; 

\coordinate (O) at ($(-7.5,0.5)+(C)-(D)$); 
\coordinate (P) at (-7.5,0.5); 
\coordinate (Q) at ($(-7.5,-1.5)+(E)-(F)$); 
\coordinate (R) at (-7.5,-1.5); 

\path[name intersections={of=fourty and inner, by={S}}]; 
\path[name intersections={of=fourty and outer, by={T}}]; 

% drawing the intersections 
\foreach \p in {A,...,T} \fill[red] (\p) circle (2pt) node[above left,black] {\footnotesize\p}; 

% constructing the path 
\draw (A) -- (B) (G) -- (C) -- (D) -- (H) (I) -- (E) -- (F) -- (J) (S) -- (T) (N) -- (R) -- (Q) -- (M) (L) -- (P) -- (O) -- (K); 

% missing segments 
\draw[gray,dashed] circle[radius=5] circle[radius=6]; 

\end{tikzpicture} 

UPDATE(與PGF馬林的幫助G參數,我們得出了以下的解決方案)

\draw[thick,fill] let \p1=(A), \p2=(K), \p3=(L), \p4=(M), \p5=(N), \p6=(T), 
       \p7=(S), \p8=(J), \p9=(I), \p{10}=(H), \p{11}=(G), \p{12}=(B), 
       \n{aA}={atan2(\x1,\y1)}, \n{aK}={atan2(\x2,\y2)}, 
       \n{aL}={atan2(\x3,\y3)}, \n{aM}={360+atan2(\x4,\y4)}, 
       \n{aN}={360+atan2(\x5,\y5)}, \n{aT}={360+atan2(\x6,\y6)}, 
       \n{aS}={360+atan2(\x7,\y7)}, \n{aJ}={360+atan2(\x8,\y8)}, 
       \n{aI}={360+atan2(\x9,\y9)}, \n{aH}={atan2(\x{10},\y{10})}, 
       \n{aG}={atan2(\x{11},\y{11})}, \n{aB}={atan2(\x{12},\y{12})} 
       in (A) arc (\n{aA}:\n{aK}:6) -- (O) -- (P) 
       -- (L) arc (\n{aL}:\n{aM}:6) -- (Q) -- (R) 
       -- (N) arc (\n{aN}:\n{aT}:6) 
       -- (S) arc (\n{aS}:\n{aJ}:5) -- (F) -- (E) 
       -- (I) arc (\n{aI}:\n{aH}:5) -- (D) -- (C) 
       -- (G) arc (\n{aG}:\n{aB}:5) -- cycle; 

這讓TikZ計算點的角度,從上面這是一個簡單的調用弧。 對我來說,棘手的部分是數學引擎的使用。該文檔太難以應對了,我錯過了使用花括號將數值引擎分配給新值的部分。

+1

順便說一句 - 雖然這個問題是關於這個話題,但您可以在tex.stackexchange.com找到更多的乳膠用戶。沒有遷移路徑,所以你不得不重新發布...... – dmckee 2010-12-05 02:59:54

回答

1

允許,我已經永遠只能得出1(算什麼,一個)數字在TikZ,什麼是錯的

\draw (A) arc (Aangle:Kangle:outerRadius) 

其中outerRadius似乎是6和Aangle好像是40度,我不要在提供的數據中立即看到Kangles(但數值完全受限...看起來像arcsin(1.5/6))。

+0

是的,這是正確的做法。我被卡住的地方是角度的計算,參見上文。 – angerman 2010-12-05 16:46:43