Como desenhar a inversão de um círculo no TikZ?

Como desenhar a inversão de um círculo no TikZ?

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. Inversão de um Ciclo

É 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 Pe P'estão invertidos porque Pestá 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.

Um círculo com uma inversão

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_pointassume-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 raio k.

  • Novamente, para simplificar, forneci aqui duas funções diferentes para a pathe para a, pointmas você poderia facilmente escrever uma única invertfunção e usar if path Pand if pair Ppara escolher a ação correta de acordo com o que você passou para ela.

  • A expressão unitvector p scaled (k/abs(p)) scaled kpode ser escrita de forma mais natural, unitvector p scaled (k**2/abs(p))mas você obterá um erro de estouro aritmético se definir kpara mais de 181. Isso porque 182**2é maior do que 2**15o maior número permitido pelo MP simples. Para evitar isso, codifique-o como mostrei ou use-o mpost -numbersytem=doublepara 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:

  1. o ponto está dentro do círculo de inversão;
  2. 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}

insira a descrição da imagem aqui

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.

informação relacionada