パパスチェーン



Pappus Chain



解決:

リンクで提供されている座標を使用して:

 documentclass [border = 10pt] {standalone}  usepackage {tikz}  usetikzlibrary {calc}  newcommand  RadiiBig {4}  newcommand  RadiiSmall {3}  begin {document}  begin {tikzpicture}  coordinate [label = below :A](A)at(0,0);  coordinate [label = below:B](B)at( RadiiBig * 2,0);  coordinate [label = below:C](C)at( RadiiSmall * 2,0);  pgfmathsetmacro { r} { RadiiSmall /  RadiiBig}  draw [gray!50]($(A)+(-1,0)$)-($(B)+(1,0)$);  draw( RadiiBig、0)円( RadiiBig);  draw( RadiiSmall、0)円( RadiiSmall); % draw($(C)+( RadiiBig-  RadiiSmall、0)$)円( RadiiBig-  RadiiSmall);  foreach  n in {1、...、15} {% pgfmathsetmacro { denom} { n *  n *(1-  r)*(1-  r)+  r}  pgfmathsetmacro { x} {2 *  RadiiBig *  r *(1+  r)/(2 *  denom)}  pgfmathsetmacro { y} {2 *  RadiiBig *  n *  r *(1-  r)/  denom}  pgfmathsetmacro { Radn} {2 *  RadiiBig *  r *(1-  r)/(2 *  denom)}  draw( x、 y)circle( Radn);  draw( x、- y)円( Radn); }  end {tikzpicture}  end {document}

ここに画像の説明を入力してください



編集

