Probleme beim Zufalls-Punkte erzeugen [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von heinz » 06.01.2019 19:00:47

Hallo nochmal,

erstmal vielen Dank an alle fuer das rege Interesse an diesem Problem.

Zu meiner Schande muss ich gestehen, dass ich mit vielen der Mathe-Lastigen Kommentare nicht viel anfangen kann.

Aber ich hab mal weitergesucht und habe schliesslich das PGM mal in SDL ausprobiert.
Und siehe da, kein Kreuz...
NoPaste-Eintrag40575

Code: Alles auswählen

c++ z2z.cc -o z2z -I/usr/include/SDL -lSDL_gfx -lSDL -Wall
(Die haeufigkeit zur Mitte hin bekomme ich geloest und werd sie an/abschaltbar machen. Sieht ja auch nett aus...)

Die urspruengliche Aufgabe des Programms war, zufallswerte fuer Objekte in POV-Dateien einzusetzen.
Es scheint das irgendwie POVRAY fuer dieses seltsame Kreuz verantwortlich ist.
Obwohl ich nicht verstehe warum dem so ist.
Die Werte die in die POV-Datei eingetragen wurden sehen fuer mich korrekt aus.
NoPaste-Eintrag40574

Ich werde auf jeden Fall weiter experimentieren und falls ich auf eine Loesung stosse mich wieder melden.

Dankbare Gruesse,
heinz

Benutzeravatar
MSfree
Beiträge: 10759
Registriert: 25.09.2007 19:59:30

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von MSfree » 06.01.2019 19:33:27

heinz hat geschrieben: ↑ zum Beitrag ↑
06.01.2019 19:00:47
Es scheint das irgendwie POVRAY fuer dieses seltsame Kreuz verantwortlich ist.
Obwohl ich nicht verstehe warum dem so ist.
Die Werte die in die POV-Datei eingetragen wurden sehen fuer mich korrekt aus.
NoPaste-Eintrag40574
Nein, wenn ich die Punkte, die du nach nopaste kopiert hast, mit meinem Testprogramm auftrage, kommt das raus:
2001

Das Kreuz ist also in den Daten vorhanden. In der Folge muß natürlich auch povray ein Kreuz anzeigen.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von heinz » 06.01.2019 20:58:54

Hallo MSfree,
MSfree hat geschrieben: ↑ zum Beitrag ↑
06.01.2019 19:33:27
Nein, wenn ich die Punkte, die du nach nopaste kopiert hast, mit meinem Testprogramm auftrage, kommt das raus:
Das Kreuz ist also in den Daten vorhanden. In der Folge muß natürlich auch povray ein Kreuz anzeigen.
Danke fuers ausprobieren!

Ich kapiere es nicht...
Habe es nochmal direkt in Pov, mit den Pov-Bordmitteln versucht und da ist das Kreuz auch drin...
NoPaste-Eintrag40576
Die rand()-Funktion von POV verwendet Werte von 0.0 - 1.0 also kein Modulo notwendig...

Gruss heinz

Edit:
Habe auch gerade mal (pi/180) weggelassen:

Code: Alles auswählen

translate <sin(W)*(-200+400*rand(Z1)),cos(W)*(-200+400*rand(Z1)),0>
Immernoch ein Kreuz...

Benutzeravatar
MSfree
Beiträge: 10759
Registriert: 25.09.2007 19:59:30

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von MSfree » 06.01.2019 21:34:11

Mit povray kenn ich mich zu wenig aus, um deinen Code aus dem Stegreif auf Logikfehler untersuchen zu könne. Mir fällt allerdings auf, daß du mit

Code: Alles auswählen

#declare Z1=seed(0);
etwas initialisierst. "seed" deutet für mich auf den Startwert des Zufallszahlengenerators. Wenn man den immer mit dem selben Wert (hier Null) initialisiert, bekommt man auch immer die selbe Zufallszahlenfolge.

Es ist denkbar, daß mit seed(0) das Kreuz besonders auffällig ist, mit anderen seeds aber nicht.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von heinz » 06.01.2019 21:54:54

MSfree hat geschrieben: ↑ zum Beitrag ↑
06.01.2019 21:34:11
Es ist denkbar, daß mit seed(0) das Kreuz besonders auffällig ist, mit anderen seeds aber nicht.
Das ist es leider auch nicht...

Ich habe mir Deinen Code NoPaste-Eintrag40569 nochmal genauer angesehen.
Den einzigen Unterschied den ich erkennen kann ist die Art, wie Du die "Dinger" zeichnest.
Welchen Zweck hat Deine Funktion void DrawDots? Wozu skalierst Du da was...
Wenn Du die Koordinaten in x(i),y(i) direckt "Zeichnen" wuerdest, wuede da das gleiche Bild herauskommen? Also ohne Kreuz?

Gruss heinz

Benutzeravatar
MSfree
Beiträge: 10759
Registriert: 25.09.2007 19:59:30

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von MSfree » 06.01.2019 22:12:20

heinz hat geschrieben: ↑ zum Beitrag ↑
06.01.2019 21:54:54
Das ist es leider auch nicht...
Schade. :wink:
Welchen Zweck hat Deine Funktion void DrawDots? Wozu skalierst Du da was...
Die Funktion malt Punkte und sie ist für den Allgemeinfall ausgelegt.

Der "buffer" ist ein Array, bei dem jedes Pixel des Bildes einem "char" entspricht. Dieses Feld kann beliebig groß sein, also eine beliebige Breite und Höhe haben. (OK, beliebig im Sinne von: "muß noch ins RAM passen").

Die Punktkoordinaten in x und y können ebenfalls eine beliebiege Ausdehnung haben

Also muß vorher die Ausdehnung der Punktmenge bestimmt werden und die Punktkoordinaten so skaliert werden, daß sie in den "buffer" hineinpassen.

Ich weiß, das hätte ich mir für deinen Spezialfall auch sparen können, die Funktionen stammen aber aus meiner eigenen Funktionssammlung und die habe ich einfach recycelt.
Wenn Du die Koordinaten in x(i),y(i) direckt "Zeichnen" wuerdest, wuede da das gleiche Bild herauskommen? Also ohne Kreuz?
Die Skalierung, die sich in meinem Fall ergibt,ist 1.0, denn die Punkte haben einen Wertebereich von -200 bis +200 und die Zeichenfläche ist 400 x 400 Pixel. Wie gesagt, die Skalierung ist in diesem Fall unnötig, aber für den Allgemeinfall ausgelegt.

Der "gemalte" "buffer" wird dann mit der Funktion write_JPEG_file direkt als Bilddatei im JPEG-Format rausgeschrieben.

Kreuze bekomme ich mit meinem Programm allerdings nicht, egal ob ich die Zufallswerte mit Modulus oder mit MyRandom erzeuge.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von heinz » 06.01.2019 22:15:20

Oh verdammt...
Ich habe das Problem gefunden!

Ich habe den Radius nicht einmal berechnet und dann fuer sin und cos gemeinsam benutzt, sondern es so gemacht.
(Ich hatte vor auf diese Art auch einfach Ellipsen zu erstellen...)
for(int z=0 ; z<10000 ; z++)
{
float winkel=MyRandom(360.0);
float x = sin( winkel * (Pi / 180.0) ) * MyRandom(200.0);
float y = cos( winkel * (Pi / 180.0) ) * MyRandom(200.0);
}

Sorry, dass ich durch meine Dummheit Eure Zeit verschwendet habe... :oops:

Gruss heinz

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen [gelöst] (eigene Dummheit)

Beitrag von heinz » 06.01.2019 22:50:55

Hallo MSfree,

Danke nochmal fuer Deine ausfuehrliche Erklaerung und Deine Geduld...

Gruss heinz

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von hikaru » 07.01.2019 10:36:28

heinz hat geschrieben: ↑ zum Beitrag ↑
06.01.2019 22:15:20
Ich habe den Radius nicht einmal berechnet und dann fuer sin und cos gemeinsam benutzt, sondern es so gemacht.
(Ich hatte vor auf diese Art auch einfach Ellipsen zu erstellen...)
for(int z=0 ; z<10000 ; z++)
{
float winkel=MyRandom(360.0);
float x = sin( winkel * (Pi / 180.0) ) * MyRandom(200.0);
float y = cos( winkel * (Pi / 180.0) ) * MyRandom(200.0);
}
Ich verstehe noch nicht, warum das zu der Kreuzbildung führt. Wenn man zwei verschiedene Zufallszahlen für den Radius in x- und y-Richtung wählt, liegt der Punkt zwar auf einer Ellipse statt auf einem Kreis, aber gemittelt über 10000 Punkte würde ich trotzdem eine gleichmäßige Verteilung* erwarten.

*) über alle Winkel, nicht über den Radius

