Pfad-Verfolgung

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Pfad-Verfolgung

Re: Pfad-Verfolgung

von TheMrFeedback » Do 31. Dez 2020, 12:38

Hatte mal wieder das sprichwörtliche Brett vor dem Kopf.
Vielen Dank.

Re: Pfad-Verfolgung

von esdd » Do 31. Dez 2020, 12:28

Ich verstehe die Frage nicht. Bekommst Du eine Fehlermeldung? Ich bekomme keine, würde allerdings eher etwas wie

\foreach \s/\t in {S/P1, P1/S, P1/N} {
  \draw ($(\s)!.2!(\t)!1mm!90:(\t)$) -- ($(\s)!.2!(\t)!-1mm!90:(\t)$);
}

Oder ist nur das Ergebnis falsch? In der Skizze sieht es allerdings so aus, als ob die Abstände von den Punkten einheitlich sein sollen. Dann müsste man 0.2 durch eine Längenangabe ersetzen, beispielsweise

\foreach \s/\t in {S/P1, P1/S, P1/N} {
  \draw ($(\s)!3mm!(\t)!1mm!90:(\t)$) -- ($(\s)!3mm!(\t)!-1mm!90:(\t)$);
}

Re: Pfad-Verfolgung

von TheMrFeedback » Mi 30. Dez 2020, 21:01

Das sind alles sehr hilfreiche Hinweise von euch. Ich werde sie beherzigen. Riesen Dank erst einmal.

Hier mal das "Originalbild", wo man hoffentlich sieht, dass ich fast fertig bin:

Bild_2020-12-30_194256.png

Aber jetzt habe ich noch irgendwo einen Bug in den "Querstrichen" (Zeile 48/49) eingebaut und ich weis nicht was das Problem ist.
Ziel:

Pseudocode:
Gehe 20% von \s nach \t und mache einen Strich 1mm nach Links und 1mm nach Rechts;

Kann mir jemand helfen?

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{
  calc, 
  shapes.geometric, 
  angles, 
  arrows.meta
}

\begin{document}
\begin{tikzpicture}[
  % Definition der Pfeil-Optik
=Latex,
  % Freistellungsabstand eistellen
  mark outer sep/.style={outer sep=1mm},
  % Innenpunkt für TP wird definiert
  TPdot/.style={circle, fill, inner sep=0pt, minimum size=.4mm},
  % Symbol für PPs wird definiert
  PP/.style={circle, draw=black, fill=white,
    inner sep=0pt, minimum size=1mm, mark outer sep
  },
  % Symbol für TPs wird definiert
  TP/.style={regular polygon, regular polygon sides=3,
    draw=black, preaction={fill=white}, path picture={\node[TPdot]{};},
    inner sep=0pt, minimum size=2mm, mark outer sep
  },
  mark label distance/.style={label distance=-1mm}
]
  % Punkte setzen und Linien zeichnen
  \path [mark label distance]
    (0,0) node [TP, label=below left:S] (S) {}
    +(68:5.2cm) node [TP, label=above left:A] (A) {}
  ;
%  \draw (S) -- ($(S)!0.5!(A)$);
%  \draw [dash pattern=on 10pt off 3pt] ($(S)!0.5!(A)$) -- (A);

  \path [mark label distance] (S) 
        -- +(19:3.2cm) node [PP, label={[shift={(-.1,-.2)}]below:P\textsubscript{1}}] (P1){}
        -- ([turn]-79:1.5cm) node [PP, label=below right:N] (N){}
  ;
%  \draw (S) -- (P1) -- (N);

  % Brechungswinkel einzeichnen
%  \pic[draw=black, <-, angle radius=7mm]{angle = P1--S--A};
%  \pic[draw=black, <-, angle radius=4mm]{angle = N--P1--S};
  
% Messungsmarkierungen einfügen \foreach \s/\t in {S/P1, P1/S, P1/N} {\draw (\s) -- ($(\s)!.2!(\t)$) -- ([turn]90:1mm) -- ([turn]180:2mm);} % \foreach \s/\t in {S/P1, P1/S, P1/N} {\draw (\s) ($(\s)!.2!(\t)$) -- ([turn]90:1mm) -- ([turn]180:2mm);} \end{tikzpicture} \end{document}

Danke.

Re: Pfad-Verfolgung

