Anzeige:
Ergebnis 1 bis 4 von 4

Thema: variable Anzahl an Tikz-Nodes über Draw verbinden

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219

    variable Anzahl an Tikz-Nodes über Draw verbinden

    Hallo,

    ich berechne gerade in Lua verschiedene Koordinaten, aus denen ich dann per Schleife verschiedene Nodes erstelle. Die erstellten Nodes will ich dann per Draw miteinander verbinden. Soweit klappt das auch alles so, wie ich es haben will.

    In meinem MB ist es so, dass es nur klappt, wenn es genau sechs Nodes sind. Ich würde es gerne irgendwie hinbekommen, dass es auch mit einer variablen Anzahl an Nodes klappt.

    Gibt es irgendwie eine Möglichkeit die Nodes per Schleife zu verbinden und dabei trotzdem cycle zu verwenden, damit es an den Knoten nicht zu unschönen Kanten kommt?

    Viele Grüße
    MC


    MB
    Code:
    \documentclass{scrartcl}
    \usepackage{tikz}
    \usepackage{luacode}
    
    \begin{document}
    \directlua{%//
    	step=0.5
    	cx={0,1,1,0,-1,-1}
    	cy={0,1,3,2,3,1}
    	cxa={}
    	cya={}
    	nn={}
    	le=6
    	for i = 1,le,1 do
    		table.insert(cxa,cx[i]*step)
    		table.insert(cya,cy[i]*step)
    		table.insert(nn,i)
    	end
    }%\\
    \begin{tikzpicture}
    	\foreach \n in {1,...,\directlua{tex.print(le)}}{
    		\node (\directlua{tex.print(nn[\n])}) at (\directlua{tex.print(cxa[\n])},\directlua{tex.print(cya[\n])}){};
    	}
    	\draw  (\directlua{tex.print(nn[1])}.center)
    	 	  --(\directlua{tex.print(nn[2])}.center)
    	 	  --(\directlua{tex.print(nn[3])}.center)
    	 	  --(\directlua{tex.print(nn[4])}.center)
    	 	  --(\directlua{tex.print(nn[5])}.center)
    	 	  --(\directlua{tex.print(nn[6])}.center)
    		  --cycle;
    \end{tikzpicture}
    
    \end{document}

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Eine direkte Umsetzung will mir derzeit nicht in den Kopf, aber wenn die Anzahl an Nodes überschaubar bleibt, kannst Du Dir mit \ifcase behelfen:
    Code:
    \documentclass{scrartcl}
    \usepackage{tikz}
    \usepackage{luacode}
    
    \begin{document}
    \directlua{%//
    	step=0.5
    	cx={0,1,1,0,-1,-1}
    	cy={0,1,3,2,3,1}
    	cxa={}
    	cya={}
    	nn={}
    	le=4
    	for i = 1,le,1 do
    		table.insert(cxa,cx[i]*step)
    		table.insert(cya,cy[i]*step)
    		table.insert(nn,i)
    	end
    }%\\
    \begin{tikzpicture}
    	\foreach \n in {1,...,\directlua{tex.print(le)}}{
    		\node (\directlua{tex.print(nn[\n])}) at (\directlua{tex.print(cxa[\n])},\directlua{tex.print(cya[\n])}){};
    	}
    	\ifcase \directlua{tex.print(le)}
    % gar kein Knoten (le = 0)
    	\or% einzelner Knoten, nix zu verbinden
    	\or\draw (1.center) -- (2.center);
    	\or\draw (1.center) -- (2.center) -- (3.center) -- cycle;
    	\or\draw (1.center) -- (2.center) -- (3.center) -- (4.center) -- cycle;
    	\or\draw (1.center) -- (2.center) -- (3.center) -- (4.center)
    	  -- (5.center) -- cycle;
    	\or\draw  (1.center) -- (2.center) -- (3.center) -- (4.center)
    	  --  (5.center) -- (6.center) -- cycle;
    	\or\draw  (1.center) -- (2.center) -- (3.center) -- (4.center)
    	  --  (5.center) -- (6.center) -- (7.center) -- cycle;
    	\or\draw  (1.center) -- (2.center) -- (3.center) -- (4.center)
    	  --  (5.center) -- (6.center) -- (7.center) (8.center) -- cycle;
    	\or\draw  (1.center) -- (2.center) -- (3.center) -- (4.center)
    	  --  (5.center) -- (6.center) -- (7.center) (8.center)
    	  -- (9.center) -- cycle;
    	\else
    	  \typeout{Too many nodes for now (\directlua{tex.print(le)})}%
    	\fi
    \end{tikzpicture}
    
    \end{document}
    VG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Du kannst eine foreach-Schleife verwenden:

    Code:
    \documentclass{scrartcl}
    \usepackage{tikz}
    \usepackage{luacode}
    
    \begin{document}
    \directlua{%//
      step=0.5
      cx={0,1,1,0,-1,-1}
      cy={0,1,3,2,3,1}
      cxa={}
      cya={}
      nn={}
      le=6
      for i = 1,le,1 do
        table.insert(cxa,cx[i]*step)
        table.insert(cya,cy[i]*step)
        table.insert(nn,i)
      end
      }%
    \begin{tikzpicture}
      \foreach \n in {1,...,\directlua{tex.print(le)}}{
        \coordinate (\directlua{tex.print(nn[\n])}) at (\directlua{tex.print(cxa[\n])},\directlua{tex.print(cya[\n])});
      }
      \draw
        (\directlua{tex.print(nn[1])})
        foreach \n in {2,...,\directlua{tex.print(le)}} {--(\directlua{tex.print(nn[\n])})}
        --cycle;
    \end{tikzpicture}
    
    \end{document}

  4. #4
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219
    Vielen Dank euch beiden.
    @esdd Ich verstehe zwar nicht genau, wie deine Syntax funktioniert, aber das, was du da gemacht hast ist exakt das, was ich gesucht habe .

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •