2010-05-10 116 views
3

我想在PGF/TikZ中显示一个球体来说明大圆的想法。如何查找PGF/TikZ中的椭圆交点

我现在的结果的代码是:

\begin{tikzpicture} 

\tikzfading[name=fade right, 
left color=transparent!20, 
right color=transparent!90] 

\tikzfading[name=fade out, 
inner color=transparent!100, 
outer color=transparent!10] 

\tikzfading[name=fade right gc, 
left color=transparent!0, 
right color=transparent!70] 

\draw [<->, dashed] (0,-5) -- (0,5); % y-axis 
\draw [->, dashed] (0, 0) -- (20:5); % x-axis 
\draw [->, dashed] (0, 0) -- (200:5); % x-axis 
\draw [->, dashed] (0, 0) -- (340:5); % z-axis 
\draw [->, dashed] (0, 0) -- (160:5); % z-axis 

\fill [color=cyan, opacity=0.15, path fading=fade out] (0,0) circle (4cm); % bounding circle 
\fill [color=cyan, opacity=0.25, path fading=fade right, fading angle=90] (0,0) ellipse (4cm and 1cm); % x-y-axis area 

% great circle 1 
\draw [rotate=-40, color=red, path fading=fade right gc, fading angle=40] (0,0) ellipse (4cm and 1cm); 

% great circle 2 
\draw[rotate=5, color=red, path fading=fade right gc, fading angle=5] (0,0) ellipse (1.5cm and 4cm); 

\end{tikzpicture} 

我如何

  1. 找到两个红色椭圆相交的两个点(评论道大圆1和2),
  2. 找到一条线(起源于中心(0,0))与一个椭圆的交点,并在那里放置一个小圆或矩形?

放置一个小圆圈或矩形不存在问题。 非常感谢!

回答

1

查看第4.1.4节。 TikZ and PGF manual,标题为“圆圈的交集”。您需要使用intersections库,该库允许您使用name intersections密钥,如\path [name intersections={of=path 1 and path 2}] ;中所述。要使用它,您需要使用name path密钥,如\draw [name path = y axis, <->, dashed] (0,-5) -- (0,5) ; % y-axis。访问交叉点似乎在版本之间有所不同;我本地的手册副本与我联系的人有不同的说明。然而,至少在我的版本,你再进入路口与(intersection-1)(intersection-2)等。要在您的例子中,每个路口得到各界的话,我会改变你的代码如下所示:

\begin{tikzpicture} 
    \tikzfading[ name  = fade right 
      , left color = transparent!20 
      , right color = transparent!90 ] 

    \tikzfading[name   = fade out 
      , inner color = transparent!100 
      , outer color = transparent!10 ] 

    \tikzfading[name   = fade right gc 
      , left color = transparent!0 
      , right color = transparent!70] 

    \draw [name path = y axis, <->, dashed] (0,-5) -- (0,5) ; % y-axis 
    \draw [name path = x- axis, ->, dashed] (0, 0) -- (20:5) ; % x-axis 
    \draw [name path = x+ axis, ->, dashed] (0, 0) -- (200:5) ; % x-axis 
    \draw [name path = z+ axis, ->, dashed] (0, 0) -- (340:5) ; % z-axis 
    \draw [name path = z- axis, ->, dashed] (0, 0) -- (160:5) ; % z-axis 

    % bounding circle 
    \fill [color=cyan, opacity=0.15, path fading=fade out] 
     (0,0) circle (4cm) ; 

    % x-y-axis area 
    \fill [color=cyan, opacity=0.25, path fading=fade right, fading angle=90] 
     (0,0) ellipse (4cm and 1cm); 

    % great circle 1 
    \draw [ name path = great circle 1 
     , rotate  = -40 
     , color  = red 
     , path fading = fade right gc 
     , fading angle = 40] 
     (0,0) ellipse (4cm and 1cm); 

    % great circle 2 
    \draw [ name path = great circle 2 
     , rotate  = 5 
     , color  = red 
     , path fading = fade right gc 
     , fading angle = 5] 
     (0,0) ellipse (1.5cm and 4cm); 

    % Intersections 
    \path [name intersections={of=great circle 1 and great circle 2}] ; 
    \foreach \i in {1,...,4} 
    \fill [color=red] (intersection-\i) circle (2pt) ; 

    \path [name intersections={of=y axis and great circle 1}] ; 
    \fill (intersection-1) circle (2pt) ; 
    \fill (intersection-2) circle (2pt) ; 
    \path [name intersections={of=y axis and great circle 2}] ; 
    \fill (intersection-1) circle (2pt) ; 
    \fill (intersection-2) circle (2pt) ; 

    \foreach \a in {x,z} { 
    \foreach \ss in {+,-} { 
     \def\s.{\ss} % Otherwise the space in `\a\s axis` would get gobbled. 
     \path [name intersections={of=\a\s. axis and great circle 1}] ; 
     \fill (intersection-1) circle (2pt) ; 
     \path [name intersections={of=\a\s. axis and great circle 2}] ; 
     \fill (intersection-1) circle (2pt) ; 
    } 
    } 
\end{tikzpicture} 

除了重新格式化(为了避免水平滚动条),我更改了现有的代码,将name path键添加到您的轴和大圆圈。然后我添加了十字路口代码,这应该是相对不言自明的。首先记住\usetikzlibrary{intersections},一切都应该起作用。

+1

感谢您的详细解答。据我所知,我需要从CVS获得最新的开发者版本,因为intersection不包含在“regular”pgf-2.00.tar.gz中。由于我在安装时遇到了一些问题,因此我会尽快回复。 – user327684 2010-05-10 21:51:30

+0

这个(第二篇文章=第一个回复)http://www.latex-community.org/forum/viewtopic.php?f=45&t=5687可能对许多其他运行MikTex有用。 – user327684 2010-05-11 07:51:41

+0

完美的作品!非常感谢! – user327684 2010-05-11 07:58:21