I know one can use the intersection package to find the point of intersection but I don't understand how to do it yet.
I would like to label the increasing order of the intersections F^*_2
, F^*_1
, F^*_m
. F^*_1
(but over set with a ~), and F^*_2
with the same over set.
Note: I am ignoring the lower and upper most intersections.
The code is:
\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{through,calc}
\makeatletter
\tikzset{circle through extra radius/.code={% unorthodox addon for the through library
% needs to be used after 'circle through'!
% this can be avoided by slightly changing the source
\tikz@addoption{%
\pgfmathsetlengthmacro\pgf@tempa{\pgfkeysvalueof{/pgf/minimum width}+2*(#1)}%
\pgfset{/pgf/minimum width/.expanded=\pgf@tempa}%
}%
}}
\tikzset{
special style/.code={%
\if#1\tikz@nonactiveexlmark
\pgfkeysalso{@special style}%
\else
\pgfkeysalso{style/.expanded=#1}%
\fi
},
@special style/.style={draw=none,fill=none}
}
\makeatother
\begin{document}
\begin{tikzpicture}[
every label/.append style={font=\small},
dot/.style={fill,outer sep=+0pt,inner sep=+0pt,minimum size=2pt,shape=circle,draw=none,label={#1}},
dot/.default={}
]
\begin{scope}[rotate around ={-20.5560452:(1, -.75)}]
\node[scale = .75, dot = {right: \(P_1\)}] (P1) at (3cm, 0) {};
\node[scale = .75, dot = {\(P_2\)}] (P2) at (-1, 0) {};
\node[scale = .75, dot = {below: \(F\)}] (F) at (1cm, -.75cm) {};
\path[blue] (F) edge (P1) edge (P2) (P1) edge (P2);
\path ($(P1)!.75!(P2)$) coordinate (half-center);
\foreach \sStyle/\xFocus in {{draw, thick}/half}
\foreach \cPoint in {1, 2}
\foreach \sStyleR/\dDeltaRadius[count = \cRadius from 0] in
{/.0cm, /.5cm, /1cm, /1.5cm}
{
\node[style/.expanded = \sStyle,
special style/.expanded = {\sStyleR}] at (P\cPoint.center)
({\xFocus:\cPoint:\cRadius}) [circle through/.expanded =
{(\xFocus-center)}, circle through extra radius = \dDeltaRadius] {};
\global\let\cRadius\cRadius
}
\clip(-4, -5) rectangle (8, 5);
\draw [samples = 50, domain = -0.99:0.99, xshift = 1cm, red,
thick] plot ({(-1 - (\x)^2) / (1 - (\x)^2)},
{1.73 * (-2) * (\x) / (1 - (\x)^2)});
\end{scope}
\end{tikzpicture}
\end{document}
From my post Tikz: drawing concentric circles with specified origins and the arc that connects the intersections
Qrrbrbirlbel found the intersections with
\foreach \cSolution in {1,2}
\foreach \cRadius in {1,...,3}
\coordinate (i-\cRadius-\cSolution) at (intersection cs: first node={F:1:\cRadius}, second node={F:2:\cRadius}, solution=\cSolution);
but I am not clear on how to adapt the solution for my problem.
Edit 1:
I don't know if there is a smooth way to automate the process, but I have the middle point defined as:
\node[scale = .75, dot = {right:\(\overset{\mbox{~}}{F}_m^*\)}] (Fm)
at ($(P1)!.75!(P2)$) {};
How can I make the the dot bigger and the overset ~
wont appear. I have tried \~
and ~
but nothing works.
Edit 2:
Close up of the output from Qrr.. answer:
The \tilde
isn't overset and the node placement isn't similar.
Edit 3:
I was able to adjust some of the nodes but for the nodes along the hyperbola, if I adjust them more, the top nodes will be out of place.
\begin{tikzpicture}[scale = .7,
every label/.append style = {font = \small},
dot/.style = {fill, outer sep = +0pt, inner sep = +0pt,
shape = circle, draw = none, label = {#1}},
dot/.default =,
small dot/.style = {minimum size = 2pt, dot = {#1}},
small dot/.default =,
big dot/.style = {minimum size = 3pt, dot = {#1}},
big dot/.default =
]
\begin{scope}[rotate around ={-23.9625:(.75, -1)}]
\begin{scope}
\clip(-2, -4) rectangle (0, 4);
\draw [samples = 50, domain = -0.99:0.99, xshift = 1cm, red, thick]
plot ({(-1 - (\x)^2) / (1 - (\x)^2)},
{1.73 * (-2) * (\x) / (1 - (\x)^2)});
\end{scope}
\node[scale = .75, small dot = {right: \(P_1\)}] (P1) at (3, 0) {};
\node[scale = .75, small dot = {below, left = 3.5pt: \(P_2\)}] (P2) at
(-1, 0) {};
\node[scale = .75, small dot = {below, left = 3.5pt: \(F\)}] (F)
at (.75, -1) {};
\path[blue] (F) edge (P1) edge (P2) (P1) edge (P2);
\path ($(P1)!.75!(P2)$) coordinate (Fm) node[big dot =
{below = 10pt, right = 3pt: \(F_m^*\)}] {};
\foreach \cPoint in {1, 2}
\foreach \sStyleR/\dDeltaRadius[count = \cRadius from 0] in
{.0cm, .5cm, 1cm}
\node[draw, thick] at (P\cPoint.center) (\cPoint: \cRadius)
[circle through = (Fm), circle through extra radius = \dDeltaRadius]
{};
\foreach \cSolution in {1, 2}
\foreach \cRadius in {1, 2}
\node[black, big dot = {right = 2pt, below = 2pt:
$\ifnum\cSolution = 2\expandafter\tilde\fi F^*_\cRadius$}]
(n-\cRadius-\cSolution) at
(intersection cs: first node = {1: \cRadius},
second node = {2: \cRadius},
solution = \cSolution) {};
\end{scope}
\end{tikzpicture}
Best Answer
You can use the same
\foreach
loop for the labeling:The math behind the
intersection cs
seems to be a little bit un-precise, so I repeated the task with theintersections
library.(I also have cleaned up a little bit.)
Code (
intersection cs
)Output (
intersection cs
)Code (
intersections
library)Output (
intersections
library)