Tikz: Bestimmte Abschnitte einfärben und Punkte auf Rändern

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: Tikz: Bestimmte Abschnitte einfärben und Punkte auf Rändern

von guy.brush » Mo 21. Nov 2011, 14:57

Vielen Dank :). Es scheint auch ein "foreground" und ein "main" zu geben. Muss ich einmal genauer anschauen.

Ich bin bzgl. der Konstruktion der unteren Ellipse, mit der ich ja den 3D-Effekt erzeugen möchte, etwas weitergekommen. Ich weiß alledings nicht, ob dies die schönste Lösungsmöglichkeit ist. Ein "ellipse through (Punkt)" scheint es nicht zu geben.
\documentclass[a4paper,%
          11pt,%
          DIV=10,%
          BCOR=0mm,%
          twoside=semi,%
          footnotes=multiple]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{matrix,arrows,intersections,calc,through}

\begin{document}
\begin{figure}[!ht]
  \centering
  \begin{tikzpicture}
    % Kreis
    \draw[name path = kreis] (0,0) circle [radius=2];
    \draw (0,0) ellipse [x radius=2, y radius=0.5];
    \path[name path=untere linie] (-3,-1.25) -- (3,-1.25);
    \path[name intersections={of=kreis and untere linie, name=unten}];
    \coordinate (furchtbar) at ($(unten-1)!0.5!(unten-2)$);
    \draw[dashed] ($(unten-1)!0.5!(unten-2)$) let
				\p1 = ($(unten-1) - (furchtbar)$),
				\n2 = {veclen(\x1,\y1)}
			      in
				(unten-2) arc [x radius=\n2, y radius=0.15cm, start angle=0, end angle=180];
    \draw ($(unten-1)!0.5!(unten-2)$) let
				\p1 = ($(unten-1) - (furchtbar)$),
				\n2 = {veclen(\x1,\y1)}
			      in
				(unten-2) arc [x radius=\n2, y radius=0.15cm, start angle=360, end angle=180];
% 				(unten-2) arc [x radius=\n2, y radius=0.15cm, start angle=0, end angle=180]; % hier irgendwo [dashed] 'rein?
  \end{tikzpicture}
  \caption{Kreis}
  \label{fig:kreis}
\end{figure}

\end{document}
Gibt es denn eine Lösung, nur 1x "let" zu verwenden und zeitgleich den einen Ellipsen-Bogen "dashed" und den anderen "solid" zu zeichnen?

Ein Problem, das mich auch noch einige Zeit lang beschäftigt hatte, war, dass ich innerhalb von "let" die \p1 und \n2 Definitionen gerne schon berechnen wollte. Ursprünglich wollte ich die Distanz einfach mit "* 0.5" halbieren :). Das geht aber leider nicht.

Habe ich es denn richtig verstanden, dass, wenn ich mehrere \p1, \p2, ... definiere, dass dann \x1, \x2, ... (analog \y1, \y2, ...) sich immer auf das jeweilige \pX beziehen? Sprich \x42 ruft x-Koordinate von \p42 auf.

Und die \nX sind nur dazu da, um so etwas wie "veclen" auszuführen. Wofür man die sonst noch braucht, kann ich gerade nicht sagen. Kann mir das vielleicht jemand sagen? Das ist mir auch noch etwas unklar :).

von Hagbard Celine » Mo 21. Nov 2011, 01:08

guy.brush hat geschrieben:Geht das auch eleganter, indem ich die Reihenfolge so belasse, wie sie bei mir oben im Code ist, aber eine Option angebe, so dass die roten Kreise "oben" sein werden?
Ja, geht es. Dafür gibt es die TikZ-Library backgrounds und eine zugehörige Umgebung (siehe Quelltext).
\documentclass[a4paper,%
          11pt,%
          DIV=10,%
          BCOR=0mm,%
          twoside=semi,%
          footnotes=multiple]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{matrix,arrows,intersections,calc}

\usetikzlibrary{backgrounds} % diese Library einbinden

\begin{document}

