Ich möchte einen Zylinder zeichnen, in dem eine vorgegebene Anzahl, z.B. 100, Kugeln liegen, die zufällig platziert sind. In folgendem Code werden gerademal ca. 40 Kugeln angezeigt, weil viele überlappen. Der umfassende Zylinder ist nach Augenmaß platziert, bei entsprechenden Änderungen dürfte die Zeichnung ruiniert werden. Wie könnte ich das besser machen? Öffne in Overleaf
%\documentclass[]{article} \documentclass[border=5mm]{standalone} \usepackage{tikz} \usetikzlibrary{intersections} \usepackage{pgfplots} \usetikzlibrary{shapes} \begin{document} \begin{tikzpicture}[scale=2.0] %\shade[ball color=white] (0,0) circle (1mm); %\shade[ball color=brown] (0,0mm) circle (1ex); %\shade[ball color=black] (5mm,25mm) circle (1ex); \node [cylinder, draw, thick, fill=cyan, shape border rotate=90, yshift=25mm, xshift=4mm, minimum height=55mm, minimum width=11mm ] at (0mm,0mm) {}; \foreach \y in {0,...,25}{ \foreach \x in {1,...,4}{ \pgfmathsetmacro{\xRand}{random(0,4)} \pgfmathsetmacro{\yRand}{random(0,25)} \shade[ball color=red] (\xRand mm,\yRand mm) circle (0.5mm); }} \end{tikzpicture} \end{document} gefragt 15 Mär '18, 17:26 cis |
Wenn man 125 Spots hat und an 100 Stellen eine Kugel setzen mag, ist am Anfang die Wahrscheinlichkeit für eine Kugel 100/125 = 80%. Angenommen, man setzt dann eine Kugel, ist die Wahrscheinlichkeit, dass am nächsten Spot wieder eine Kugel kommt 99/124, also etwas unter 80%. Wenn man auf diese Weise vorgeht, ist klar, dass kein Spot zweifach belegt werden kann, und dass man am Ende wirklich 100 Kugeln losgeworden ist. D.h., man muss nur mitzählen und die Wahrscheinlichkeit unterwegs anpassen. Öffne in Overleaf
\documentclass[border=5mm]{standalone} \usepackage{tikz} \newcounter{Rest} \newcounter{Total} \usetikzlibrary{intersections} \usepackage{pgfplots} \usetikzlibrary{shapes} \xdef\Hor{5} %<- # horizontale Slots \xdef\Vert{25} %<- # vertikale Slots \begin{document} \begin{tikzpicture}[scale=4.0] \node [cylinder, draw, thick, fill=cyan, shape border rotate=90, yshift=52mm, xshift=-12mm, minimum height=110mm, minimum width=22mm ] at (0mm,0mm) {}; \pgfmathtruncatemacro{\tmp}{\Hor*\Vert} \setcounter{Total}{\tmp} \setcounter{Rest}{100}%<- es sollen 60 Kugeln werden \foreach \Y in {1,...,\Vert}{ \foreach \X in {1,...,\Hor}{ \pgfmathtruncatemacro{\Kugel}{ifthenelse(rnd<\theRest/\theTotal,1,0)} \ifnum\Kugel=1 \shade[ball color=red] (-\X mm,\Y mm) circle (0.5mm); % \node[font=\tiny] at (-\X mm,\Y mm) {\theRest}; %<- zum Ueberpruefen \addtocounter{Rest}{-1} \fi \addtocounter{Total}{-1} }} \end{tikzpicture} \end{document} Wow, sehr gut!
(10 Apr '18, 23:56)
cis
|
https://tex.stackexchange.com/questions/87497/tikz-distribute-evenly-and-randomly-circles