[pstricks] psRandom - Abstand zum clipping Objekt

Tabellen und Grafiken erstellen und anordnen


mushroom20
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Di 13. Dez 2016, 17:14

[pstricks] psRandom - Abstand zum clipping Objekt

Beitrag von mushroom20 »

Hallo,

ich möchte ein bestimmte Anzahl von Punkten bzw. Kreisen in einer Ellipse zufällig angeordnet haben. Dazu habe ich einen Blick auf den Befehl \psRandom aus dem Paket pstricks-add geworfen mit folgendem Ergebnis
\documentclass[a4paper]{scrbook}

\usepackage[ngerman]{babel}
\usepackage{pstricks-add}

\begin{document}
	\begin{pspicture}(4,4)
		\definecolor{orange}{cmyk}{0,0.61,0.87,0.001}
		\psgrid[gridcolor=orange, gridwidth=0.5pt,subgridwidth=0.1pt, subgridcolor=orange,subgriddiv=10]
		\psRandom[dotsize=0.5mm, randomPoints=500](1.9,1)(2.9,2){%
		\psellipse[linestyle=none](2.5,1.5)(0.5,0.3)}
	\end{pspicture}
\end{document}
Dabei stört mich, daß einige Punkt am Rand des Clipping-Objekts durch dieses abgeschnitten werden, da \psRandom die Punkte ja zufällig in einem rechteckigen Objekt verteilt. Gibt es eine Möglichkeit einen gewissen Abstand zum Rand des Clipping-Objektes zu definieren, so daß alle Punkte vollständig und nicht abgeschnitten gezeichnet werden?

Grüße
Markus

Ich habe das Problem auch in http://latex-community.org/forum/viewto ... 45&t=28819 in Englisch gestellt.

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2525
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

Hallo Markus,

willkommen im Forum!

Exzellentes Minimalbeispiel, und cross-post zur Info verlinkt, sehr gut! So will ich auch antworten, obwohl ich mich mit PSTricks nicht so sehr auskenne, eher TikZ bevorzuge. Daher auch mal eine TikZ-Lösung, mit pgfplots, die sich aber auch mit PSTricks verwenden lässt, da das auch plotten kann. Hier geht es mir auch nur um das Grundprinzip.

Statt purem Zufall, wo es dicke Häufungen und große Lücken geben kann, könnte man auch in x-Richtung gleich verteilt vorgehen und in y-Richtung zufällig variieren. Und zwar so, dass es innerhalb der Ellipse bleibt, also etwa die Ellipsen-Funktion mit einem Random-Wert zwischen -1 und 1 multiplizieren. Und ein bisschen was abziehen, damit es nicht auf dem Rand landet.
\documentclass[tikz, border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\pgfmathsetseed{5}
\begin{document}
\begin{tikzpicture}
  \begin{axis} [
      hide axis,
      axis equal
    ]
    \addplot [only marks, samples=120, domain=-3.9:3.9]
      ({ x },{rand * (sqrt( 2^2 * (1 - \x^2/(4^2) ) - 0.4)} );
    \draw (0,0) ellipse [x radius=4, y radius=2];
  \end{axis}
\end{tikzpicture}
\end{document}
Bild

Natürlich kann man auf die gleiche Weise einfach in einer Schleife auch den x-Wert zufällig berechnen. Kann ich bei Interesse gern zeigen.

Stefan
Dateianhänge
random-circles.png
random-circles.png (17.33 KiB) 2339 mal betrachtet

mushroom20
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Di 13. Dez 2016, 17:14

Beitrag von mushroom20 »

Hallo Stefan,

vielen Dank für die Anregung mit der Ellipsengleichung. Ich habe es mal versucht auf mein Problem in pstricks umzusetzen:
\documentclass[a4paper]{scrbook}

\usepackage[ngerman]{babel}
\usepackage{pstricks-add}

\begin{document}
	\begin{pspicture}(4,4)
		\definecolor{orange}{cmyk}{0,0.61,0.87,0.001}
		\psgrid[gridcolor=orange, gridwidth=0.5pt,subgridwidth=0.1pt, subgridcolor=orange,subgriddiv=10]
		%\psRandom[dotsize=0.5mm, randomPoints=500](1.9,1)(2.9,2){%
		%\psellipse[linestyle=dotted](2.5,1.5)(0.5,0.3)}
		\rput(2.5,1.5){
			%Ellipsengleichung: y^2 = b^2(1-x^2/a^2) -> y^2 = 0.3^2(1-x^2/0.5^2)
			\psplot[plotstyle=dots, plotpoints=10]{-0.5}{0.5}{1 x 2 exp 0.5 2 exp div sub 0.3 2 exp mul sqrt}
			\psplot[plotstyle=dots, plotpoints=10, linecolor=blue, dotstyle=triangle]{-0.5}{0.5}{1 x 2 exp 0.5 2 exp div sub 0.3 2 exp mul sqrt rand mul}
			\psellipse(0,0)(0.5,0.3)
		}
	\end{pspicture}
\end{document}
Ich schaffe es aber nicht, ein äquivalentes Ergebnis zu erhalten. Folgende Parameter habe ich geändert:
a = 0.5 (alt: 4)
b = 0.3 (alt: 2)
Die Subtraktion von 0.4 weggelassen.

Die scharzen Punkte liegen (klarerweise) auf der Ellipse. Irgendwie scheint mir rand Funktion zum Vergleich (blau Punkte) hier nicht richtig umgesetzt zu sein. Verstehe nicht, wo hier das Problem ist.[/code]
Dateianhänge
minimal.pdf
(5.63 KiB) 274-mal heruntergeladen

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

\documentclass[pstricks]{standalone}
    \usepackage{pst-plot}
\begin{document}
     
    \begin{pspicture}[showgrid](-4.3,-2.3)(4,2.2)
    \psplot[plotstyle=dots,algebraic,plotpoints=200]{-3.9}{3.9}{Rand*(sqrt(4-x^2/4)-0.1)}
    \psplot[plotstyle=dots,algebraic,plotpoints=200]{-3.9}{3.9}{Rand*(-sqrt(4-x^2/4)+0.1)}
    \psellipse(0,0)(4,2)
    \end{pspicture}
\end{document}
Bild
Dateianhänge
Bildschirmfoto vom 2017-01-19 17-45-12.png
Bildschirmfoto vom 2017-01-19 17-45-12.png (38.71 KiB) 2538 mal betrachtet

mushroom20
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Di 13. Dez 2016, 17:14

Beitrag von mushroom20 »

Vielen Dank CrazyHorse,

hatte mich eine Weile nicht um das Problem weiter gekümmert, da ich mit anderen Dingen voll ausgelastet bin. Dank deines Beitrages jetzt nochmal in Angriff genommen und adaptiert, funktioniert einwandfrei.

Antworten