alt text

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, 12:26

cis's gravatar image

cis
7.3k13155247
Akzeptiert: 72%


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}

alt text

Permanenter link

beantwortet 09 Apr, 18:34

Murmeltier's gravatar image

Murmeltier
1.2k64

bearbeitet 10 Apr, 18:32

Wow, sehr gut!

(10 Apr, 17:56) cis
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×598
×11

Frage gestellt: 15 Mär, 12:26

Frage wurde angeschaut: 375 Mal

Zuletzt aktualisiert: 10 Apr, 18:32