tikz Punkt mit kleinster Entfernung bestimmen

Tabellen und Grafiken erstellen und anordnen


melondolphin
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Fr 14. Jun 2019, 14:01

tikz Punkt mit kleinster Entfernung bestimmen

Beitrag von melondolphin »

Hallo zusammen,

ich bin gerade dabei mich in die automatisierte Grafikerstellung mit Latex, tikz und R einzuarbeiten.

Ich möchte mit Hilfe von tikz denjenigen von vier Punkten ermitteln, der die geringste Entfernung zu einem fünften Punkt hat.

Die Abstände zwischen den Punkten berechne ich bislang so:

Code: Alles auswählen

 
\begin{tikzpicture}

\coordinate (North) at (0,5);

\path let
  \p1 = ($(North)-(node_1)$), \n1 = {veclen(\x1,\y1)}
, \p2 = ($(North)-(node_2)$), \n2 = {veclen(\x2,\y2)}
, \p3 = ($(North)-(node_3)$), \n3 = {veclen(\x3,\y3)}
, \p4 = ($(North)-(node_4)$), \n4 = {veclen(\x4,\y4)}
in coordinate (dummy1) at (\x1, \y1)
coordinate (dummy2) at (\x2, \y2)
coordinate (dummy3) at (\x3, \y3)
coordinate (dummy4) at (\x4, \y4);

\end{tikzpicture}

Die Punkte node_1 - node_2 werden in vorangehenden Berechnungen ermittelt.

Allerdings komme ich nun nicht weiter, weil ich nicht verstehe ob und wie ich mit den Werten \n1, \x1, \y1... weiterrechnen kann. Meine ursprüngliche Idee war, ein If-Abfrage einzubauen:

if \n1 == min(n1, \n2, \n3,\n4) then coordinate (nearest_to_north) at (node_1)
elseif \n2 == min(n1, \n2, \n3,\n4) then coordinate (nearest_to_north) at (node_2)
elseif...

Ich habe noch nicht herausgefunden, ob das grundsätzlich in tikz/Latex überhaupt möglich ist.

Der ganze Code ist in ein *.Rnw-File eingebettet, ich könnte die Berechnung also auch mit R durchführen, wenn ich wüsste wie man \n1, \x1, \y1 an R übergibt.

Die Syntax von tikz ist noch sehr verwirrend für mich...vielleicht ist mein Ansatz auch kompletter Quatsch. Über Hilfe oder Hinweise auf eine Anleitung würde ich mich sehr freuen. Ich hab selbst im Forum noch kein vergleichbares Problem gefunden, oder bin zu blöd aus den oftmals komplexen Beispielen die Quintessenz für mein Problem rauszufiltern :roll:...

Ich habe die Frage noch in diesen beiden englischsprachigen Foren gestellt:


https://latex.org/forum/viewtopic.php?f=45&t=32581
https://tex.stackexchange.com/questions ... ther-point
Zuletzt geändert von melondolphin am Fr 14. Jun 2019, 18:10, insgesamt 1-mal geändert.

Buster

Unerwünscht

Beitrag von Buster »

CrosspostingRegeln lesen!

Buster

Gute Streuung

Beitrag von Buster »


esdd
Forum-Meister
Forum-Meister
Beiträge: 2481
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Eine Möglichkeit von vermutlich vielen

Code: Alles auswählen

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\tempdist}{}
\newcommand{\tempindex}{}

\begin{document}
\begin{tikzpicture}
\path [nodes={circle,minimum size=1pt,fill}]
  (0,5) coordinate (North) node[red]{}
  (2,1) coordinate (node_1) node[green]{}
  (1,0) coordinate (node_2) node[green!75!black]{}
  (-2,3) coordinate (node_3) node[green!50!black]{}
  (6,2) coordinate (node_4) node[green!25!black]{}
;

\def\tempdist{\maxdimen}
\def\tempindex{0}
\foreach \i in {1,...,4}{
  \path
    let \p1 = ($(North)-(node_\i)$),\n1 = {veclen(\x1,\y1)}
    in \pgfextra{
      \ifdim \n1<\tempdist \xdef\tempindex{\i} \xdef\tempdist{\n1}\fi
    };
}
\path
  (node_\tempindex) coordinate[label=above:nearest to north] (nearest_to_north);
;

\end{tikzpicture}
\end{document}
Ergebnis:

Bild

Edit: Unter einem Deiner Crossposts sind weitere, vielleicht bessere Vorschläge: tikz, find the point which is closest to another point
Dateianhänge
gl_nearestnode.png
gl_nearestnode.png (2.81 KiB) 206 mal betrachtet

melondolphin
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Fr 14. Jun 2019, 14:01

Beitrag von melondolphin »

@esdd: Vielen Dank für die kurze, elegante Lösung

Dein Code macht genau das, wonach ich gesucht habe.

Antworten