Seite 1 von 1

tikz Punkt mit kleinster Entfernung bestimmen

Verfasst: Fr 14. Jun 2019, 15:26
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:
 
\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

Unerwünscht

Verfasst: Fr 14. Jun 2019, 18:00
von Buster
CrosspostingRegeln lesen!

Gute Streuung

Verfasst: Fr 14. Jun 2019, 18:08
von Buster

Verfasst: Fr 14. Jun 2019, 18:36
von esdd
Eine Möglichkeit von vermutlich vielen
\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

Verfasst: Mo 17. Jun 2019, 10:57
von melondolphin
@esdd: Vielen Dank für die kurze, elegante Lösung

Dein Code macht genau das, wonach ich gesucht habe.