Passen Sie die Koordinaten dieses Bogens an

Passen Sie die Koordinaten dieses Bogens an

Ich möchte eine Hyperbel erstellen, die die Punkte enthält, die den gleichen Abstand von zwei Kreisen haben. Dabei geht es mir nicht wirklich um Genauigkeit, sondern eher um eine Figur, die den Schülern eine Vorstellung vermittelt. Hier ist mein Code:

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
    \draw (2,2) circle (1cm);
    \draw (5,0) .. controls (6,4) and (5,6) .. (3,6);
    \draw (10,2) circle (3cm);
\end{tikzpicture}
\caption{All points that are equidistant from both circles, lie on the hyperbola}
\end{figure}

\end{document}

Können Sie bitte helfen?

Bildbeschreibung hier eingeben

Antwort1

Das folgende Beispiel durchsucht den Bildbereich (einen Teil davon) Zeile für Zeile von unten nach oben, um dieXPosition, an der die Distanzen zwischen dem aktuellen Punkt und den Kreisen den geringsten Unterschied aufweisen. Die Distanz von einem Punkt kann berechnet werden, indem man den Radius von der Distanz des aktuellen Punkts zum Mittelpunkt des Kreises abzieht (und den absoluten Wert nimmt, wenn der aktuelle Punkt innerhalb des Kreises liegt).

Berechnungen können mit TikZ durchgeführt werden, aber TeX unterstützt keine schnellen Berechnungen mit reellen Zahlen. Daher wäre in diesem Fall von Brute-Force-Berechnungen eine andere Programmiersprache besser geeignet, um die Berechnungen zu beschleunigen.

Beispielsweise ein Perl-Skript. Parameter werden im oberen Bereich des Skripts geändert. Es gibt eine Liste von Punkten aus, die für den plotZeichenbefehl geeignet sind.

#!/usr/bin/env perl
use strict;
use warnings;

my ($ax, $ay, $ar) = (2, 2, 1);
my ($bx, $by, $br) = (10, 2, 3);

my ($ymin, $ymax) = (-4, 8);
my ($xmin, $xmax) = ($ax, $bx);

my ($xstep, $ystep) = (.01, .01);

sub circledistance ($$$$$) {
    my ($radius, $mx, $my, $x, $y) = @_;
    my $xdiff = $mx - $x;
    my $ydiff = $my - $y;
    my $result = sqrt($xdiff * $xdiff + $ydiff * $ydiff) - $radius;
    $result = -$result if $result < 0;
    return $result;
}

sub round ($) {
    my $value = shift;
    return int($value + .5);
}

my $xcount = round(($xmax - $xmin)/$xstep);
my $ycount = round(($ymax - $ymin)/$ystep);

my @points;
for (my $yi = 0; $yi <= $ycount; $yi++) {
    my $diff = 1000000;
    my $point = '';
    my $y = $ymin + ($ymax - $ymin)*$yi/$ycount;
    for (my $xi = 0; $xi <= $xcount; $xi++) {
        my $x = $xmin + ($xmax - $xmin)*$xi/$xcount;
        my $a = circledistance($ar, $ax, $ay, $x, $y);
        my $b = circledistance($br, $bx, $by, $x, $y);
        my $d = $a - $b;
        $d = -$d if $d < 0;
        if ($d < $diff) {
            $diff = $d;
            $point = "($x,$y)";
        }
    }
    push @points, $point;
}

print "$_\n" foreach @points;

1;
__END__

Dann der TeX-Code:

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
  \def\AX{2}
  \def\AY{2}
  \def\AR{1}
  \def\BX{10}
  \def\BY{2}
  \def\BR{3}
  \draw (\AX,\AY) circle (\AR cm);
  \draw (\BX,\BY) circle (\BR cm);
  \draw[red] plot[smooth] coordinates{
(4.16,-4)
(4.16,-3.99)
(4.16,-3.98)
(4.16,-3.97)
(4.16,-3.96)
(4.17,-3.95)
% ... <remaining lines of the output of the Perl script>
  };
