Hallo liebe TeXWelt-Community,

ich versuche mir ein Kommando zu definieren, um ein regelmäßiges n-Eck mit TikZ zeichnen zu lassen. Dabei übergebe ich die Anzahl der Ecken, den Radius und eventuelle tikzpicture-optionen beim Aufruf des Kommandos. Es gibt ein Problem beim Runden der counter-Variable, so dass ich bei einem regelmäßigen 17-Eck z.B. nicht auf das gewünschte Ergebnis komme. Ich habe im Netz verschiedenste Möglichkeiten gefunden wie man rundet (mit den Paketen calculator oder siunitx z.B.) Bin aber nie auf eine Variante gekommen die durchkompiliert. Es wäre cool wenn mir jemand weiterhelfen könnte. Es gibt sicherlich eine einfache Lösung, aber ich komme leider nicht drauf.

\documentclass[margin=5pt]{standalone}

\usepackage{pdfpages}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcounter{x}
\newcounter{y}

\newcommand{\nEck}[3]{
   \setcounter{x}{360/#1}
   \setcounter{y}{\value{x}*2}
   \begin{tikzpicture}[#3]
     \foreach \angle in {\thex,\they,...,360} {
         \draw ($(0,0) + cos(\angle)*(#2,0) + sin(\angle)*(0,#2)$) -- ($(0,0) + cos(\angle +\thex)*(#2,0) +sin(\angle +\thex)*(0,#2)$);
     }
   \end{tikzpicture}
}

\begin{document}
   \nEck{8}{2}{rotate=22.5}
   \hspace{1cm}
   \nEck{17}{2}{}

   \hspace{1cm}
   \begin{tikzpicture}[rotate=22.5]
     \foreach \angle in {45,90,...,360} {
         \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +45)*(2,0) +sin(\angle +45)*(0,2)$);
     }
   \end{tikzpicture}
   \hspace{1cm}
   \begin{tikzpicture}[rotate=22.5]
     \foreach \i in {0,45,...,135}{
        \fill[gray, opacity=0.5] (0,0) -- ($(0,0) + cos(\i)*(2,0) + sin(\i)*(0,2)$) -- ($(0,0) + cos(\i +45)*(2,0) +sin(\i +45)*(0,2)$) -- cycle;
     }
     \foreach \angle in {45,90,...,360} {
        \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +45)*(2,0) +sin(\angle +45)*(0,2)$);
     }
   \end{tikzpicture}
\end{document}

Nachtrag:

Da ich offensichtlich meine Frage nicht eindeutig genug gestellt habe, nun hier ein kleiner Nachtrag. Bisher habe ich das Arbeitsblatt für meine Schüler wie folgt gestaltet, wobei hier ein kleiner Auszug der Aufgabe zu sehen sein soll:

\documentclass[a4paper]{article}

\usepackage{amsmath}
\usepackage{multicol}
\usepackage[shortlabels]{enumitem}
\usepackage{pdfpages}
\usepackage{geometry}
\geometry{a4paper, top=15mm, left=15mm, right=20mm, bottom=15mm, headsep=10mm, footskip=10mm}
\usepackage{tikz}
\usetikzlibrary{calc}

\tikzset{
  topline/.style={baseline={([yshift=#1]current bounding box.north)}},
  topline/.default=-\ht\strutbox
}

\begin{document}
Erweitere bzw. kürze den Bruch geeignet und male dann die entsprechenden Bruchanteile aus.
\begin{multicols}{4}
    \begin{enumerate}[(a)]
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \angle in {45,90,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +45)*(2,0) +sin(\angle +45)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{1}{2}=\underline{\underset{}{\hspace{2cm}}}$}};
                \end{tikzpicture}
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \angle in {0,51.4285,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +51.4285)*(2,0) +sin(\angle +51.4285)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{25}{35}=\underline{\underset{}{\hspace{2cm}}}$}};
                \end{tikzpicture}
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \angle in {30,60,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +30)*(2,0) +sin(\angle +30)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{2}{3}=\underline{\underset{}{\hspace{2cm}}}$}};
                \end{tikzpicture}
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \angle in {0,21.1764,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +21.1764)*(2,0) +sin(\angle +21.1764)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{36}{51}=\underline{\underset{}{\hspace{2cm}}}$}};
                \end{tikzpicture}
    \end{enumerate}
