Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Einheitenwechsel in tikZ bei \path plot

  1. #1
    Registrierter Benutzer Avatar von Hobbykomiker
    Registriert seit
    15.10.2013
    Ort
    Lingen
    Beiträge
    8

    Einheitenwechsel in tikZ bei \path plot

    Hallo,

    ich habe schon wieder ein (halb-gelöstes) Problem

    Folgende Aufgabe wollte ich lösen:

    Bestimme die Schnittpunkte einer Funktion mit einer Umrandung.
    Dann plotte die Funktion nur zwischen den beiden Punkten.

    Bemerkung: Die Möglichkeit, dies mit \path[clip] zu bewerkstelligen, wollte ich aus verschiedenen Gründen nicht anwenden.

    Erstmal mein (wieder heruntergekochtes) Beispiel:
    Code:
    \documentclass[10pt]{scrartcl}
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage{tikz}
    \begin{document}
    \usetikzlibrary{intersections,calc}
    
    \begin{tikzpicture}
    	\path[	draw,
    		name path=Rand
    		] (0,0) -- (1.5,0) -- (2,1) -- (1,2) -- (0,1.8) --cycle ;
    	\path[	samples=100,
    		variable=\xx,
    		name path=Funktion
    		] plot({\xx},{sin(deg(\xx))+.8}) ;
    	\path[name intersections={of=Funktion and Rand}] ;
    	\path[draw,fill=blue] (intersection-1) circle (.1cm) ;
    	\path[draw,fill=green] (intersection-2) circle (.1cm) ;
    	\path[	draw,
    		variable=\xx,
    		samples=100]
    		let \p1 = (intersection-1) ,
    		     \p2 = (intersection-2) in
    			node[anchor=east] {\x1}
    			plot[domain=\x1:\x2] ({\xx/72.27*2.54},{sin(deg(\xx/72.27*2.54))+.8}) 
    			node[anchor=west] {\x2} ;
    \end{tikzpicture}
    
    \end{document}
    Es wird also zweimal mittels 'plot' einfach eine Sinus-Funktion aufgerufen.
    Beim zweiten Aufruf musste ich jedoch per Hand von pt auf cm umrechnen, damit das Gleiche passiert, wie beim ersten Aufruf.

    Daher meine Frage: Gibt es die Möglichkeit, tikZ zu zwingen beide Male in cm (was meines Wissens Standard sein sollte - bitte um Korrektur wenn nicht) zu rechnen?

    Danke im Voraus,
    Thorsten

  2. #2
    Registrierter Benutzer Avatar von Hobbykomiker
    Registriert seit
    15.10.2013
    Ort
    Lingen
    Beiträge
    8

    Nachtrag

    Ich glaube das Problem liegt eher beim:
    Code:
    plot[domain=\x1:\x2] ...
    Also, dass dort die Längen 'falsch' interpretiert werden.

    Thorsten

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Die mit let erhaltenen \x1 und \x2 sind Punktregister. Zum Beispiel enthält \x1 in deinem Beispiel den Wert 0pt.

    Code:
    \documentclass[margin=5mm]{standalone}
    \usepackage{tikz}
    \usetikzlibrary{intersections,calc}
    
    \tikzset{kreis/.style={draw,circle,minimum size=0.1cm,inner sep=0pt,fill=#1}}
    
    \begin{document}
    
    \begin{tikzpicture}
    \draw[name path=Rand](0,0)--(1.5,0)--(2,1)--(1,2)--(0,1.8)--cycle;
    \path[domain=0:2,samples=100,variable=\xx,name path=Funktion]plot({\xx},{sin(deg(\xx))+.8});
    \draw[name intersections={of=Funktion and Rand},variable=\xx,samples=100]
      let \p1 = (intersection-1) ,
          \p2 = (intersection-2) 
      in
          \pgfextra{\pgfmathsetmacro\s{\x1/1cm}\pgfmathsetmacro\e{\x2/1cm}}
          node[kreis=blue,label=west:\s] at (\p1){}
          plot[domain=\s:\e] ({\xx},{sin(deg(\xx))+.8})
          node[kreis=green,label=east:\e] {} ;
    \end{tikzpicture}
    
    \end{document}
    Auch beim ersten Plotten der Funktion würde ich eine domain vorgeben. Denn auch wenn dieser nicht gezeichnet wird, wird er trotzdem bei der Ermittlung der Größe der Zeichnung berücksichtigt.

    Außerdem ist trotzdem mal noch ein Vorschlag mit \clip:

    Code:
    \documentclass[margin=5mm]{standalone}
    \usepackage{tikz}
    \usetikzlibrary{intersections}
    
    \begin{document}
    
    \begin{tikzpicture}
    \begin{scope}
      \clip[name path=Rand][preaction=draw](0,0)--(1.5,0)--(2,1)--(1,2)--(0,1.8)--cycle;
      \draw[samples=100,variable=\xx,name path=Funktion]plot({\xx},{sin(deg(\xx))+.8});
      \path[name intersections={of=Funktion and Rand,name=i}];
    \end{scope}
    \draw[fill=blue](i-1)circle[radius=.1cm];
    \draw[fill=green](i-2)circle[radius=.1cm];
    \end{tikzpicture}
    
    \end{document}
    Gruß
    Elke
    Geändert von esdd (21-11-2013 um 14:46 Uhr) Grund: Alternative mit \clip

  4. #4
    Registrierter Benutzer Avatar von Hobbykomiker
    Registriert seit
    15.10.2013
    Ort
    Lingen
    Beiträge
    8

    Thumbs up Ahhhh coool

    Das mit dem Punktregister habe ich wohl überlesen (oder nicht kapiert).

    Weiterhin wusste ich nicht, wie ich intersections nach dem Ende einer scope
    benutzen kann. Diese Option
    \path[name intersections={...,name=i}];
    war mir nicht bekannt (oder ich habe auch die überlesen ).

    Damit lässt sich das, was ich vorhabe, sicherlich super mit \clip lösen.
    In meinem Bereich sind irgendwo zischen 20 und 50 Funktionen (in 3 foreach-Schleifen) und 50 und 250 Geraden (5 Schleifen) zu beschneiden, wobei ein Teil von beiden nur einen Teilbereich verwenden.

    Vielen vielen vielen usw. Dank
    Geändert von Hobbykomiker (21-11-2013 um 16:24 Uhr)

Stichworte

Lesezeichen

Berechtigungen

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