Tikzに円反転を適用したThrustonのアイデアに従います。 AP * AP '= r ^ 2によって点PがP'に反転されるという定義を使用すると、rはミラーリング円であり、次のようになります。点を反転する機能しかしなかったので、そこから円の鏡像の中心を導き出す必要があります。



 begin {tikzpicture} [declare function = {CircInv( APp、 r)=  r *  r /  APp;}]  coordinate [label = below:A](A)at(0,0);  coordinate [label = below:B](B)at( RadiiBig * 2,0);  coordinate [label = below:C](C)at( RadiiSmall * 2,0);  pgfmathsetmacro { Rp} { RadiiBig-  RadiiSmall} %% R ' pgfmathsetmacro { r} {2 *  RadiiBig} %% r:ミラーサークル pgfmathsetmacro { R} {(CircInv(2 *  RadiiSmall、  r)- r)/ 2} %% R:最初の円の鏡像 coordinate [label = below:$ P '$](Pp)at($(C)+( Rp、0)$); %%最初の円の中心 coordinate [label = below:$ P $](P)at($(B)+( R、0)$); %%最初の円の鏡像の中心%%  draw [gray !50]($(A)+(-1,0)$)-($(B)+(3,0)$);  draw( RadiiBig、0)円( RadiiBig);  draw( RadiiSmall、0)円( RadiiSmall);  draw [red](A)(-20: r)arc(-20:50: r);  draw [red](A)-+(-15: r)node [pos = 0.5、アンカー=南] {$ r $};  draw [blue](Pp)circle( Rp);  draw [blue](Pp)-+(45: Rp)node [pos = 0.5、anchor = south east] {$ R '$};  draw [gray](P)circle( R);  draw [gray](P)-+(45: R)node [pos = 0.5、anchor = south east] {$ R $}; %%  foreach  n in {1,2} {%%列の円を示す最初のループ pgfmathsetmacro { alpha} {atan(2 *  n *  R /( r +  R))}  pgfmathsetmacro { X} {2 *  n *  R / sin( alpha)} %%(A)から円の中心までの長さ pgfmathsetmacro { Rpn} {(CircInv( X-  R、 r)-CircInv(  X +  R、 r))/ 2} %%ミラー円のサイズ pgfmathsetmacro { Y} {CircInv( X +  R、 r)+  Rpn} %%長さ(Aから中央のミラー円 draw [灰色](A)-( alpha: X);  draw [灰色](P |-{(0,2 *  n *  R)})円( R);  draw [blue] (A)-( alpha: Y)circle( Rpn);}  foreach  n in {3,4、...、30} {%%前のループと同じですが、灰色のものはありません pgfmathsetmacro { alpha} {atan(2 *  n *  R /( r +  R))}  pgfmathsetmacro { X} {2 *  n *  R / sin( alpha)}  pgfmathsetmacro { Rpn} {( CircInv( X-  R、 r)-CircInv( X +  R、 r))/ 2}  pgfmathsetmacro { Y} {CircInv( X +  R、 r)+  Rpn}  draw [青](A)( alpha: Y)円( Rpn);}  end {tikzpicture}

ここに画像の説明を入力してください


これは反転反転で描くこともできます。

ここに画像の説明を入力してください



TikZで反転を行う方法がわかりませんが、ここにMetapostバージョンがあります。luamplib。でコンパイルlualatex。

 RequirePackage {luatex85}  documentclass [border = 5mm] {standalone}  usepackage {luamplib}  begin {document}  mplibtextextlabel {enable}  begin {mplibcode}%円CのパスまたはペアPを反転vardef invert(expr P、 C)= I、rを保存します。ペアI;数値r; I =センターC; r = abs(Cのポイント0がシフト-I);ペアPの場合:abs(P-I)> 0の場合:unitvector(P-I)スケーリング(r / abs(P-I)* r)シフトfi I elseifパスP:保存T;数値T; T =長さP; t = 0の場合T-1まで:invert(P、Cのポイントt).. endfor ifサイクルP:サイクルelse:invert(PのポイントT、C)fi fi enddef; beginfig(1);ペアA、B、C;数値r; A =原点; C =(10cm、0); r = 3/4; B = r [A、C];パスc []; c1 =フルサークルスケール2abs(A-C);反転の%大円c2 =全円スケールabs(A-C)シフト1/2 [A、C]; c3 =フルサークルスケールのabs(A-B)シフト1/2 [A、B]; c4 =フルサークルスケールのabs(B-C)シフト1/2 [B、C]; c5 = invert(c4、c1);数値d; d = abs(c5のポイント0-c5のポイント4); i = 1から42までの場合:draw invert(c5 shifted(0、i * d)、c1); endfor draw subpath(0,4)of c2 withcolor 2/3 blue; c3のサブパス(0,4)を2/3の青で描画します。 c4のサブパス(0,4)を2/3青で描画します。 A--Cを引く; dotlabel.bot( '$ A $'、A); dotlabel.bot( '$ B $'、B); dotlabel.bot( '$ C $'、C); endfig;  end {mplibcode}  end {document}

構造のいくつかの部分を描画すると、この方法は少し理解しやすくなります。灰色の円は私のコードのc5;ピンクの弧はの一部ですc1は、列のc5は反転されます。

ここに画像の説明を入力してください


ここに簡単な解決策がありますtkz-elementsの新しいバージョンtkz-ユークリッド幾何学のみを作成するユークリッド。 tkz-elements

 documentclass {standalone}  usepackage {tkz-elements}  begin {document}  pgfmathsetmacro { xB} {6}%nbre of circles  pgfmathsetmacro { xC} {9}  pgfmathsetmacro { xD} {( xC *  xC)/  xB}  pgfmathsetmacro { xJ} {( xC +  xD)/ 2}  pgfmathsetmacro { r} { xD-  xJ}  pgfmathsetmacro { nc} {16}%nbre of circles  begin {tikzpicture} [scale = 1、ultra thin]  tkzDefPoints {0/0 / A、 xB / 0 / B、 xC / 0 / C、 xD / 0 / D}  tkzDrawCircle [diameter、red]( A、C) tkzDrawCircle [diameter、red](A、B) pgfinterruptboundingbox  foreach  i in {- nc、...、0、...、 nc} { tkzDefPoint( xJ、2 *  r *  i){J}  tkzDefPoint( xJ、2 *  r *  i-  r){H}  tkzDefCircle [inversion = center A through C](J、H) tkzDrawCircle [diameter、gray ](tkzFirstPointResult、tkzSecondPointResult)}  endpgfinterruptboundingbox  end {tikzpicture}  end {document}

ここに画像の説明を入力してください