\begin{tikzpicture}
  \draw[name path=foo] (0,0) circle [radius=2];
  \draw[name path=bar] (-3,-3) -- (3,3);
  \fill[red, name intersections={of= foo and bar, name=foobar}]
    (foobar-1) circle [radius=0.05]
    (foobar-2) circle [radius=0.05];
  \begin{pgfonlayer}{background} % Tangente in den Hintergrund rücken
	  \draw ($(foobar-1)!0.5!90:(foobar-2)$) -- ($(foobar-1)!0.5!270:(foobar-2)$);
  \end{pgfonlayer}  
\end{tikzpicture}

\end{document}
 

von guy.brush™ » So 20. Nov 2011, 19:14

Hallo,

ich schreibe einfach einmal tapfer weiter, vielleicht liest es ja einmal jemand, der mir weiterhelfen kann :).

Ich mache in Zwischenzeit ein paar Fortschritte :).

Ich bin jetzt in der Lage, das oben erwähnte Dreieck nach eigenen Wünschen einzufärben.

Aktuell versuche ich, die 3D-wirkende Kugel zu zeichnen, die ich im Post vor diesem hier als Bild angehängt habe. Dabei bin ich auf ein Problem gestoßen, das ich aktuell mit meinen Mitteln nicht mehr lösen kann:

Und zwar benötige ich einen berechneten Radius, um die oberen und unteren Ellipsen erzeugen zu können. Ich konnte schon die Schnittpunkte auf dem Kreisrand bestimmen, aber jetzt stehe ich vor dem Problem, dass die "path midway construction" aus dem calc-Paket einen Punkt ausspuckt, ich aber nur die horizontale Differenz der beiden Punkte benötige.
\documentclass[a4paper,%
	       11pt,%
	       DIV=10,%
	       BCOR=0mm,%
	       twoside=semi,%
	       footnotes=multiple]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{matrix,arrows,intersections,calc}

\begin{document}


\begin{figure}[!ht]
  \centering
  \begin{tikzpicture}
    % Kreis
    \draw[name path = kreis] (0,0) circle [radius=2];
    \draw (0,0) ellipse [x radius=2, y radius=0.5];
    \draw[name path=untere linie] (-3,-1.25) -- (3,-1.25);
    \path[name intersections={of=kreis and untere linie, name=unten}];
%     \draw (unten-2) arc [x radius=1.5, y radius=0.5, start angle=0, end angle=180];
    \draw ($(unten-1)!0.5!(unten-2)$) ellipse [x radius=($(unten-1)!0.5!(unten-2)$), y radius=0.42];
  \end{tikzpicture}
  \caption{Kreis}
  \label{fig:kreis}
\end{figure}

\begin{tikzpicture}
  \draw[name path=foo] (0,0) circle [radius=2];
  \draw[name path=bar] (-3,-3) -- (3,3);
  \fill[red, name intersections={of= foo and bar, name=foobar}]
    (foobar-1) circle [radius=0.05]
    (foobar-2) circle [radius=0.05];
  \draw ($(foobar-1)!0.5!90:(foobar-2)$) -- ($(foobar-1)!0.5!270:(foobar-2)$);
\end{tikzpicture}

\end{document}
So geht das Kompilieren leider schief :(. [Den "y radius" muss ich dann wohl per Hand so lange anpassen, bis es gut aussieht.]


Meine zweite Frage bezieht sich auf die zweite tikzpicture-Umgebung in diesem Beispiel. Und zwar habe ich das Problem, dass ich auf die Koordinaten (foobar-1) und (foobar-2) erst nach dem Ausführen der intersection zugreifen kann. Das bedeutet aber, das die von mir hier schön konstruierte Tangente im Code nach der Definition und dem Erzeugen der roten Kreise kommt und demnach liegt die Tangete auf dem roten Kreis.

Ok, ich kann jetzt hergehen und im Teil mit "name intersections={...}" die roten Kreise noch nicht erzeugen und erst nach dem Zeichnen der (in diesem Fall) Tangente. Meine Frage jetzt: Geht das auch eleganter, indem ich die Reihenfolge so belasse, wie sie bei mir oben im Code ist, aber eine Option angebe, so dass die roten Kreise "oben" sein werden?

von guy.brush™ » Do 17. Nov 2011, 22:12

So, ich müsste doch noch einmal nachfragen. calc und intersection ... denke ich zumindest ... dürfte ich verstanden haben. Zumindest das, was im manual bzgl. tikz-Code und nicht pgf-Code steht.

Bezüglich Punkten auf dem Rand von Objekten muss man, so denke ich, eine unsichtbare Gerade mit \path (und nicht mit \draw) zeichnen und dann die Schnittpunkte berechnen (lassen). Ich hoffe, dass das so geht. Ein expliziter Test konnte zwecks Zeitmangels noch nicht durchgeführt werden :).