von esdd » Di 29. Dez 2020, 22:12

TheMrFeedback hat geschrieben:
Di 29. Dez 2020, 17:06

Was ich jetzt suche wäre eine Schleife mit 2 Argumenten - Pseudocode:

Meine Eingabe: {#1,#2} (z.B. {S,P1})
Tikz: Starte von #1 aus, gehe dann zu ($(S)!0.1!(A)$) und führe dann einen draw-Befehl aus

Der Path muss? in #1 starten, denn der draw-Befehl ist abhängig von dieser Richtung.

Die Syntax wäre beispielsweise

\foreach \s/\t in {S/P1, A/P2} {\draw (\s) -- ($(\s)!.1!(\t)$);}

Bitte lies dazu das Kapitel »Repeating Things: The Foreach Statement« in der Doku.

Beispiel:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \draw[dotted,nodes={circle,fill,inner sep=1pt}]
    (0,0) node [label=above:S] (S){}
      -- (4,2) node [label=below right:P\textsubscript{1}] (P1){}
    (3,0.5) node [label=above:A] (A){}
      -- (5,1) node [label=below right:P\textsubscript{2}] (P2){}
  ;
  \foreach \s/\t in {S/P1, A/P2} {\draw (\s) -- ($(\s)!.1!(\t)$);}
\end{tikzpicture}
\end{document}
gl_foreach.png
gl_foreach.png (6.04 KiB) 4684 mal betrachtet

Re: Pfad-Verfolgung

von esdd » Di 29. Dez 2020, 21:28

TheMrFeedback hat geschrieben:
Di 29. Dez 2020, 07:53

Gelöst habe ich das Ganze über eine Linien-"Erweiterung" mit Weiß-Schwarz-Weiß (Double):

\draw [fill=white, draw=white, double=black] (S) +(90:1mm) -- +(-150:1mm) -- +(-30:1mm) -- cycle;

Dadurch sieht es so aus, als würde der gezeichnete Pfad (hier: Dreieck) Freistehen. Den Äußeeren Rand von Double würde ich gern beeinflussen - also den Abstand vom Dreieck, bis zu einer abgehende, schwarze Linie von (S) aus zu sehen ist.

Dafür ist es vermutlich sinnvoller die Node-Option outer sep zu nutzen und die Nodes vor den Linien einzufügen. Dann müsste aber auch das pic für die dreieckige Markierung durch einen Node ersetzt werden:

\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{tikzpicture}[
  mark outer sep/.style={outer sep=1mm},
  dot mark/.style={circle, fill=black, inner sep=0pt, minimum size=0.4mm},
  circle mark/.style={circle, draw=black, fill=white,
    inner sep=0pt, minimum size=1mm, mark outer sep
  },
  triangle mark/.style={regular polygon, regular polygon sides=3,
    draw=black, preaction={fill=white}, path picture={\node[dot mark]{};},
    inner sep=0pt, minimum size=2mm, mark outer sep
  },
  mark label distance/.style={label distance=-1mm}
]

  \path [mark label distance]
    (10,0) node [triangle mark, label=below left:S] (S) {}
    +(68:5.2cm) node [triangle mark, label=above left:A] (A) {}
  ;
  \draw (S) -- ($(S)!0.5!(A)$);
  \draw [dash pattern=on 10pt off 3pt] ($(S)!0.5!(A)$) -- (A);

  \path [mark label distance] (S) 
        -- +(19:3.2cm) node [circle mark,label={[shift={(-.1,-.2)}]below:P\textsubscript{1}}] (P1){}
        -- ([turn]-79:1.5cm) node [circle mark,label=below right:N] (N){}
  ;
  \draw (S) -- (P1) -- (N);

\end{tikzpicture}
\end{document}
gl_outersep.png
gl_outersep.png (6.66 KiB) 4685 mal betrachtet

Oder "übersetzt" auf dein letztes Beispiel:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, shapes.geometric, angles, arrows.meta}

