パパスチェーン
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}