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 '18, 17:26

cis's gravatar image

cis
9.4k23234435
Akzeptiert-Rate: 29%


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 10 Apr '18, 00:34

Community's gravatar image

Community
11
Akzeptiert-Rate: 56%

bearbeitet 11 Apr '18, 00:32

Gel%C3%B6scht's gravatar image

Gelöscht
(ausgesetzt)

Wow, sehr gut!

(10 Apr '18, 23:56) cis
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:

×681
×12

gestellte Frage: 15 Mär '18, 17:26

Frage wurde gesehen: 1,866 Mal

zuletzt geändert: 11 Apr '18, 00:32