\end{multicols}

\hspace{1cm}

Lösungen:
\begin{multicols}{4}
    \begin{enumerate}[(a)]
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \i in {0,45,...,135}{
                        \fill[gray, opacity=0.5] (0,0) -- ($(0,0) + cos(\i)*(2,0) + sin(\i)*(0,2)$) -- ($(0,0) + cos(\i +45)*(2,0) +sin(\i +45)*(0,2)$) -- cycle;
                    }
                    \foreach \angle in {45,90,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +45)*(2,0) +sin(\angle +45)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{4}{8}$}};
                \end{tikzpicture}
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \i in {0,51.4285,...,205.7142}{
                        \fill[gray, opacity=0.5] (0,0) -- ($(0,0) + cos(\i)*(2,0) + sin(\i)*(0,2)$) -- ($(0,0) + cos(\i +51.4285)*(2,0) +sin(\i +51.4285)*(0,2)$) -- cycle;
                    }
                    \foreach \angle in {0,51.4285,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +51.4285)*(2,0) +sin(\angle +51.4285)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{5}{7}$}};
                \end{tikzpicture}
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \i in {0,30,...,210}{
                        \fill[gray, opacity=0.5] (0,0) -- ($(0,0) + cos(\i)*(2,0) + sin(\i)*(0,2)$) -- ($(0,0) + cos(\i +30)*(2,0) +sin(\i +30)*(0,2)$) -- cycle;
                    }
                    \foreach \angle in {30,60,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +30)*(2,0) +sin(\angle +30)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{8}{12}$}};
                \end{tikzpicture}
        \item \begin{tikzpicture}[scale=0.75, topline]
                    \foreach \i in {0,21.1764,...,232.9411}{
                        \fill[gray, opacity=0.5] (0,0) -- ($(0,0) + cos(\i)*(2,0) + sin(\i)*(0,2)$) -- ($(0,0) + cos(\i +21.1764)*(2,0) +sin(\i +21.1764)*(0,2)$) -- cycle;
                    }
                    \foreach \angle in {0,21.1764,...,360} {
                            \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +21.1764)*(2,0) +sin(\angle +21.1764)*(0,2)$);
                        }
                    \draw node[below] at (0,-2) {\footnotesize{$\dfrac{12}{17}$}};
                \end{tikzpicture}
    \end{enumerate}
\end{multicols}
\end{document}