Was ich mir aber noch nicht vorstellen kann, ist, wie ich jetzt so etwas einfärben könnte. Die clip-Funktion habe ich noch nicht wirklich verstanden.


Ein weiteres Problem, was ich nicht wüsste, wie ich es realisieren sollte, ist das Bild (Torus = Donut) aus dem Anhang. Es geht hier insb. um die 2 Kreissegmente in der Mitte, die sich ja um die "Mittelachse" der Ellipse herum befinden sollten und der obere, kleinere Segment muss genau von dem einen Punkt auf dem anderen Segment bis zu dem anderen gehen. Ich hoffe, du/ihr versteh(s)t, was ich meine :).

Das 2. Bildchen ist die Kugel, die etwas 3D mäßig wirken sollte. Die fortgeschrittene Version von dieser Fassung wäre, dass der Kreisrand vorne durchgezogene ist (solid) und die hintere gepunktet oder gestrichelt (dashed).

Die Bildchen sind nur fix gezeichnet mit Inkscape, mit tikz wäre etwas genauer schon schöner ;).


Wäre für Hilfe sehr dankbar :).


Viele Grüße,

\\ guy.brush
Dateianhänge
Donut, Kugel Schritt 1 und Kugel Entfassung
Donut, Kugel Schritt 1 und Kugel Entfassung
Donut und Kugeln.png (37.59 KiB) 2888 mal betrachtet

von guy.brush™ » So 6. Nov 2011, 11:26

Vielen dank schon einmal :).

Ich muss zugeben, dass ich intersections noch nicht so ganz verstanden habe, sieht etwas komplizierter aus (auch von der Syntax).

Die calc Library hingegen sieht sehr nützlich aus. So kann ich zumindest bei einem Kreis einen Punkt auf den Rand setzen. Bei einem Dreieck oder gar Kartoffelmengen bin ich aber noch etwas aufgeschmissen :).

calc dürfte aber auch bei der Konstruktion von Halbgeraden helfen, vielleicht sogar auch bei Tangenten und bei Geraden durch 2 Punkten. Mal schauen. Das sind quasi weiterführende Problematiken, die sich aus Problem 2b ergeben (werden).

Zu Problem 2a hatte ich auch etwas bzgl. clipping gelesen, aber das ist auch noch nicht so ganz durchgedrungen bei mir :).

von iTob » Sa 5. Nov 2011, 15:26

Hab grad nicht so viel Zeit, daher nur kurz: Schau dir mal die intersections Library an zu Problem 2a, vielleicht auch 2b. Zu 2b könnte evtl. auch die Angabe von Koordinaten mit der calc Library nützlich sei: ($(A)!0.5!(B)$) = auf halber Strecke zwischen Koordinate (A) und (B)

Tobi

Tikz: Bestimmte Abschnitte einfärben und Punkte auf Rändern

von guy.brush™ » Sa 5. Nov 2011, 13:16

Hallo,

dieser Thread beschäftigt sich mit einem 2. großen Problem, das ich aktuell noch mit tikz habe, weshalb ich es von meinem ersten Problem getrennt habe und einen extra Thread aufmache.

Eigentlich sind es 2 Probleme, aber damit ich mit meiner Behauptung "2. Problem" "recht" behalte, nennen wir sie "Problem 2a" und "Problem 2b" :D.


