
Инверсия точки P и центра O — это другая точка P' вдоль линии OP, такая, что произведение OP. OP' = k, то есть константа k. Инверсия окружности точкой O (не лежащей в окружности) — это другая окружность, как на рисунке ниже.
Можно ли нарисовать второй круг в TikZ как (правильную) инверсию первого? Я знаю, что легко делать переносы, вращения и другие линейные преобразования... но никогда не видел инверсии.
решение1
Пока вы ждете решения TikZ, вот простой способ сделать свою диаграмму вМетапост. Базовая геометрия хорошо объяснена.на Mathworld, (хотя диаграмма там показывает инверсию точкиснаружикруг инверсии; в данном случае роли P
и P'
меняются местами, поскольку P
находится внутри круга инверсии).
Здесь я добавил контур части круга инверсии бледно-розового цвета, чтобы сделать более очевидным, как это работает. Конечно, вы можете удалить розовую дугу, если она не нужна.
prologues := 3;
outputtemplate := "%j%c.eps";
vardef invert_point(expr p, k) =
if abs(p)>0:
unitvector p scaled (k/abs(p)) scaled k
else:
origin % strictly this should be a point at infinity
fi
enddef;
vardef invert_path(expr P, k) =
for t=0 step 1/16 until length P-1/16:
invert_point(point t of P, k) --
endfor
if cycle P:
cycle
else:
invert_point(point infinity of P, k)
fi
enddef;
beginfig(1);
path C, C';
pair P, P', Q;
k = 150;
draw subpath (-1.4,1.4) of fullcircle scaled 2k withcolor .8[red,white];
C = fullcircle scaled 72 shifted 100 right;
P = point 1 of C;
C' = invert_path(C, k);
P' = invert_point(P, k);
Q = (origin -- P) intersectionpoint subpath (2,4) of C;
draw origin -- P';
draw origin -- center C' withcolor .5 white;
draw P' -- center C' withcolor .5 white;
draw Q -- center C withcolor .5 white;
draw C;
draw C' withcolor .78 blue;
fill fullcircle scaled 3;
fill fullcircle scaled 3 shifted P;
fill fullcircle scaled 3 shifted Q;
fill fullcircle scaled 3 shifted P';
fill fullcircle scaled 3 shifted center C;
fill fullcircle scaled 3 shifted center C';
label(btex $O$ etex, origin + (-6,3));
label(btex $P$ etex, P + (+3,7));
label(btex $P'$ etex, P' + (-3,7));
label(btex $Q$ etex, Q + (-3,7));
label(btex $C$ etex, point 5.5 of C + (-3,-7));
endfig;
end
Примечания
Для простоты
invert_point
предположим, что центр окружности инверсии находится в начале координат. Но не составит труда адаптировать подпрограмму для принятия произвольной окружности вместо радиусаk
.Опять же, для простоты я привел здесь две разные функции для a
path
и для a,point
но вы можете легко написать однуinvert
функцию и использоватьif path P
иif pair P
для выбора правильного действия в соответствии с тем, что вы ей передали.Выражение
unitvector p scaled (k/abs(p)) scaled k
может быть более естественно записано какunitvector p scaled (k**2/abs(p))
, но вы получите ошибку арифметического переполнения, если установитеk
значение больше 181. Это потому, что182**2
это больше, чем2**15
наибольшее число, которое позволяет обычный MP. Чтобы избежать этого, либо закодируйте его так, как я показал, либо используйтеmpost -numbersytem=double
для его обработки.Не используйте это для инвертирования точки в начале координат, поскольку вы не сможете легко представить бесконечность на конечной диаграмме.
решение2
Я рассчитал это в Tikz следующим образом.
Во-первых, есть две разные инверсии:
- точка находится внутри круга инверсии;
- суть находится вне его.
Я начну со второго случая. Я нарисую окружность с центром в точке «O» (называемой «k») и найду точку инверсии точки «P» вне окружности «k».
Первое, что вам нужно знать, это одна из точек касания от "P" к "k". Проекция этой точки на линию "OP" является точкой инверсии "P".
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (P) at (5,0);
\draw[red,thick,name path=circ1](O)circle(2);
%
% I look for the midpoint of O and P. This point will be the centre of
% an arc whose intersection with k will give me the tangent points
%
\path(O)--coordinate[midway](M)(P);
%
% I draw the arc whose intersection with circle are the 2 tangent points
%
\path[name path=circ2] let
\p1=(O),
\p2=(M),
\n1={veclen(\x2-\x1,\y2-\y1)} in
($(M)+({\n1*cos(130)},{\n1*sin(130)})$) arc (130:230:\n1);
\path[name intersections={of=circ1 and circ2}]
(intersection-1) coordinate (Tg1)
(intersection-2) coordinate (Tg2);
\draw[blue]
(A)--(Tg1)
(O)--node[midway,left,black]{$\mathtt{r}$}(B)
(O)--(A);
%
% Here we are. This projection is the inversion of point P with regards
% to circle k
%
\draw[orange](Tg1)--($(O)!(Tg1)!(P)$)coordinate(InvP);
%
\draw[black,line width=.75,fill=white]
(P)circle(1.5pt)node[black,below]{$\mathtt{P}$};
\draw[black,line width=.75,fill=white]
(O)circle(1.5pt)node[black,below]{$\mathtt{O}$};
\draw[black,line width=.75,fill=white]
(Tg1)circle(1.5pt)node[black,below]{$\mathtt{Tg1}$};
\draw[black,line width=.75,fill=white]
(InvP)circle(1.5pt)node[black,below]{$\mathtt{P'}$};
\node at (-1.75,0) {$\symtt{k}$};
\end{tikzpicture}
\end{document}
Когда точка находится внутри окружности, все, что нам нужно сделать, это найти перпендикулярную прямую из OP, найти пересечение этой прямой с окружностью k (назовем ее TgP), провести касательную из этой точки и найти ее пересечение с OP.