Benutzeravatar
Lohengrin
Beiträge: 3227
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Probleme beim Zufalls-Punkte erzeugen

Beitrag von Lohengrin » 07.01.2019 11:19:13

hikaru hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 10:36:28
Ich verstehe noch nicht, warum das zu der Kreuzbildung führt. Wenn man zwei verschiedene Zufallszahlen für den Radius in x- und y-Richtung wählt, liegt der Punkt zwar auf einer Ellipse statt auf einem Kreis, aber gemittelt über 10000 Punkte würde ich trotzdem eine gleichmäßige Verteilung* erwarten.
Zuerst kommt der Winkel. Daraus entsteht ein Punkt auf dem Kreis mit Radius 200, und das gleichverteilt. Beachte nun das Rechteck, das den Ursprung und diesen Punkt gegenüber hat. In dieses Rechteck wird ein Punkt gesetzt, und das gleichverteilt..
Das Ganze geschieht 10000 mal.

Die y-Achse und die x-Achse sind immer dabei. Je näher am Ursprung desto häufiger wird getroffen.
Harry, hol schon mal das Rasiermesser!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Probleme beim Zufalls-Punkte erzeugen [gelöst] (eigene Dummheit)

Beitrag von hikaru » 07.01.2019 11:59:36

@Lohengrin:
Danke! Das war verständlich.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen [gelöst] (eigene Dummheit)

