tikz anchor berechnung

Tabellen und Grafiken erstellen und anordnen


tobi7212
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Di 24. Aug 2010, 11:43

tikz anchor berechnung

Beitrag von tobi7212 »

Ich möchte als Anker für ein Tikz-shape nicht nur die vordefinierten benutzen, wie z.B.

Code: Alles auswählen

anchor=north east
sondern auch

Code: Alles auswählen

anchor=$(south west)!2/3!(south east)$
wie lässt sich das lösen, ohne ein neues shape in pgf-code zu definieren?
Schon mal vielen Dank für eure Unterstützung.
Tobi

Minimalbeispiel:

Code: Alles auswählen

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
	\begin{tikzpicture}
		
		\node[draw] (test1) {test1};
		
		%% Das funktioniert. 
		\node [draw,anchor=south west](test2) at ($(test1.north west)!2/3!(test1.north east)$) {test2};
		
		%% Das geht leider nicht. Work arround?
		%\node [draw,anchor=$(south west)!2/3!(south east)$](test2) at ($(test1.north west)!2/3!(test1.north east)$) {test2};

	\end{tikzpicture}
\end{document}

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

Beitrag von esdd »

Soweit ich weiß, geht das nicht. Neben den south, west etc. Ankern gibt es zwar noch einfache Winkelangaben wie 10 oder 130 als border anchor, also zum Beispiel anchor=10. Aber das entspricht nicht dem, was du suchst. Je nachdem, was dein eigentliches Ziel ist, wirst du gegebenenfalls doch ein neues shape definieren müssen.

Gruß
Elke

tobi7212
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Di 24. Aug 2010, 11:43

Beitrag von tobi7212 »

esdd hat geschrieben:Soweit ich weiß, geht das nicht. Neben den south, west etc. Ankern gibt es zwar noch einfache Winkelangaben wie 10 oder 130 als border anchor, also zum Beispiel anchor=10. Aber das entspricht nicht dem, was du suchst. Je nachdem, was dein eigentliches Ziel ist, wirst du gegebenenfalls doch ein neues shape definieren müssen.

Gruß
Elke
OK, dann muss ich mal sehen, wie ich das anders lösen kann.

Felix
Forum-Century
Forum-Century
Beiträge: 211
Registriert: Sa 25. Jan 2014, 13:57

Beitrag von Felix »

Hi Tobi,

ich kann mir vorstellen, dass es geht, Anker zu bestehenden Shapes hinzuzufügen. ich hab grad bisschen Quellcode von PGF deswegen gelesen, es aber nach 15 min erstmal aufgegeben. :oops:

Du hast bestimmt eine tolle komplexe Grafik im Auge, wo es sich lohnt, den Aufwand zu treiben? Weil eben eine Koordinate aus zwei Standardankern zu berechnen wäre ja einfacher, als einen richtigen Anker anzulegen. Interessant finde ich es aber!

Falls Du Lust hast, und hier vllt. keine Lösung kommt, kannst Du auch auf TeXwelt.de fragen. Da lesen weitere TikZ-Kenner.

Falls ich da ein interessantes TikZ-Bild sehe und eine schwierige Frage, setze ich mich auf jeden Fall dran und versuche es. Für das TikZ-Archiv mache ich es sehr gern, hier gehen mir schöne Lösungen bisschen unter, daher bin ich hier gern zum Plaudern und weniger zum Zähne-Ausbeißen. :D

Felix

tobi7212
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Di 24. Aug 2010, 11:43

Beitrag von tobi7212 »

Felix hat geschrieben:Hi Tobi,

ich kann mir vorstellen, dass es geht, Anker zu bestehenden Shapes hinzuzufügen. ich hab grad bisschen Quellcode von PGF deswegen gelesen, es aber nach 15 min erstmal aufgegeben. :oops:

Du hast bestimmt eine tolle komplexe Grafik im Auge, wo es sich lohnt, den Aufwand zu treiben? Weil eben eine Koordinate aus zwei Standardankern zu berechnen wäre ja einfacher, als einen richtigen Anker anzulegen. Interessant finde ich es aber!

Falls Du Lust hast, und hier vllt. keine Lösung kommt, kannst Du auch auf TeXwelt.de fragen. Da lesen weitere TikZ-Kenner.

Falls ich da ein interessantes TikZ-Bild sehe und eine schwierige Frage, setze ich mich auf jeden Fall dran und versuche es. Für das TikZ-Archiv mache ich es sehr gern, hier gehen mir schöne Lösungen bisschen unter, daher bin ich hier gern zum Plaudern und weniger zum Zähne-Ausbeißen. :D

Felix
He Felix,
jau, den PGF-Code habe ich auch kurz angesehen, allerdings nur eine minute.. brr. Das kanns doch nicht sein, dachte ich.
Vielen Dank für deinen Einsatz.
Ich bin bisher nicht an der Stelle, wo ich definitif sagen würde:"Das kriege ich auf keinen Fall anders hin".
Für eine hübsch saubere Umsetztung meinte ich die Funktion zu benötigen und war verwundert, dass es scheinbar nicht geht.
Im pgf-manual steht sogar eine Erklärung dazu: Das sei zu rechenaufwendig, mehr als zwei Anker ständig mit zu berechnen. Alle weiteren werden aus den zweien dann durch Koordinatentransformation gefunden.
Aber ich dachte, wenn die das können, dann können wir das auch.
Mir düngt, das Problem ist wohl, dass wir die Lösung erst haben, wenn das Bild schon längst fertig berechnet ist.