\begin{document}
\begin{tikzpicture}[
  mark outer sep/.style={outer sep=1mm},
  % Innenpunkt für TP wird definiert
  TPdot/.style={circle, fill, inner sep=0pt, minimum size=.4mm},
  % Symbol für PPs wird definiert
  PP/.style={circle, draw=black, fill=white,
    inner sep=0pt, minimum size=1mm, mark outer sep
  },
  % Symbol für TPs wird definiert
  TP/.style={regular polygon, regular polygon sides=3,
    draw=black, preaction={fill=white}, path picture={\node[TPdot]{};},
    inner sep=0pt, minimum size=2mm, mark outer sep
  },
  mark label distance/.style={label distance=-1mm}
]
  % Punkte setzen und Linien zeichnen
  \path [mark label distance]
    (0,0) node [TP, label=below left:S] (S) {}
    +(68:5.2cm) node [TP, label=above left:A] (A) {}
  ;
  \draw (S) -- ($(S)!0.5!(A)$);
  \draw [dash pattern=on 10pt off 3pt] ($(S)!0.5!(A)$) -- (A);

  \path [mark label distance] (S) 
        -- +(19:3.2cm) node [PP, label={[shift={(-.1,-.2)}]below:P\textsubscript{1}}] (P1){}
        -- ([turn]-79:1.5cm) node [PP, label=below right:N] (N){}
  ;
  \draw (S) -- (P1) -- (N);

  % Brechungswinkel einzeichnen
  \pic[arrows=Latex-, draw=black,<-,angle radius=7mm]{angle = P1--S--A};
  \pic[draw=black,<-,angle radius=4mm]{angle = N--P1--S};

\end{tikzpicture}
\end{document}
gl_outersep2.png
gl_outersep2.png (7.25 KiB) 4684 mal betrachtet

Re: Pfad-Verfolgung

von TheMrFeedback » Di 29. Dez 2020, 17:06

Die bisherigen foreach-Schleifen erwarten exakt ein Argument, nämlich den Namen der node (wenn ich es richtig verstanden habe) und dann wird das gezeichnet, was im style definiert wurde.
Stand der Dinge:

\documentclass[margin=0pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, angles, arrows.meta}

\begin{document}
\begin{tikzpicture}[
  % Innenpunkt für TP wird definiert
  TPdot/.style={circle, fill, inner sep=0pt, minimum size=.4mm},
  % Symbol für PPs wird definiert
  PP/.style={circle, fill=white, draw=white, double=black, inner sep=0pt, minimum size=1mm},
  % Symbol für TPs wird definiert
  TP/.pic={% ein pic wird immer mit seinem Ursprung am aktuellen Punkt eingefügt
    \draw [fill=white, draw=white, double=black] (90:1mm) -- (-150:1mm) -- (-30:1mm) -- cycle;
    \node [TPdot]{};
  }
]
  % Linien Zeichnen und Punkte setzen
  \path (0,0) coordinate (S) node [below left] {S} -- +(70:5.2cm) coordinate (A) node [above left] {A};
  \draw (S) -- ($(S)!0.5!(A)$);
  \draw [dash pattern=on 10pt off 3pt] ($(S)!0.5!(A)$) -- (A);
  \draw (S) 
        -- +(30:3.2cm) coordinate (P1) node [below, anchor=north east, xshift=3mm, yshift=-2mm] {P\textsubscript{1}}
        -- ([turn]-88:1.5cm) coordinate (N) node [below right] {N}
  ;
  
% Brechungswinkel einzeichnen \pic[arrows=Latex-, draw=black,<-,angle radius=7mm]{angle = P1--S--A}; \pic[draw=black,<-,angle radius=4mm]{angle = N--P1--S};
% Symbole auf Punkte legen \path foreach \p in {S,A} {(\p) pic {TP}} foreach \p in {P1,N} {(\p) node [PP] {}} ; \end{tikzpicture} \end{document}

Was ich jetzt suche wäre eine Schleife mit 2 Argumenten - Pseudocode:

Meine Eingabe: {#1,#2} (z.B. {S,P1})
Tikz: Starte von #1 aus, gehe dann zu ($(S)!0.1!(A)$) und führe dann einen draw-Befehl aus

Der Path muss? in #1 starten, denn der draw-Befehl ist abhängig von dieser Richtung.

Re: Pfad-Verfolgung

von TheMrFeedback » Di 29. Dez 2020, 07:53

  1. Es ging um P\textsubscript{1}. Danke.

  2. Gelöst habe ich das Ganze über eine Linien-"Erweiterung" mit Weiß-Schwarz-Weiß (Double):

    \draw [fill=white, draw=white, double=black] (S) +(90:1mm) -- +(-150:1mm) -- +(-30:1mm) -- cycle;

    Dadurch sieht es so aus, als würde der gezeichnete Pfad (hier: Dreieck) Freistehen. Den Äußeeren Rand von Double würde ich gern beeinflussen - also den Abstand vom Dreieck, bis zu einer abgehende, schwarze Linie von (S) aus zu sehen ist.

  3. standalone ist genau das, was ich hier brauche.

  4. Ein Dank auch an den Gast.

  5. Es gibt da Tikz-Bibliotheken mit Speziellen Nodes, z. B. für Elektrotechnik (Schaltpläne).
    Auch in der Vermessung gibt es ein Paar spezielle Zeichen, Bögen, Linienarten. Hatte gehofft, dass hier einer spezielleren Wissen hat, als das ich über googlen mir aneignen kann.

Re: Pfad-Verfolgung

von esdd » Mo 28. Dez 2020, 21:45

    • Möchtest Du tatsächlich P_1? Das geht mit P\_1. Falls Du P₁ haben willst, dann nimm P\textsubscript{1}.

    • Um den Node zu verschieben, kannst Du einen anderen anchor festlegen und/oder die Optionen xshift, yshift oder shift verwenden. Ein Beispiel wäre

      ... node [below,anchor=75,yshift=-1mm] {P\textsubscript{1}} ...
  1. Ich weiß nicht, was Du mit "Freistellung" meinst und welche Eigenschaften Du beeinflussen möchtest.

  2. Wenn Du eine einzelne Zeichnung ohne großen Rand erstellen willst, dann kannst Du die standalone Klasse verwenden und das Paket geometry weglassen. Im optionalen Argument dieser Klasse kannst Du auch einen kleinen Rand einstellen. Beispiel:

    \documentclass[margin=5pt]{standalone}

    Du kannst Dir aber auch die TikZ-Bibliothek external und \tikzexternalize anschauen. Infos dazu findest Du in der Paketdoku.
    Eine weitere Alternative ist das preview Paket.
    Zu beachten ist, dass auch Pfade, die nicht gezeichnet werden, Einfluss auf die Bounding Box haben können. Das muss man dann gegebenenfalls gezielt verhindern oder die Box wieder korrigieren.

  3. Hat Gast schon beantwortet.

  4. Da verstehe ich leider auch nicht, was Du suchst/möchtest.

von Gast » Mo 28. Dez 2020, 21:19

TheMrFeedback hat geschrieben:
Mo 28. Dez 2020, 20:55

Wie kann man hier Bilder hochladen? Dann könnte ich auch man eine Skizze hochladen, wie das Tikz-Pic aussehen soll.

Wie hänge ich ein Bild an meine Frage?

Re: Pfad-Verfolgung

von TheMrFeedback » Mo 28. Dez 2020, 20:55

Wow, das hat echt geholfen.
Ich werde zwar noch ein bisschen Hirnschmalz in deinen Code stecken zu müssen um den ersten Teil voll zu durchdringen, aber eines muss und darf ich erst einmal sagen:
DANKE
Noch ein paar letzte Frage, wenn wir schon so nett am plaudern sind :-)

  1. Der Text der Node von P1 stört mich noch:

    • Ich finde keine Möglichkeit, wie ich P_1 schreiben kann

    • Mit inner Sep bin ich unzufrieden und müsste noch ca. 5mm weiter nach rechts

    Ideen?

  2. Siehst du eine bessere Möglichkeit, wie man die Freistellung der Dreiecke und Kreise noch besser, weil variabel beeinflussen kann?

  3. Generell: Dieses Bild ist ja nur kleiner Teil einer umfangreicheren Arbeit. Mein Plan: die hier entstehende PDF würde ich dann mit \includegraphics{"Dateiname"} einbinden. Ich befürchte aber, dass selbst das eingestellte A6 zu viel Rand hat. Und den müsste ich dann in der Masterdatei beschneiden, das scheint mir zu umständlich... Wie geht man da vor? Gibt es einen Befehl, der dann das Papier automatisch an der Box meiner Tikz-Zeichnung abschneidet?

  4. Wie kann man hier Bilder hochladen? Dann könnte ich auch man eine Skizze hochladen, wie das Tikz-Pic aussehen soll.

  5. Kenntst du vielleicht sogar eine Package für Vermessung?

Riesen Dank


Nach oben