Beitrag von heinz » 07.01.2019 23:18:54

hikaru hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 11:59:36
@Lohengrin:
Danke! Das war verständlich.
Fuer mich leider nicht...

Lassen wir mal die haeufung der Punkte in der Mitte ausser acht.
Wie muesste denn die Formel aussehen um fuer x, y und z verschiedene Radien angeben zu koennen, ohne das ein Kreuz entsteht?

Ich habe weiterexperimentiert (allerdings im Moment nur unter POV) und die Formeln abgeaendert:
https://de.wikipedia.org/wiki/Ellipsoid

Code: Alles auswählen

Pseudocode:

 1  while ( Count < 10000 )
 2  {
 3    Wxy=rand()%360;
 4    Wz=rand()%360;

 5    Rx=rand()%400-200;
 6    Ry=rand()%200-100;
 7    Rz=rand()%100-50;

 8    X = sin( Wz * (pi/180) ) * cos( Wxy * (pi/180) ) * Rx ;
 9    Y = sin( Wz * (pi/180) ) * sin( Wxy * (pi/180) ) * Ry ;
10    Z = cos( Wz * (pi/180) ) * Rz ;

11    Count++;
12  }
Mit diesem "Konstrukt" bekomme ich wieder ein Kreuz.
2004

Ersetze ich in Zeile 9 >Ry< durch >Rx< (also beides mal identischer Radius) ist kein Kreuz zu sehen.
2005

Ersetze ich Zeile 9 durch:

Code: Alles auswählen

 9    Y = ( ( sin( Wz * (pi/180) ) * sin( Wxy * (pi/180) ) ) / 2 ) * Rx ;
sieht es gut aus.
2006

Ersetze ich Zeile 9 durch:

Code: Alles auswählen

 9    Y = ( ( sin( Wz * (pi/180) ) * sin( Wxy * (pi/180) ) ) / ( Rx / Ry ) ) * Rx ;