Wie man sieht mache ich oft das gleiche, welches ich gerne durch ein Kommando wie nEck für die Aufgabe bzw. auch nEcksolution für die Lösung abkürzen möchte. Bis jetzt habe ich die Winkel von den n-Ecken immer händisch in die foreach-Schleife gesetzt, was aber offensichtlich bei einem 7-Eck oder 17-Eck bzw. bei jedem anderem regelmäßigen n-Eck mit nicht ganzzahligen Winkeln anstrengend ist. Mir ist bekannt das die counter-Variablen Integerzahlen sind. Ich hatte sowas probiert wie \setcounter{x}{\real{360.0/#1.0}} in der Definition des Kommandos siehe oben, aber das wurde leider nicht kompiliert. Ich hatte auch andere Sachen versucht, was aber nie zum Erfolg führte. Deswegen die "misslungene" Variante oben im Beispiel. Mir ist durchaus bewusst wie TikZ denkt und warum bei dem Beispiel des 17-Eck oben 3 Grad zu den vollständigen 360 fehlen. Aber intuitiv dachte ich, dass es doch sicher eine Möglichkeit gibt die Rechnung "360/Anzahl der Ecken" zu runden bzw als real Zahl zu behandeln. Ich hoffe mein Problem ist nun etwas verständlicher.

PS: Ich möchte darauf hinweisen den freundlichen Ton hier Forum zu waren! Ich bin jederzeit bereit mir Tipps anzunehmen oder meine Frage nachzubessern. Mir ist leider nicht jede Bibliothek von TikZ bekannt aus der knapp 1300 Seiten langen Dokumentation. Ich bin auch kein Crack in TeX, sondern "nur" ein Lehrer der seine Unterrichtsunterlagen lieber mit LaTeX erstellt als mit Word. Ich würde mich also als fortgeschrittenen Anfänger bezeichnen. Aber mir ist z.B. klar, mit TikZ gibt es doch sicher nicht viel was nicht möglich ist. Deswegen wäre ich dankbar über jeden nett gemeinten Hinweis der mir weiter hilft.

gefragt 26 Feb '22, 15:55

maqu's gravatar image

maqu
11628
Akzeptiert-Rate: 0%

bearbeitet 27 Feb '22, 14:10

1

Du arbeitest mit ganzen Zahlen wo eigentlich reelle Zahlen benötigt werden. Über die abgerundeten ganzen Zahlen summierst du dann. Dass sich der Fehler dabei aufsummiert und am Ende dann etwas fehlt, ist nicht ganz so verwunderlich, oder? Statt eine Schleife über den Winkel würde ich zu einer Schleife über die Ecken raten und dann den Winkel jeweils neu berechnen. Wenn man dabei erst multipliziert und dann dividiert, hält sich der Fehler in Grenzen. Die Berechnung der Winkel geht dann direkt mit pgfmath.

(26 Feb '22, 16:10) huibub

Mir ist evtl. das Problem nicht ganz klar, aber spricht etwas dagegen, das mit der Bibliothek shapes und darin regular polygon zu erstellen?

(26 Feb '22, 16:10) cis

Ansonsten fällt mir auf, dass Du "Klassik-Latex" mit TikZ zusammenwürfelst. Nimm für TikZ-Rechnungen \pgfmathsetmacro; counter sind m.W. für ganze Zahlen. Ansonsten zeichne Deine Polygone, wie gesagt, einfach mit der Bibliothek shapes, da musst Du nichts mehr rechnen.

(26 Feb '22, 16:19) cis

@cis erstmal vielen Dank, die regular polygon Funktion der shapes-Bibliothek war mir nicht bekannt und löst das recht einfach, aber ich habe "nicht nur" vor das Polygon zu zeichnen, sondern dies in bestimmte Anteile zu zerlegen und entsprechend zu färben ... ich füge mal Beispiele noch hinzu wie es später aussehen soll, wollte das reine n-Eck erst automatisieren @huibub es ist mir klar das ich mit ganzen Zahlen arbeite, aber ich dachte man kann aus 360/17 eventuell eine gerundete real-Zahl machen... die Schleife über die Ecken zu machen ist eine Idee auf die noch nicht gekommen bin, danke

(26 Feb '22, 16:29) maqu

@maqu In der Schleife, die einen Teil des ergänzten Vielecks färben soll, benutzt Du zweimal den nicht definierten Befehl \I statt \i, was einen fehlerbedingten Abbruch der Übersetzung bewirkt.

(26 Feb '22, 18:15) Bartman

@maqu Mach mit irgendwas Paint eine Grobskizze, wie das am Schluss aussehen soll. Dann können wir schauen, wie man das umsetzt.
PS: Auch, wenn Du Ganzahlfunktionen oder -rechnungen brauchst, gibt es dafür pgfmath-Mittel (siehe im TikZ-Handbuch). Der counter wird Dir da höchstwahrscheinlich um die Ohren fliegen. Aber ich vermute, man wird das eh nicht brauchen.

(26 Feb '22, 19:02) cis

@Bartman ja entschuldige habs gefixt^^ @cis wenn die Kinder im Bett sind schau ich mir pgfmath mal an ;D, aber über einen kleines Beispiel wäre ich dankbar, da ich mich wahrscheinlich erst umfangreich reinlesen muss^^

(26 Feb '22, 19:21) maqu

@maqu Ich habe keine Ahnung, wie das am Schluss aussehen soll. Mit Färbungen und etc. Ich werde auch nicht versuchen, dass aus Beschreibungungstexten herauszuanalysieren. Es gilt: 1 Bild... 1000 Worte...

(26 Feb '22, 19:35) cis

@cis ok also bei mir wird eine Ausgabe erzeugt und ich sehe die Bilder? … zumindest nachdem ich den Hinweis von @Bartman gefixt hab … am Beispiel des 8-Ecks soll am Ende das 8-Eck in entsprechend 8 gleich große Teile vom Mittelpunkt aus geteilt werden. Die Schüler sollen dann angenommen 4/8 färben (bzw. 1/2 erweitert). Der gefärbte Anteil soll dann die Musterlösung sein. Beim 17-Eck bekomme ich da halt schon Probleme das Polygon selbst zu zeichnen. Deswegen versuche ich das erst einmal zu automatisieren. Die Anteile zeichnen und danach für die Musterlösung färben sollte kein Problem mehr sein.

(26 Feb '22, 19:56) maqu
2

@cis @maqu Leute, locker bleiben :-) hier sind Darstellung des Problems und leichte Zielverständlichkeit/Umsetzbarkeit eben voneinander entfernt, dann gibt es hier eben vllt. keine schnelle Lösung. Auch ich mache mangels Zeit eher nur was, das mir schnell visuell klar und umsetzbar aussieht. Wenn nicht, dann halt nicht, kein Beinbruch, vllt. versteht es ein anderer. Lassen wir das Thema mal liegen, diskutieren nicht weiter warum man wie skizzieren sollte oder nicht, es gibt ja noch andere Leser. @maqu Danke für das vollständige Minimalbeispiel, das sich hier gut testen lässt.

(27 Feb '22, 11:37) stefan ♦♦

@Ijon Tichy man kann ja offen und ehrlich sein, wenn man sich angegriffen fühlt, oder? Ich habe dich in keiner Form beleidigt ... weil du sinngemäß meintest jeder Erstklässler kann doch nachvollziehen warum das nicht geht, wollte ich nur sagen das mich das persönlich angegriffen hat ... das du das jetzt als Anlass nimmst dein Profil löschen zu wollen ist deine Entscheidung ... ich bin dir für deine Antwort trotzdem dankbar

(27 Feb '22, 14:54) maqu

@maqu:

man kann ja offen und ehrlich sein, wenn man sich angegriffen fühlt, oder?

Und genau das hat Ijon Tichy getan: Offen und ehrlich gesagt, dass er sich von dir angegriffen fühlt.

weil du sinngemäß meintest jeder Erstklässler kann doch nachvollziehen warum das nicht geht

Eigentlich hatte er AFAIR geschrieben, dass jeder erstklässler die zahlenfolge ausrechnen kann. Damit wollte er wohl andeuten, dass es keiner höheren mathematik bedarf, um die entstehende zahlenfolge auszurechnen. Also in etwa gleichbedeutend mit "nach Adam Riese und Eva Zwerg".

(27 Feb '22, 15:06) huibub

@Ijon Tichy: Bitte überlege dir das mit dem Löschen deiner Beiträge noch einmal. Die sind nicht nur für diejenigen , die dich offenbar immer mal wieder angreifen, sondern auch für sehr viele andere wertvoll. Ich selbst habe lange hier nur mitgelesen und dabei nicht zuletzt von dir einiges gelernt. Leider habe ich dabei auch gelernt, dass man sich warm anziehen muss, wenn man Antworten schreibt, und erst recht, wenn man andere in Kommentaren darauf hinweist, dass sie ihre Fragen verbessern könnten. Das ist einer der Gründe, warum ich sehr lange gebraucht habe, bis ich mich das getraut habe.

(27 Feb '22, 15:13) huibub
1

Nehmt mal einen Tag Pause. Das war mal eine ganz normale Frage, bis es zu Bemerkungen kam, die nicht für das Thema wichtig waren und als verletzend empfunden werden können. Das lief nicht gut und sowas passiert und wir brauchen es nicht weiterdiskutieren. Ich glaub das Wichtige war gesagt, und morgen schauen wir weiter.

(27 Feb '22, 15:26) stefan ♦♦

Vorweg: Ich weiß nicht, woran sich der Ärger entzündet hat und will es auch gar nicht wissen.

Überreaktionen, wenn einem klar wird, dass man in irgend einem Fall in irgend einer Hinsicht, die Weisheit nicht mit Löffeln gefressen hat, scheinen mir aber irgendwie sehr typisch Deutsch. Ich bin die meiste Zeit des Jahres im asiatischen Raum unterwegs. Da bedanken sich die Leute sogar noch höflich bis unterwürfig, wenn man sie auf ein Versäumnis hinweist. Das heißt nicht, dass sie sich nicht ärgern oder vielleicht innerlich beleidigt sind. Es wäre ihnen aber extrem peinlich, das herauszuposaunen.

(27 Feb '22, 15:38) der_zornige_...
1

Wir haben eine Pandemie, Krieg in Europa, ein Land aktivierte heute seine Atomwaffen-Streitkräfte in höchste Alarmbereitschaft. Lasst uns wenigstens hier in unserer LaTeX-Nische gegenseitig einen großen War-nicht-böse-gemeint-Bonus geben und alle davon ausgehen. Wollte ich noch abschließend sagen.

(27 Feb '22, 15:41) stefan ♦♦

@huibub so habe ich das nicht gesehen, danke ... wenn ich dich @Ijon Tichy damit, das ich mich angegriffen gefühlt habe beleidigt habe, tut es mir Leid, vllt war ich durch das Gespräch mit @cis etwas empfindlich ... ich bin dir wie ich nun auch schon zum dritten mal sage sehr dankbar für deine Antwort @Ijon Tichy und stimme @huibub zu, ich fände es schade wenn du deinen Account löschen lässt und damit so viele deiner hilfreichen Antworten für andere Leser löschst ... bitte bedenke das noch einmal ... wenn du mir nicht mehr helfen möchtest muss ich das leider akzeptieren

(27 Feb '22, 15:44) maqu

@stefan danke für deine deeskalierenden Worte ... ich nehme mir deinen Rat zu herzen und schaue Morgen erst wieder rein

(27 Feb '22, 15:48) maqu

@Ijon Tichy ich kann mir vorstellen das, solange wie du schon im Forum unterwegs bist, man oft mit Anfeindungen konfrontiert wird. Ich möchte mich jetzt nichtwiederholen, aber es tut mir Leid das ich das in dem Moment so gedeutet habe und dir damit bildlich in die Weichteile getreten habe. Ich möchte auch nochmal sagen das mein Post Skriptum im Nachtrag nicht an dich sondern an @cis gerichtet war. Ich war durch den vorangegangen Kleinkrieg sicherlich empfindlich. Das du wegen mir das jetzt zum Anlass nimmst diesen Schnitt zu machen bedauere ich sehr.

(28 Feb '22, 09:31) maqu

@Ijon Tichy ich war gerade dir sehr dankbar das du mir mit deiner Antwort geholfen hast, da @cis meinte das kein dummer mir helfen würde. Es ist schon bezeichnend das @cis seine Kommentare gelöscht hat.

(28 Feb '22, 09:35) maqu

@maqu Lieber Herr bzw. Frau "Ich brauche das kostenlose Rundumkindermädchen, weil unfähig bin meine Aufgabe klar und einfach darzustellen und lieber dümmlich rumdiskutiere",
ich habe meine Kommentare nicht gelöscht, sie wurden zensiert. Auch dieser Kommentar wird mit Sicherheit der Zensur anheimfallen.

(28 Feb '22, 10:33) cis

@cis Ich werde ziemlich alle Kommentare als off-topic löschen, die TeX&LaTeX nicht betreffen. Ich warte gern, bis man sich ausgesprochen hat, gelesen hat, danach ist es nicht mehr nötig hier zu stehen. In dem Sinne habe ich ein paar Kommentare von Dir (und Antworten darauf von @maqu) schonmal aufgeräumt. Dabei auch Deinen letzten Kommentar - wir hatten uns gerade konstruktiv abschließend unterhalten und dann kommst Du und eskalierst wieder. Scheint, da schließt sich der Kreis. Das ist übrigens Moderation eines Streits, mit Vergleich zur Zensur brauchst Du den Zensurbegriff nicht zu entwerten.

(28 Feb '22, 11:24) stefan ♦♦

@stefan ♦♦ Ja, schon gut. Lass stecken. Ich sag Dir aber ganz ehrlich, dass das -meiner Erinnerung nach- bezeichnend für diesen Laden ist und ständig vorkam oder -kommt. Ich bin eigentlich nur kurz vorbei, in der Hoffnung auf einen Schach-LaTeX-Enthusiasten, was es nur selten gibt. Und wenn man schon da ist, kann man auch die ein oder andere gute pgfplots-Aufgabe lösen.

(28 Feb '22, 11:36) cis

richtig so, vielen Dank @stefan♦♦ man sollte sich hier fachlich über TeX unterhalten ... ich würde @Ijon Tichy demütig darum bitten seine Antwort erneut reinzustellen ... nicht für mich (ich habe die Antwort auch in meinem Mail-Postfach), sondern für die Leser die davon vllt auch später noch profitieren ... ansonsten würde ich meine Frage in einem weiteren Nachtrag ergänzen und damit ist die Frage dann abgeschlossen ... ich persönlich habe jetzt nich nur etwas bzgl. tikzmath gelernt sondern auch off-topic Kommentare in Zukunft hier im Forum zu ignorieren und weiteren Ärger zu vermeiden

(28 Feb '22, 12:15) maqu

@Ijon Tichy Sowas kommt auch in anderen Foren und auf Mailing-Listen immer mal wieder vor, dass man sich gereizt in die Haare kriegt. Auf LaTeX.org tatsächlich weniger. Meine Theorie: da ist es international, Hilfesuchende sind meist bescheidene Non-native Speaker, auch Ratgeber konzentrieren sich aufs Technische und es passiert weniger Prosa, weniger Konfliktanlässe. In deutschsprachigen Foren/Mailinglisten wird mehr nebenbei kommentiert, treten Leute härter auf, eskaliert blitzschnell. Muss nicht typisch deutsch sein, sondern weil man unter Muttersprachlern schreibt, kann ich mir vorstellen.

(28 Feb '22, 13:41) stefan ♦♦
Ergebnis 5 von 25 show 20 more comments

Hier ist ein Vorschlag für die Erstellung der n-Ecke mit der shapes.geometric Bibliothek:

\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage[shortlabels]{enumitem}
\usepackage{geometry}
\geometry{a4paper, margin=15mm, right=20mm, headsep=10mm, footskip=10mm}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\tikzset{
  topline/.style={baseline={([yshift=#1]current bounding box.north)}},
  topline/.default={-\ht\strutbox},
  nEck/.style={regular polygon, regular polygon sides=#1, polygonsize, draw,every nEck},
  every nEck/.style={},
  polygonsize/.style={minimum width=4cm},
  polygonfill/.style={gray, fill opacity=0.5},
}

\newcommand*{\nEck}[2][]{% Syntax \nEck[<tikz optionen>]{<anzahl ecken>}
  \begin{tikzpicture}
    \node[nEck=#2,#1](n){};
    \draw foreach \i in {1,...,#2}{(n.center) -- (n.corner \i)};
  \end{tikzpicture}%
}

\begin{document}
\begin{multicols}{4}
  \begin{enumerate}[(a)]
    \tikzset{every picture/.style={topline,font=\footnotesize},every nEck/.style={scale=.75}}
    \item \nEck{8}
    \item \nEck{7}
    \item \nEck{12}
    \item \nEck{17}
    %% oder noch kürzer: 
    % \foreach \e in {8,7,12,17}{\item \nEck{\e}}
  \end{enumerate}
\end{multicols}
\end{document}

Das teilweise Färben der n-Ecke lässt sich beispielsweise mit der Option path picture erledigen.

Beispiel:

\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage[shortlabels]{enumitem}
\usepackage{geometry}
\geometry{a4paper, margin=15mm, right=20mm, headsep=10mm, footskip=10mm}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\tikzset{
  topline/.style={baseline={([yshift=#1]current bounding box.north)}},
  topline/.default={-\ht\strutbox},
  nEck/.style={regular polygon, regular polygon sides=#1, polygonsize, draw,every nEck},
  every nEck/.style={},
  polygonsize/.style={minimum width=4cm},
  polygonfill/.style={gray, fill opacity=0.5},
}

\newcommand*{\nEckBruch}[3][]{% Syntax \nEckBruch[<tikz optionen>]{<zähler>}{<nenner>}
  \begin{tikzpicture}
    \node[nEck=#3,
      path picture={\fill[polygonfill](n.center) foreach[parse=true] \i in {1,...,#2+1}{--(n.corner \i)}--cycle;},
      #1]
      (n){};
    \draw foreach \i in {1,...,#3}{(n.center) -- (n.corner \i)};
  \end{tikzpicture}%
}

\begin{document}
\begin{multicols}{4}
  \begin{enumerate}[(a)]
    \tikzset{every picture/.style={topline,font=\footnotesize},every nEck/.style={scale=.75}}
      \item \nEckBruch{4}{8}
      \item \nEckBruch{5}{7}
      \item \nEckBruch{8}{12}
      \item \nEckBruch{12}{17}
      %% oder noch kürzer:
      %\foreach \z/\n in {4/8,5/7,8/12,12/17}{\item \nEckBruch{\z}{\n}}
  \end{enumerate}
\end{multicols}
\end{document}

Und noch eine Version für das zweite Beispiel aus der Frage:

\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage[shortlabels]{enumitem}
\usepackage{geometry}
\geometry{a4paper, margin=15mm, right=20mm, headsep=10mm, footskip=10mm}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\tikzset{
  topline/.style={baseline={([yshift=#1]current bounding box.north)}},
  topline/.default={-\ht\strutbox},
  nEck/.style={regular polygon, regular polygon sides=#1, polygonsize, draw,every nEck},
  every nEck/.style={},
  polygonsize/.style={minimum width=4cm},
  polygonfill/.style={gray, fill opacity=0.5},
}

\newcommand*{\nEck}[3][]{% Syntax \nEck[<tikz optionen>]{<anzahl ecken>}{<label>}
  \begin{tikzpicture}
    \node[nEck=#2,#1](n){};
    \draw foreach \i in {1,...,#2}{(n.center) -- (n.corner \i)};
    \node[below] at (n.south){#3};
  \end{tikzpicture}%
}

\newcommand*{\nEckQuestion}[4][]{% Syntax \nEckQuestion[<tikz optionen>]{<anzahl ecken>}{<zähler>}{<nenner>}
  \nEck[#1]{#2}{$\dfrac{#3}{#4}=\qLine$}%
}
\newcommand*{\qLine}[1][2cm]{\ensuremath{\underline{\underset{}{\hspace{2cm}}}}}

\newcommand*{\nEckAnswer}[3][]{% Syntax \nEckAnswer[<tikz optionen>]{<zähler>}{<nenner>}
  \nEck[#1,path picture={\fill[polygonfill](n.center) foreach[parse=true] \i in {1,...,#2+1}{--(n.corner \i)}--cycle;}]
    {#3}{$\dfrac{#2}{#3}$}%
}

\begin{document}

Erweitere bzw. kürze den Bruch geeignet und male dann die entsprechenden Bruchanteile aus.
\begin{multicols}{4}
  \begin{enumerate}[(a)]
    \tikzset{every picture/.style={topline,font=\footnotesize},every nEck/.style={scale=.75}}
    \item \nEckQuestion{8}{1}{2}
    \item \nEckQuestion{7}{25}{35}
    \item \nEckQuestion{12}{2}{3}
    \item \nEckQuestion{17}{36}{51}
    %% oder noch kürzer:
    %\foreach \e/\z/\n in {8/1/2,7/25/35,12/2/3,17/36/51}{\item \nEckQuestion{\e}{\z}{\n}}
  \end{enumerate}
\end{multicols}

Lösungen:
\begin{multicols}{4}
  \begin{enumerate}[(a)]
    \tikzset{every picture/.style={topline,font=\footnotesize},every nEck/.style={scale=.75}}
    \item \nEckAnswer{4}{8}
    \item \nEckAnswer{5}{7}
    \item \nEckAnswer{8}{12}
    \item \nEckAnswer{12}{17}
    %% oder noch kürzer
    %\foreach \z/\n in {4/8,5/7,8/12,12/17}{\item \nEckAnswer{\z}{\n}}
  \end{enumerate}
\end{multicols}
\end{document}
Permanenter link

beantwortet 28 Feb '22, 21:25

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

@esdd wow vielen Dank für deine ausführliche Antwort ... unfassbar was man mit der Shakes.geometry-Bibliothek mit regular polynom alles machen kann ... genau so wie du im letzten Beispiel die Kommandos definiert hast hatte ich mir das vorgestellt, das macht die Präambel zwar um einiges Länger, aber ich das aber alles in einer newcommands.tex-Datei outsource fällt das gar nicht auf und mein Dokument wird deutlich kürzer ... vielen Dank! ... ich bin noch dabei den einzelnen Code zu verstehen, wenn sich noch fragen ergeben schreibe ich nochmal ^^

(01 Mär '22, 10:02) maqu

Ich muss das jetzt so hart sagen, aber @huibub hat natürlich absolut recht: Bei einer Integerdivision von 360/17 kommt 21 heraus. Damit bei \forarch \angle in {21,42,...360} wird \angle so oft um 21 vergrößert, bis das Ergebnis > 360 ist. Sobald es größer ist, wird die Schleife nicht mehr ausgeführt.

Wie jeder Erstklässler ausrechnen kann, bekommt man also bei einem 17-Eck die Werte 21, 42, 63, 84, 105, 126, 147, 168, 189, 210, 231, 252, 273, 294, 315, 336, 357. Der nächste Wert wäre 378 und damit größer als 360. Es fehlen also am Ende 3°. Damit ist klar, dass eine Integerdivision ebensowenig taugt, wie ein Zähler für den Winkel von 360/Anzahl der Ecken.

In der Tat wird das ganze einfacher, wenn man die Schleife nicht über die Winkel, sondern über die Eckennummern laufen lässt. Und in der Tat verwendete man dann für die Berechnung besser keine Zähler, sondern direkt pgfmath oder gleich die TikZ-Library math. Diese kennt die sehr komfortable Anweisung \tikzmath. Bei selbiger können wir auch direkt reelle Zahlen mit dem Schlüsselwort real definieren (was im gezeigten Beispiel zwar nicht notwendig wäre, aber es erscheint mir sinnvoll, sich an saubere Deklarationen zu gewöhnen). Damit bekommt man beispielsweise:

\documentclass[margin=5pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{math}

\newcommand{\nEck}[3]{%
   \begin{tikzpicture}[#3]
     \foreach \eck in {1,2,...,#1} {%
        \tikzmath{%
            real \startangle, \endangle;
            \startangle=(\eck-1)*360/#1;
            \endangle=\eck*360/#1;
        }%
        \draw ($(0,0) + cos(\startangle)*(#2,0) + sin(\startangle)*(0,#2)$) -- ($(0,0) + cos(\endangle)*(#2,0) +sin(\endangle)*(0,#2)$);
     }%
   \end{tikzpicture}
}

\begin{document}
   \nEck{8}{2}{rotate=22.5}
   \hspace{1cm}
   \nEck{17}{2}{}

   \hspace{1cm}
   \begin{tikzpicture}[rotate=22.5]
     \foreach \angle in {45,90,...,360} {
         \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +45)*(2,0) +sin(\angle +45)*(0,2)$);
     }
   \end{tikzpicture}
   \hspace{1cm}
   \begin{tikzpicture}[rotate=22.5]
     \foreach \i in {0,45,...,135}{
        \fill[gray, opacity=0.5] (0,0) -- ($(0,0) + cos(\i)*(2,0) + sin(\i)*(0,2)$) -- ($(0,0) + cos(\i +45)*(2,0) +sin(\i +45)*(0,2)$) -- cycle;
     }
     \foreach \angle in {45,90,...,360} {
        \draw (0,0) -- ($(0,0) + cos(\angle)*(2,0) + sin(\angle)*(0,2)$) -- ($(0,0) + cos(\angle +45)*(2,0) +sin(\angle +45)*(0,2)$);
     }
   \end{tikzpicture}
\end{document}

Wenn wir schon bei sauberen Deklarationen sind, sei auf »Was sollen die Kommentar-Zeichen (%) am Ende der Zeilen?« hingewiesen. Zwar tut TikZ sein Bestes, falsche Leerzeichen automatisch zu eliminieren, aber das hat seine Grenzen und es lohnt sich, sich von Anfang an anzugewöhnen, unerwünschte Leerzeichen durch Zeilenenden konsequent auszukommentieren.

Permanenter link

beantwortet 27 Feb '22, 13:15

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

@Ijon Tichy zunächst möchte ich mich für eine Antwort bedanken, genau das was ich gesucht habe mit tikzmath! Das mit den Kommentarzeichen versuche ich mir anzunehmen, obwohl ich auch ohne die zu setzen bisher keine Probleme hatte ... weiterhin möchte ich aber trotzdem nochmal daran erinnern freundlich zu bleiben, ich möchte nicht als Erstklässler bezeichnet werden wenn ich eine Frage stelle und ich brauche auch kein Kindermädchen wie @cis ... trotzdem danke für deine Antwort

(27 Feb '22, 14:25) maqu
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×16
×13
×7
×5

gestellte Frage: 26 Feb '22, 15:55

Frage wurde gesehen: 2,665 Mal

zuletzt geändert: 01 Mär '22, 10:02