"Unterbrechung" zweier Linien an Schnittpunkt

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: "Unterbrechung" zweier Linien an Schnittpunkt

von esdd » Fr 7. Mär 2014, 01:42

Münzi hat geschrieben:Wie bzw. wo hast du das denn rausgefunden?
In dem ich in deinem Code nach der Ursache für die falsche Winkelberechnung und nach Korrekturmöglichkeiten gesucht habe. Erst nach dem Vertauschen der Argumente habe ich im Manual gesehen, dass sich die Syntax entsprechend geändert hat.

Den Tipp von Felix/Qrrbrbirbel finde ich auch extrem hilfreich.

von Münzi » Do 6. Mär 2014, 19:05

Vielen Dank für die Hinweise. Vor allem der Workaround von Felix bzw. Qrrbrbirbel ist natürlich top.

von Felix » Do 6. Mär 2014, 18:10

Hab mal sowas gelesen und mir notiert - :
\tikzset{declare function={atan3(\a,\b)=ifthenelse(atan2(0,1)==90, atan2(\a,\b),atan2(\b,\a));}}
Ich weiß noch, dass es in einem längeren Beitrag von Qrrbrbirlbel mal drin war. Er ging so auf Nummer sicher mit dem Argumentetausch, der mit der CVS-Version absehbar war.

Felix

von Studi » Do 6. Mär 2014, 17:16

Es gibt ein Changelog, was z.B. im TDS-Download bei sourceforge zu kriegen ist, da sah ich es zumindest, das ist sicher auch bei CTAN dabei. Jedoch sah ich zu einer Änderung von atan2 nur: "Increased accuracy of atan, atan2 and \pgfmathanglebetweenpoints."

Ansonsten las ich mal, dass die ursprüngliche Reihenfolge der Arumente nicht zum Üblichen passt, es also als Bugfix zu verstehen ist, dass es jetzt die gewohnte erwartete Reihenfolge der Argumente versteht.

Studi

von Münzi » Do 6. Mär 2014, 11:44

Großartig Elke, vielen Dank. Wie bzw. wo hast du das denn rausgefunden? Ein Changelog oder ähnliches hatte ich im Internet leider nicht gefunden.

von esdd » Do 6. Mär 2014, 02:51

Vermutlich wurde die Syntax von atan2 geändert. Du musst dort nur \x1 und \y1 vertauschen, dann klappt es wieder.
\documentclass[tikz]{standalone} 
\usetikzlibrary{intersections,backgrounds} 
\usetikzlibrary{calc} 
\begin{document} 

\begin{tikzpicture} 
\tikzset{ 
     connect/.style args={(#1) to (#2) over (#3) to (#4) by #5}{ 
         insert path={ 
             \pgfextra{ 
                 \pgfinterruptpath 
                     \path [name path=a] (#1) -- (#2); 
                     \path [name path=b] (#3) -- (#4); 
                     \path [name intersections={of=a and b,by=inter}]; 
                 \endpgfinterruptpath                 
             } 
             let \p1=($(#1)-(inter)$), \n1={veclen(\x1,\y1)}, 
                             \n2={atan2(\y1,\x1)}, \n3={abs(#5)}, \n4={#5>0 ?180:-180}  in 
                             (#1) -- ($(#1)!\n1-\n3!(inter)$) 
                             arc (\n2:\n2+\n4:\n3) -- (#2) 
         } 
     }, 
} 
\begin{pgfonlayer}{background} 
\draw[fill=yellow] (0.25,0.5) rectangle (1.75,1.5); 
\end{pgfonlayer} 

\draw  (0,0) -- (2,2); 

\draw [red, very thick, connect={(0,2) to (2,0) over (0,0) to (2,2) by -5pt}]; 
\draw [connect={(0,2) to (2,0) over (0,0) to (2,2) by 3pt}]; 
\end{tikzpicture} 
\end{document} 
Gruß
Elke

Edit: Ursache ist geänderte Reihenfolge der Argumente für atan2

"Unterbrechung" zweier Linien an Schnittpunkt

von Münzi » Mi 5. Mär 2014, 19:44

Hallo mal wieder,

nach längerer Abstinenz habe ich mal wieder ein kleines Anliegen an euch. Ich nutze TIKZ um Fließbilder anzulegen. Dabei kommt es häufiger dazu, dass sich zwei Linien schneiden. Am Schnittpunkt wird zur besseren Unterscheidung der Linien meist die eine Linie mit einem Bogen über die andere gezeichnet. Das konnte bisher mit der Lösung aus http://tex.stackexchange.com/questions/ ... ed-in-tikz erreicht werden.
Bild
Das oben gezeigte Bild wird dabei durch folgenden Code erreicht:
\documentclass[tikz]{standalone}
\usetikzlibrary{intersections,backgrounds}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}
\tikzset{
    connect/.style args={(#1) to (#2) over (#3) to (#4) by #5}{
        insert path={
            \pgfextra{
                \pgfinterruptpath
                    \path [name path=a] (#1) -- (#2);
                    \path [name path=b] (#3) -- (#4);
                    \path [name intersections={of=a and b,by=inter}];
                \endpgfinterruptpath                
            }
            let \p1=($(#1)-(inter)$), \n1={veclen(\x1,\y1)}, 
                            \n2={atan2(\x1,\y1)}, \n3={abs(#5)}, \n4={#5>0 ?180:-180}  in 
                            (#1) -- ($(#1)!\n1-\n3!(inter)$) 
                            arc (\n2:\n2+\n4:\n3) -- (#2)
        }
    },
}
\begin{pgfonlayer}{background}
\draw[fill=yellow] (0.25,0.5) rectangle (1.75,1.5);
\end{pgfonlayer}

\draw  (0,0) -- (2,2);

\draw [red, very thick, connect={(0,2) to (2,0) over (0,0) to (2,2) by -5pt}];
\draw [connect={(0,2) to (2,0) over (0,0) to (2,2) by 3pt}];

\end{tikzpicture}
\end{document}
Allerdings musste ich heute nach einem Update meiner Pakete feststellen, dass sich etwas an der Berechnung verändert haben muss. Der gleiche Code wie oben erzeugt nun folgendes Bild:

Bild

und in meinem konkreten Fall verwandelt sich der Output von
Bild
zu
Bild.

Weiß jemand zufällig woran das liegt (ich tippe auf eine Veränderung der Intersection-Bibliothek von TikZ) und wie ich das alte Ergebnis zurück bekomme?

Beste Grüße und schonmal vielen Dank!

Nach oben