entsteht wieder ein Kreuz...

Ich habe als Jugendlicher nie verstanden, wofuer man Mathe mal gebrauchen koennte.
Heute weis ich es...

Ich waere sehr dankbar fuer etwas Nachhilfe in dieser Sache...

Gruss heinz

PS.
Die Bilder sind kleine Animationen die aber leider nicht direkt als solche angezeigt werden.
Wenn man die Bilder anklickt und dann nochmals anklickt, werden sie korrekt angezeigt...

Benutzeravatar
Lohengrin
Beiträge: 3227
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Probleme beim Zufalls-Punkte erzeugen [gelöst] (eigene Dummheit)

Beitrag von Lohengrin » 08.01.2019 07:18:58

heinz hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 23:18:54
Lassen wir mal die haeufung der Punkte in der Mitte ausser acht.
Wie muesste denn die Formel aussehen um fuer x, y und z verschiedene Radien angeben zu koennen, ohne das ein Kreuz entsteht?
Du musst präzise formulieren, was du haben willst. Dann hast du auch schon die Lösung gefunden.

Du schreibst gleichverteilt aber sagst nicht genau, was du darunter verstehst.
Wenn du "auf gleiche Fläche gleich viele Punkte" meinst, ist die Häufung der Punkte in der Mitte schon ein Problem.

Was du gebaut hast, sieht am Anfang wie "auf gleiche Winkelabschnitte gleich viele Punkte" aus. Aber das machst du dann wieder kaputt, indem du den Punkt nicht dahin setzt, wo er den vorher ausgesuchten Winkel hätte.
Zum Winkel w gehört die Strecke von (0,0) nach (200*cos(w) , 200*sin(w)). Zwischen der x-Achse und dieser Strecke ist der Winkel w. Auf diese Strecke musst du den Punkt setzen, also eine Zufallszahl z zwischen 0 und 1, und dann x=z*200*cos(w) und y=z*200*sin(w).
Du hast aber zwei Zufallszahlen z0 und z1 gebaut, und dann x=z0*200*cos(w) und y=z1*200*cos(w) genommen. Das wird dann ein Punkt im Rechteck, wo die Diagonale die Strecke von eben ist. Bei einem Winkel zwischen 0 und 5 landet der Punkt irgendwo nahe der rechten x-Achse. Und bei einem Winkel zwischen 85 und 90 landet der Punkt irgendwo nahe der oberen y-Achse. Bei einem Winkel zwischen 40 und 50 landet er irgendwo im Rechteck, das fast ein Quadrat ist, also genauso häufig an einer Achse wie am anderen Ende des Rechtecks oder in der Mitte davon. Deshalb bekommst du das Kreuz.

Das Einfachste ist mMn Montecarlo. Du nimmst solange zwei Zufallszahlen z0 und z1 zwischen 0 und 1, bis z0^2+z1^2 < 1, dann rechnest du x=200*z0 und y=200*z1. Beim Kreis schmeißt du nur ein gutes Fünftel der Paare von Zufallszahlen weg.
Ellipsoid geht genauso. Da wiederholst du, bis du (z0/a)^2+(z1/b)^2+(z2/c)^2 < 1 hast.

Montecarlo macht man da, wo man früher integrieren musste. Das funktioniert nicht nur da, wo man das Integral nicht anders lösen kann. Das ist die Kanone, mit der man jeden Spatz trifft. Ein paar Millionen mal drauf geschossen und ausgezählt, ist heute eine Frage von Sekunden.
Harry, hol schon mal das Rasiermesser!

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme beim Zufalls-Punkte erzeugen [fast gelöst] (eigene Dummheit)

Beitrag von reox » 08.01.2019 10:48:33

Ich hab auch ein wenig gebraucht um das zu verstehen aber ich denke ich habs jetzt auch verstanden.

