Seite 1 von 1

Tikz und Kartoffelmengen

Verfasst: Sa 5. Nov 2011, 13:02
von guy.brush™
Hallo,

ich habe mich in letzter Zeit versucht, mehr mit tikz zu beschäftigen, da ich gerne in meine Vorlesungsmitschriebe auch Bilder integrieren möchte, die optisch dazupassen (leider scheint es kein gutes GUI-Programm zu geben, dass passablen tikz-Code, den ich im Nachhinein noch verändern kann, zu geben :().

Ich habe da aktuell 2 große Probleme, die ich bisher nicht lösen konnte. Vermutlich steht das irgendwo, aber das Handbuch ist sehr groß, deshalb bitte ich um Verzeihung, aber ich habe es dann nicht gefunden oder nicht verstanden :).

Und zwar benötige ich eigentlich sehr häufig "Kartoffelmengen". Das sind so Klekse, runde Polygone ... oder wie auch immer. Ich kenne sie eigentlich nur unter dem Namen "Kartoffelmenge" :). Im Anhang ein .png Bild, dass 3 schnell gezeichnete Beispiele mit Inkscape zeigt :).

Wie kann ich diese mit tikz erzeugen?

Ich habe einmal einen Versuch mit Bezier-Kurven gestartet, aber das ist für mich wirklich nur ausprobieren und schauen, wie sich das Bild verändert und dann weiterversuchen :(. Auch besonders schön "rund" sind die Übergänge auch nicht geworden. Die Ausgabe-pdf Datei befindet sich auch im Anhang.
\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}
    % Versuch einer Kartoffelmenge
    \draw (0,0) .. controls (1,1) and (2,1) .. (3,0)
		.. controls (4,-2) and (5,-1) .. (5,-4)
		.. controls (4,-6) and (3,-3) .. (3,-4.5)
		.. controls (-2,-6) and (-1,-5) .. (-1,-3)
		.. controls (0,2) and (-1,-1) .. (0,0);
  \end{tikzpicture}
  \caption{Versuch einer Kartoffelmenge}
  \label{fig:kartoffelmenge}
\end{figure}

\end{document}
Zusätzliche Frage: Ist der Code so, also in einzelne Zeilen pro ".. controls" geschrieben in Ordnung oder kann das zu Problemen führen bzw. ist aush bestimmten (welchen?) Gründen nicht sinnvoll?

Hat da jemand einen Tipp für mich, wie ich das Problem lösen kann? Oder kennt jemand ein Programm (ich bin Linux-Nutzer), mit dem ich graphisch eine Kartoffelmenge erzeugen kann und dann die Koordinaten im obigen Stil ausspuckt?

[Das plugin "inkscape2tikz" spuckt z.B. nur in pt aus, dann habe ich grausige Werte und verstehe es nicht, die Koordinaten in obige umzuwandeln.]


Viele Grüße,

\\ guy.brush


PS: Eine kleine Anmerkung, falls der Vorschlag kommen sollte: Ein Rechteck oder ein Kreis anstelle einer Kartoffelmenge zu zeichnen, wäre eigentlich falsch, da die Menge in aller Regel kein Kreis oder Rechteck ist.

Verfasst: Sa 12. Nov 2011, 20:08
von guy.brush™
Hallo,

also ich habe bisher eine evtl. Lösung gefunden:

Inkscape -> Kartoffel erstellen -> mit dem Plugin "inkscape2tikz" den Code in tikz-Code exportieren lassen -> ein kleines Ruby-Skript rechnet mir dann die Koordinaten von pt in cm um und rundet auf 2 Stellen. Dies scheint so weit ganz gut zu funktionieren, aber inkscape2tikz macht etwas komisches:

Und zwar werden zumindest die Zeichnungen (immerhin Text nicht) gespiegelt ausgegeben und dann mit "yscale=-1" korrigiert.

Beispiel:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
% path2985
\path[draw=black] (303.1740,214.1497) .. controls (292.5144,231.5953) and
  (337.4464,244.4464) .. (337.6299,264.8901) .. controls (337.7337,276.4601) and
  (326.7513,285.6923) .. (318.6483,293.9518) .. controls (302.1399,310.7789) and
  (283.7612,333.4445) .. (260.1903,333.7487) .. controls (250.9291,333.8682) and
  (241.3198,326.8089) .. (236.8260,318.7102) .. controls (223.8997,295.4149) and
  (260.4629,248.5829) .. (235.6850,238.7944) .. controls (203.2440,225.9785) and
  (191.9171,333.7855) .. (163.0848,314.1548) .. controls (147.5476,303.5762) and
  (194.5166,279.8851) .. (186.5296,262.8698) .. controls (179.2830,247.4316) and
  (144.6349,264.8257) .. (137.1429,249.5050) .. controls (128.7658,232.3745) and
  (158.0378,215.7745) .. (159.2555,196.7443) .. controls (159.9195,186.3675) and
  (144.8089,175.0539) .. (150.9630,166.6725) .. controls (158.9135,155.8446) and
  (180.1232,172.8052) .. (191.2383,165.2614) .. controls (215.6100,148.7203) and
  (197.2712,84.0241) .. (226.7244,84.3353) .. controls (255.9137,84.6437) and
  (241.8931,142.5166) .. (260.1903,165.2614) .. controls (267.3569,174.1701) and
  (278.3728,179.2600) .. (288.3437,184.8553) .. controls (315.8690,200.3011) and
  (383.3852,192.5781) .. (375.0056,223.0083) .. controls (368.6006,246.2677) and
  (315.7528,193.5632) .. (303.1740,214.1497) -- cycle;


\end{tikzpicture}
\end{document}
Kann sich vielleicht jemand erklären, warum das so sein könnte?

Viel wichtiger aber: Fällt einem (vielleicht erfahreneren User) auf, wie problematisch das bei der manuellen Weiterverarbeitung des Codes werden könnte?

Ich könnte zwar dann die Kartoffel mit einer scope-Umgebung und "yscale=-1" in meine tikz-Zeichnungen einbetten, aber wenn ich dann innerhalb der Kartoffel etwas zeichnen, ändern oder sonst etwas möchte ... dann muss ich das doch alles gespiegelt machen, oder nicht? Das stelle ich mir etwas kompliziert vor.

Ein Workaround wäre, schon in Inkscape die Kartoffeln auf dem Kopf gespiegelt zu erstellen, aber gerade bei komplizierteren Formen wird das auch etwas unübersichtlicher.


Viele Grüße,

\\ guy.brush