Um jetzt auch noch mal damit raus zu rücken, was ich eigentlich vor hatte, hier ein simples Beispiel, vielleicht hatte ich ja nur Gurken auf den Augen, was eine einfach Lösung angeht:

Code: Alles auswählen

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[text width=3em]
\node[draw] (test1) {test1\\test1\\test1\\test1};
\draw ($(test1.north east)!1/3!(test1.south east)$) -|++(1,1){};
\node [draw,right=2 of test1,yshift=-7.7234567890123434](test2)  {test2};
\draw ($(test1.north east)!2/3!(test1.south east)$) --(test2){};
\end{tikzpicture}
\end{document} 
Man beachte die notwendige Benutzereingabe von

Code: Alles auswählen

yshift=-7.7234567890123434
Ich habs ein klein wenig damatisiert:-)
Vielleicht hat ja jemand Spaß daran, sich die Zähne auszubeißen.
Die Höhe des ersten Blocks sei unbekannt.
Wieviele Linien (im gleichmäßigen Abstand !ni/(n+1)!) aus dem ersten Block kommen sei bekannt.

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

Beitrag von esdd »

Bei dem Beispiel ist das noch kein Problem:

Code: Alles auswählen

\documentclass{article} 
\usepackage{tikz} 
\usetikzlibrary{calc} 
\begin{document} 
\begin{tikzpicture}[text width=3em] 
\node[draw] (test1) {test1\\test1\\test1\\test1}; 
\draw ($(test1.north east)!1/3!(test1.south east)$) -|++(1,1){}; 
\path ($(test1.north east)!2/3!(test1.south east)$)--+(2,0)node[draw](test2){test2}; 
\draw ($(test1.north east)!2/3!(test1.south east)$) --(test2); 
\end{tikzpicture} 
\end{document}
Gruß
Elke

tobi7212
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Di 24. Aug 2010, 11:43

Beitrag von tobi7212 »

esdd hat geschrieben:Bei dem Beispiel ist das noch kein Problem:

Code: Alles auswählen

\documentclass{article} 
\usepackage{tikz} 
\usetikzlibrary{calc} 
\begin{document} 
\begin{tikzpicture}[text width=3em] 
\node[draw] (test1) {test1\\test1\\test1\\test1}; 
\draw ($(test1.north east)!1/3!(test1.south east)$) -|++(1,1){}; 
\path ($(test1.north east)!2/3!(test1.south east)$)--+(2,0)node[draw](test2){test2}; 
\draw ($(test1.north east)!2/3!(test1.south east)$) --(test2); 
\end{tikzpicture} 
\end{document}
Gruß
Elke
Guten Abend Elke,
vielen herzlichen Dank!
Da waren meinerseits dann also tatsächlich Gurken oder anderes Gemüse im Spiel. Bin zugegebenermaßen auch noch nicht so fortgeschritten, dass ich alle Möglichkeiten von Tikz auf dem Schirm habe.

tobi7212
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Di 24. Aug 2010, 11:43

Beitrag von tobi7212 »

esdd hat geschrieben:Bei dem Beispiel ist das noch kein Problem:

Gruß
Elke
Sorry, ich habe das falsche Beispiel gebaut. Ich kam nicht weiter, als ich beim zweiten Block mehrere Eingänge hatte:

Code: Alles auswählen

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[text width=3em]
\node[draw] (test1) {test1\\test1\\test1\\test1};
\draw ($(test1.north east)!1/3!(test1.south east)$) -|++(1,1){};
\path ($(test1.north east)!2/3!(test1.south east)$)--+(2,0)node[draw,yshift=-5.2345678901234567890](test2){test2\\test2\\test2}; 
\draw ($(test1.north east)!2/3!(test1.south east)$) --($(test2.north west)!1/3!(test2.south west)$){};
\draw($(test2.north west)!2/3!(test2.south west)$)++(-1,-1)|-($(test2.north west)!2/3!(test2.south west)$){};
\end{tikzpicture} 
\end{document}
Ist das auch so einfach zu lösen, ohne yshift=-5.2345678901234567890?

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

Beitrag von esdd »

Ich hatte mich schon gewundert, deshalb auch das "noch". Auf texwelt.de habe ich mich mal an den Ankern versucht: Wie kann ich zu einem shape zusätzliche Anker definieren? und jetzt dein Beispiel ergänzt.

Gruß
Elke

tobi7212
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Di 24. Aug 2010, 11:43

Beitrag von tobi7212 »

esdd hat geschrieben:Ich hatte mich schon gewundert, deshalb auch das "noch". Auf texwelt.de habe ich mich mal an den Ankern versucht: Wie kann ich zu einem shape zusätzliche Anker definieren? und jetzt dein Beispiel ergänzt.

Gruß
Elke
Hallo Elke, vielen Dank, ich sehe... es ist möglich.
Aber dass für so eine Kleinigkeit soviel Arbeit notwendig ist, ist sehr schade.
Wenn ich jetzt Blöcke mit 3 Eingängen und mit 4 und 5 hätte würde das schon einen ordendlichen Berg Definitionen bedeuten: 1/3 2/3 1/4 2/4 3/4 1/5 2/5 3/5 4/5... Da überlege ich doch, wie ich das Bild anders zeichne oder mich z.B. mit der Blockhöhe festlege, dann kann ich yshift=2/3*Blockhöhe machen oder so.

Auf jeden Fall bin ich von eurer Hilfsbereitschaft sehr beeindruckt und würde da beim nächsten Problem gern wieder drauf zurück kommen!
Liebe Grüße
Tobi

Antworten