
A inversão de um ponto P e centro O é outro ponto P' ao longo da linha OP tal que o produto OP. OP' = k, ou seja, uma constante k. A inversão de um círculo, por um ponto O (não dentro do círculo) é outro círculo, como na figura abaixo.
É possível desenhar o segundo círculo no TikZ como uma inversão (correta) do primeiro? Sei que é fácil fazer translações, rotações e outras transformações lineares... mas nunca vi uma inversão.
Responder1
Enquanto você espera por uma solução TikZ, aqui está uma maneira simples de fazer seu diagrama emMetapost. A geometria básica é bem explicadano mundo da matemática, (embora o diagrama mostre a inversão de um pontoforao círculo de inversão; no caso aqui os papéis de P
e P'
estão invertidos porque P
está dentro do círculo de inversão).
Aqui eu adicionei o contorno de parte do círculo de inversão em rosa claro para tornar um pouco mais óbvio como funciona - você pode, é claro, remover o arco rosa se não for necessário.
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
Notas
Para simplificar,
invert_point
assume-se que o círculo de inversão está centrado na origem. Mas não seria difícil adaptar a sub-rotina para aceitar um círculo arbitrário em vez do raiok
.Novamente, para simplificar, forneci aqui duas funções diferentes para a
path
e para a,point
mas você poderia facilmente escrever uma únicainvert
função e usarif path P
andif pair P
para escolher a ação correta de acordo com o que você passou para ela.A expressão
unitvector p scaled (k/abs(p)) scaled k
pode ser escrita de forma mais natural,unitvector p scaled (k**2/abs(p))
mas você obterá um erro de estouro aritmético se definirk
para mais de 181. Isso porque182**2
é maior do que2**15
o maior número permitido pelo MP simples. Para evitar isso, codifique-o como mostrei ou use-ompost -numbersytem=double
para processá-lo.Não use isto para inverter um ponto na origem; já que você não pode representar facilmente o infinito em um diagrama finito.
Responder2
Eu resolvi isso no Tikz da seguinte maneira.
Primeiro, existem duas inversões diferentes:
- o ponto está dentro do círculo de inversão;
- o ponto está fora dele.
Vou começar pelo segundo caso. Vou desenhar um círculo centrado no ponto “O” (chamado “k”) e procurar o ponto de inversão do ponto “P” fora do círculo “k”.
A primeira coisa que você precisa saber é o ponto tangente de "P" a "k". A projeção deste ponto na linha “OP” é o ponto de inversão de “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}
Quando o ponto está dentro do círculo, tudo o que precisamos fazer é encontrar a reta perpedicular a partir de OP, encontrar a intersecção desta reta com o círculo k (chamemos-lhe TgP), traçar a reta tangente a partir deste ponto e encontrar a sua intersecção com OP.