\end{tikzpicture}
\caption{All points that are equidistant from both circles, lie on the
  hyperbola}
\end{figure}

\end{document}

Ergebnis

Antwort2

Ein bisschen fragil (d. h. große Zahlen würden es zerstören) und berücksichtigt nicht den Winkel zwischen den Kreisen (sodass sie horizontal sind), aber hauptsächlich handelt es sich nur um eine Neuanordnung der Kosinusregel.

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{math}
\begin{document} 
\begin{tikzpicture}
\tikzmath{%
  integer \i, \j;
  \r = 2;
  \R = 6;
  \c = \r + 4 + \R;
  {
     \draw (0, 0) circle [radius=\r];
     \draw (\c, 0) circle [radius=\R];
  };
  for \i in {1,...,50}{
    \C = 180 - 100 + \i*4;
    \Z = (\c^2 - \r^2 - \R^2 + 2 * \r*\R) / (2 * (1 - cos(\C)));
    \q = (-(\r+\R) + sqrt((\r+\R)^2 - 4 * (\r*\R - \Z))) / 2;
    \a = \q + \r;
    \b = \q + \R;
    \B = asin(\b * sin(\C) / \c);  
    { \coordinate (n-\i) at (\B:\a); };
    if (\i > 1) then {
      \j = \i - 1;
      { \draw (n-\j) -- (n-\i); };
    };
  };
}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Hier ist also eine einfache Lösung, wenn Sie keine perfekte Parabel haben möchten. Es geht nur darum, die geeigneten Koordinaten für die Steuerelemente sowie die Endpunkte der Parabelkurve auszuwählen. Das Zeichnen eines Hilfsgitters und dessen Entfernung im letzten Durchlauf kann bei dieser Aufgabe hilfreich sein.

\documentclass{article}
\usepackage{amsmath,tikz}
\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[line width=.7pt, scale=.7]
    \draw (2,2)  circle (1cm);
    \draw (2,-3) .. controls (6,1) and (6,3) .. (2,7);
    \draw (10,2) circle (3cm);
\end{tikzpicture}
\caption{All points that are equidistant from both circles, lie on the hyperbola}
\end{figure}

\end{document}

Bildbeschreibung hier eingeben

Antwort4

Eine Lösung zur Berechnung der Hyperbel. Nicht allzu schwierig, und ich nehme an, dass der OP wusste, wie es geht. Die Radien und Abstände zwischen den Kreisen sind dieselben wie im ersten Beispiel. Die Abbildung ist genau und anpassbar, aberVorbehalt beim Kaufdimension too large: Bei kleinen Änderungen kann leicht ein Fehler auftreten .

Unten (und im LaTeX-Dokument) werde ich eine kleine Erklärung zu den damit verbundenen mathematischen Vorgängen hinzufügen.

Der Code

\documentclass{article}
\usepackage{mathtools} % for the maths part (no needed for the picture)
\usepackage{cancel}    % ditto
\usepackage{tikz}