Nimm mal an du generierst nicht zufällige Winkel sondern nimmst 360 Winkel nacheinander, also für jedes Grad berechnest du die Zufallspunkte.
Dann spannst du im Endeffekt pro Winkel ein Rechteck auf, welches zwischen (0,0) und (cos(phi), sin(phi)) liegt.
In diesem Rechteck generierst du einen Punkt (x, y) wobei jede Koordinate zufällig ist. dH du erzeugst eigentlich zufällige Punkte innerhalb des Rechtecks, pro Winkel.
Wenn du dir jetzt vorstellst, dass du jedes mal so ein Rechteck erzeugst und dann einen Winkel weiter gehst, gibt es Punkte die von vielen Rechtecken bedeckt sind und welche mit wenigen. Entlang der Koordinatenachsen sind es eben mehr, daher siehst du dieses Kreuz.

2007

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen [fast gelöst] (eigene Dummheit)

Beitrag von heinz » 08.01.2019 21:03:54

Vielen Dank nochmals fuer die Erklaerungen und vor allem fuer Eure Geduld!

Werde vor dem WE aber nicht mehr dazu kommen es umzusetzen...

Ich melde mich wieder...

Dankbare Gruesse heinz

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen [fast gelöst] (eigene Dummheit)

Beitrag von heinz » 10.01.2019 19:39:29

Hallo,

es hat mir einfach keine Ruhe gelassen...

Mein derzeitiger Stand ist:

Code: Alles auswählen

int radX=2000;
int radY=1000;
int radZ=500;
double rad_faktorY=(double)radX/(double)radY;
double rad_faktorZ=(double)radX/(double)radZ;

while(count < 10000)
{
	double winkel=(double)(rand()%36000000)/100000.0;
	double winkelZ=(double)(rand()%36000000)/100000.0;
	double radius=rand()%radX;

	double XX=sin(winkelZ*(Pi/180.0)) * cos(winkel*(Pi/180.0)) * radius;
	double YY=( ( sin(winkelZ * (Pi/180.0)) * sin(winkel * (Pi/180.0)) ) / rad_faktorY ) * radius;
	double ZZ=( cos(winkelZ * (Pi/180.0)) / rad_faktorZ ) * radius;
}

Das Ergebnis sieht in der x/y-Achse jetzt gut aus
2013
aber nun habe ich das Problem auf der z-Achse...
2014

Werde das Projekt wohl vorerst aufgeben.
Meine Mathekenntnisse sind einfach nicht ausreichend...

Vielen Dank Euch allen fuer Eure Unterstuetzung.

Gruss heinz

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von reox » 11.01.2019 08:56:27

Kann es sein, dass das nur ein Artefakt ist, weil du die Achsen unterschiedlich skalierst?

Ansonsten schaut die Variante 3 Zufallszahlen: 2 Winkel + Radius gut aus.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von heinz » 11.01.2019 16:01:30

Hallo reox,
reox hat geschrieben: ↑ zum Beitrag ↑
11.01.2019 08:56:27
Kann es sein, dass das nur ein Artefakt ist, weil du die Achsen unterschiedlich skalierst?
leider nicht.

Ich habe fuer die letzten Bilder

Code: Alles auswählen

int radX=2000;
int radY=2000;
int radZ=2000;
verwendet, weil man es dann besser erkennt. (Habe vergessen es dazu zu schreiben...)
Es ist egal welche Werte ich fuer x,y und z verwende, in der z-Achse ist eine starke haeufung bei nahe 0.

Gruss heinz

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von reox » 11.01.2019 16:49:02

Mhh interessant, also ich sehe dieses Phänomen auch:
2015 2016

Generiert mit:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

N = 10000

r = 1

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

theta = np.pi * np.random.rand(N)
phi = 2 * np.pi * np.random.rand(N)
radius = r * np.random.rand(N)

x = np.sin(theta) * np.cos(phi) * radius;
y = np.sin(theta) * np.sin(phi) * radius;
z = np.cos(theta) * radius

ax.scatter(x, y, z)
plt.show()
Eine Frage wäre jetzt: Wie kann man zB ein Histogramm erzeugen aus den Koordinaten um zu schauen ob die Verteilung passt?