Problem 2a:

Wie färbe ich bestimmte Gebiete in einer gewünschten Farbe ein, wobei sich die bestimmten Gebiete meist durch bestimmte (geometrische) Zeichnungen ergeben? Ich habe einmal ein Beispiel (siehe unten) dazu gemacht. Wie kann ich z.B. die 3 Flächen, in die ich das Dreieck eingeteilt habe, in 3 verschiebene Farben einfärben?

Dabei ist zu beachten, dass hier das ganze quasi mit 3 Strichen ("Bleistift ansetzen ohne absetzen" = 1 Strich) gezeichnet werden kann, was recht einfach ist. Das muss aber nicht zwangsläufig so sein.


Problem 2b:

Wie spreche ich einen beliebigen, d.h. einen meiner Wahl, Punkt auf dem Rand eines Gebildes an, um dort z.B. einen Punkt (also einen kleinen ausgefüllten Kreis) zu malen, eine Linie durchzuzeichnen oder eine Strecke zwischen 2 Randpunkten zu zeichnen? Ein Gebilde kann dabei ein beliebiges Objekt sein, also z.B. ein Kreis, eine Kartoffelmenge (siehe mein erster Thread, Link oben), ein Dreieck oder theoretisch auch ein 42-dimensionaler Würfel :).


Hier mein Beispiel: [Im Anhang wieder der Output als .pdf.]
\documentclass[a4paper,%
	       11pt,%
	       DIV=10,%
	       BCOR=0mm,%
	       twoside=semi,%
	       footnotes=multiple]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[intlimits]{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsopn}
\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}

\begin{document}

\begin{figure}[!ht]
  \centering
  \begin{tikzpicture}
    % Dreieck
    \draw (-5,0) -- (5,0) -- (0,7.42) -- cycle;
    
    % komisches Gewirr im inneren des Dreiecks
    % Ist die Formatierung im Folgenden so in Ordnung oder kann das zu Problemen führen?
    \draw (0,7.42) -- (0,6)
		   -- (-1,5.5)
		   -- (0.1,4.2)
		   -- (0.1,2.1)
		   -- (2.1,2.1)
		   -- (3,2.5)
		   -- (2,1.7)
		   -- (2,1)
		   -- (0,0.5)
		   -- (0,0);
    % horizontaler Strich im komisches Gewirr
    \draw (2,1.7) -- (4.2,1.7);	% dieser Strich geht über das Dreieck hinaus, weil ich nicht weiß, wie ich tikz,
				% dass er "bei der Kollision" mit dem Rand aufhören soll zu zeichnen :)
				% (siehe 2. Frage)
  \end{tikzpicture}
  \caption{Kurioses Dreieck}
  \label{fig:kurioses_dreieck}
\end{figure}

\begin{figure}[!ht]
  \centering
  \begin{tikzpicture}
    % Kreis
    \draw (0,0) circle (4.2);  
  \end{tikzpicture}
  \caption{Kreis}
  \label{fig:kreis}
\end{figure}

\end{document}

Zusatzfrage: In welcher Größe ist es sinnvoll, einen Punkt zu malen? Also z.B. ein Kreismittelpunkt, und einen auf dem Kreisrand, die man dann z.B. M und P nennt.

Zusatzfrage 2: Welche Einheit verwendet tikz, wenn ich keine Einheit angebe? Für mich sieht das irgendwie sehr nach cm aus.


So, das wären erst einmal meine 2 größten Probleme. Ich hoffe, ihr könnt mir helfen, da wäre ich euch sehr dankbar :).

Am Ende möchte ich sogar beide Probleme (1, 2a und 2b) kombinieren, indem ich eine Kartoffel zeichne, 2 Randpunkte auswähle, eine "Unterkartoffel" am Rand der ersten Kartoffelmenge zeichne und diese einfärbe :).


Viele Grüße,

\\ guy.brush
Dateianhänge
Flaechen_fuellen_und_Punkte_auf_Raendern.pdf
(16.23 KiB) 536-mal heruntergeladen

Nach oben