\begin{document}
\begin{figure}[ht]\centering
\begin{tikzpicture}[scale=0.9]
% parameters
\def\ra{1} % radius, left circle 
\def\rb{3} % radius, right circle
\def\dc{8} % distance between centers
% maths (explained below)
\pgfmathsetmacro\xa{-0.5*(\dc+\ra-\rb)} % placing the circles at the 
\pgfmathsetmacro\xb{ 0.5*(\dc-\ra+\rb)} % same distance form the origin
\pgfmathsetmacro\p{(\xb-\xa)/(\ra-\rb)}
\pgfmathsetmacro\q{(\xa*\xa-\xb*\xb-(\ra-\rb)*(\ra-\rb))/(2*(\ra-\rb))}
\pgfmathsetmacro\k{\p*\q+\xb}
\tikzset{declare function={
   fx(\x)=2*\k*cos(\x)*cos(\x)/(1-\p*\p*cos(\x)*cos(\x));    % hyperbola, x=rho(theta)*cos(theta)
   fy(\x)=2*\k*sin(\x)*cos(\x)/(1-\p*\p*cos(\x)*cos(\x));    % hyperbola, y=rho(theta)*sin(theta)
   dd(\x)=sqrt((fx(\x)-\xa)*(fx(\x)-\xa)+fy(\x)*fy(\x))-\ra; % distance from the hyperbola to A (or B)
}}
% circles
\draw[thick] (\xa,0) coordinate (A) circle (\ra);
\draw[thick] (\xb,0) coordinate (B) circle (\rb);
% hyperbola
\def\d{7} % domain
\draw[red,very thick] plot[domain=90-\d:90+\d] ({fx(\x)},{fy(\x)});
% tangent circles (not in the original picture)
\clip (\xa-2*\ra,{1-fy(90-\d)}) rectangle (\xb+\rb,{-1-fy(90+\d)});
\foreach\i in {-\d,...,\d}
{
  \coordinate        (aux) at (({fx(90+\i))},{fy(90+\i))});
  \draw[gray]        (aux) circle ({dd(90+\i)}) \ifnum\i=\d node[black,above] {$P(x,y)$}\fi;
  \draw[gray,dashed] (A)  -- (aux) -- (B);
  \draw[fill=white]  (aux) circle (0.5mm);
}
\foreach\i in {A,B}
  \draw[fill=white] (\i) circle (0.5mm) node[below] {$\i$};
\end{tikzpicture}
\caption{All points that are equidistant from both circles lie on the hyperbola.}
\end{figure}

% Ignore this if you don't need to know about the maths
\section{The maths}
The circle centers are $A(x_a,0)$, $B(x_b,0)$, and let $P(x,y)$ be a generic point at the hyperbola. Then,
\begin{align*}
d(P,A) & = d(P,B);\\
\sqrt{(x-x_a)^2+y^2}-r_a & =\sqrt{(x-x_b)^2+y^2}-r_b;\\
(x-x_a)^2+\cancel{y^2}   & =(x-x_b)^2+\cancel{y^2}+(r_a-r_b)^2+\\
& \phantom{{}={}}+2(r_a-r_b)\sqrt{(x-x_b)^2+y^2};\\
2(x_b-x_a)x+x_a^2-x_b^2+(r_a-r_b)^2 & =2(r_a-r_b)\sqrt{(x-x_b)^2+y^2};\\
\underbrace{\frac{x_b-x_a}{r_a-r_b}}_p x+\underbrace{\frac{x_a^2-x_b^2+(r_a-r_b)^2}{2(r_a-r_b)}}_q & = \sqrt{(x-x_b)^2+y^2};\\
(px+q)^2 & =(x-x_b)^2+y^2;\\
p^2x^2+2pqx+\cancel{q^2} & = x^2+y^2-2x_bx+\cancel{x_b^2};\\
\intertext{If we take the origin equidistant form both circles, we can cancel the constant terms. Now we change to polar coordinates, $x=\rho\cos\theta$, $y=\rho\sin\theta$.}
p^2\rho^2\cos^2\theta+2pq\rho\cos\theta & =\rho^2-2x_b\rho\cos\theta;\\
p^2\rho\cos^2\theta+2pq\cos\theta & =\rho-2x_b\cos\theta;\\
\rho & =\frac{2\overbrace{(pq+x_b)}^k\cos\theta}{1-p^2\cos^2\theta}=\frac{2k\cos\theta}{1-p^2\cos^2\theta}.
\end{align*}
\end{document}

Die Ausgabe

Bildbeschreibung hier eingeben

Und die Mathematik

Die Kreismittelpunkte sind A(x_a,0), B(x_b,0), und sei P(x,y) ein generischer Punkt auf der Hyperbel. Dann

Bildbeschreibung hier eingeben

Wenn wir den Ursprung in gleichem Abstand von beiden Kreisen wählen, können wir die konstanten Terme streichen. Nun wechseln wir zu Polarkoordinaten.

Bildbeschreibung hier eingeben

verwandte Informationen