Also es schaut so aus, als ob die Verteilung an den Polen größer ist. Nur warum? Offenbar erzeugt die Verteilung von phi und radius das erwartete Bild. Nur theta scheint nicht das zu tun was wir erwarten.

Edit: Theta darf nur werte zwischen [0, pi] haben. Ändert aber auch nichts am Bild.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von heinz » 11.01.2019 17:53:15

reox hat geschrieben: ↑ zum Beitrag ↑
11.01.2019 16:49:02
Eine Frage wäre jetzt: Wie kann man zB ein Histogramm erzeugen aus den Koordinaten um zu schauen ob die Verteilung passt?
Also wenn ich die Z-Koordinaten aus der erzeugten POV-Datei mal nach der Haeufigkeit aufliste, erkennt man sehr gut
wie sie in der naehe von 0 zunimmt.
Habe die Nachkommastellen mal weggelassen und dann die Haeufigkeit der Werte ermittelt.

Code: Alles auswählen

grep '^translate' ./zufall.pov |cut -f3 -d','|tr -d '>'|cut -f1 -d'.'|sort -g|uniq -c >./z-h.txt
NoPaste-Eintrag40584
Erste Spalte=Haeufigkeit
Zweite Spalte=Z-Werte

Meintest Du sowas?

Gruss heinz

[Edit:]
Sorry, das war Quatsch.
Das zeigt nur die Anhaeufung um die Mitte.

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von reox » 11.01.2019 19:38:18

also was man schon sieht, ist ja dass x und y jeweils von 3 zufallszahlen abhängt aber z nur von zweien.
Und wenn man aus der Z Richtung drauf schaut, schauts ja gut aus.
Aber mir leuchtet das nicht ein warum das einen unterschied machen sollte...

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von smutbert » 11.01.2019 20:56:43

hab das einmal in r nachgestellt und im Histogramm ist der Unterschied deutlich zu sehen. Zum Nachdenken wieso bin ich noch nicht gekommen...

Bild

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von reox » 11.01.2019 21:01:41

smutbert hat geschrieben: ↑ zum Beitrag ↑
11.01.2019 20:56:43
hab das einmal in r nachgestellt und im Histogramm ist der Unterschied deutlich zu sehen. Zum Nachdenken wieso bin ich noch nicht gekommen...

Bild
Ok, 3 histogramme (dichteschätzer) sind besser als einer ;)
Gibt es eigentlich eine Möglichkeit Kreis oder Kugelkoordinaten (oder sagen wir n-dimensionale koordinaten) in einer einzigen Zahl zusammenzufassen? Gibt es da eine Ordnung die zB Koordinaten in Rationale Zahlen umbaut?

Benutzeravatar
Lohengrin
Beiträge: 3227
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von Lohengrin » 15.01.2019 01:18:05

reox hat geschrieben: ↑ zum Beitrag ↑
11.01.2019 16:49:02

Code: Alles auswählen

theta = np.pi * np.random.rand(N)
phi = 2 * np.pi * np.random.rand(N)
radius = r * np.random.rand(N)

x = np.sin(theta) * np.cos(phi) * radius;
y = np.sin(theta) * np.sin(phi) * radius;
z = np.cos(theta) * radius
Also es schaut so aus, als ob die Verteilung an den Polen größer ist. Nur warum? Offenbar erzeugt die Verteilung von phi und radius das erwartete Bild. Nur theta scheint nicht das zu tun was wir erwarten.
Beachte die Fläche auf der Kugel zwischen dem theta-ten und dem (theta + epsilon)-ten Breitengrad!
Das hängt von theta ab. Je näher am Pol, desto kleiner diese Fläche.
Harry, hol schon mal das Rasiermesser!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Probleme beim Zufalls-Punkte erzeugen [aufgegeben]

Beitrag von smutbert » 15.01.2019 12:53:03

@heinz

Darf man zwischendurch einmal fragen wie die Verteilung aussehen soll?
Die größere Dichte in der Mitte ist gewünscht?
(Entschuldige, falls es schon im Thread steht, aber ich hab nichts gefunden.)

Antworten