App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Zufällige Punkte innerhalb einer Ellipse erzeugen
- Ersteller maxpayne80
- Erstellt am
maxpayne80
Admiral Special
- Mitglied seit
- 07.08.2003
- Beiträge
- 1.420
- Renomée
- 61
- Standort
- Wo der Hahn auf den Esel steht...
- Mein Laptop
- Acer Travelmate 4002 LMi
- Prozessor
- Core i5 750
- Mainboard
- Gigabyte GA-P55-UD3
- Kühlung
- EKL Alpenföhn Brocken @ Noctua NF-P12
- Speicher
- 2x4 GB Teamgroup DDR3-1333
- Grafikprozessor
- Sapphire HD 6950 2GB @ 1536 shader @ AC Accelero Extreme
- Display
- 24 Zoll NEC 24WMGX³
- HDD
- SSD Samsung 830 128GB + 2TB WD Green EARS
- Optisches Laufwerk
- Pioneer DVD+R Brenner
- Soundkarte
- Asus Xonar D1 7.1 PCI
- Gehäuse
- Antec P182 Gun Metal Black mit 3x Skythe Slipstream 120x120 800rpm + Scythe Kaze Q
- Netzteil
- Seasonic X-560
- Betriebssystem
- Windows 7 Professional
- Webbrowser
- Firefox mit div. Addons
Hi zusammen
Hat vielleicht jemand eine Idee für einen Algorithmus, der (pseudo-)zufällig Punkte innerhalb einer Ellipse (gegeben sind Mittelpunkt und die 2 Radien) verteilen kann?
Die Punkte (also auch der Mittelpunkt) haben jeweils eine X-, Y- und Z-Koordinate.
Die Verteilung selber muss nur 2-dimensional sein, also es soll quasi nur eine der Koordinaten variiert werden (am besten X).
Muss nich gerade in C++ sein (darin mache ich das), Pseudocode oder eine Seite im Internet würden mir auch schon sehr weiterhelfen.
Vielen Dank
max
Hat vielleicht jemand eine Idee für einen Algorithmus, der (pseudo-)zufällig Punkte innerhalb einer Ellipse (gegeben sind Mittelpunkt und die 2 Radien) verteilen kann?
Die Punkte (also auch der Mittelpunkt) haben jeweils eine X-, Y- und Z-Koordinate.
Die Verteilung selber muss nur 2-dimensional sein, also es soll quasi nur eine der Koordinaten variiert werden (am besten X).
Muss nich gerade in C++ sein (darin mache ich das), Pseudocode oder eine Seite im Internet würden mir auch schon sehr weiterhelfen.
Vielen Dank
max
Andromedar
Cadet
- Mitglied seit
- 21.03.2009
- Beiträge
- 12
- Renomée
- 0
Gibt es keine RND Funktion?
maxpayne80
Admiral Special
- Mitglied seit
- 07.08.2003
- Beiträge
- 1.420
- Renomée
- 61
- Standort
- Wo der Hahn auf den Esel steht...
- Mein Laptop
- Acer Travelmate 4002 LMi
- Prozessor
- Core i5 750
- Mainboard
- Gigabyte GA-P55-UD3
- Kühlung
- EKL Alpenföhn Brocken @ Noctua NF-P12
- Speicher
- 2x4 GB Teamgroup DDR3-1333
- Grafikprozessor
- Sapphire HD 6950 2GB @ 1536 shader @ AC Accelero Extreme
- Display
- 24 Zoll NEC 24WMGX³
- HDD
- SSD Samsung 830 128GB + 2TB WD Green EARS
- Optisches Laufwerk
- Pioneer DVD+R Brenner
- Soundkarte
- Asus Xonar D1 7.1 PCI
- Gehäuse
- Antec P182 Gun Metal Black mit 3x Skythe Slipstream 120x120 800rpm + Scythe Kaze Q
- Netzteil
- Seasonic X-560
- Betriebssystem
- Windows 7 Professional
- Webbrowser
- Firefox mit div. Addons
Gibt es keine RND Funktion?
Ja, aber das reicht nicht
Die Punkte sollen ja auf einer vorgegebenen Fläche liegen und nicht sonstwo verteilt.
Nachtschicht
Admiral Special
Zufallspunkte erzeugen und dann testen, ob sie innerhalb der Ellipse liegen, im Link ist eine entsprechende Formel:
http://www.klamm.de/forum/archive/index.php/t-6352.html
http://www.klamm.de/forum/archive/index.php/t-6352.html
maxpayne80
Admiral Special
- Mitglied seit
- 07.08.2003
- Beiträge
- 1.420
- Renomée
- 61
- Standort
- Wo der Hahn auf den Esel steht...
- Mein Laptop
- Acer Travelmate 4002 LMi
- Prozessor
- Core i5 750
- Mainboard
- Gigabyte GA-P55-UD3
- Kühlung
- EKL Alpenföhn Brocken @ Noctua NF-P12
- Speicher
- 2x4 GB Teamgroup DDR3-1333
- Grafikprozessor
- Sapphire HD 6950 2GB @ 1536 shader @ AC Accelero Extreme
- Display
- 24 Zoll NEC 24WMGX³
- HDD
- SSD Samsung 830 128GB + 2TB WD Green EARS
- Optisches Laufwerk
- Pioneer DVD+R Brenner
- Soundkarte
- Asus Xonar D1 7.1 PCI
- Gehäuse
- Antec P182 Gun Metal Black mit 3x Skythe Slipstream 120x120 800rpm + Scythe Kaze Q
- Netzteil
- Seasonic X-560
- Betriebssystem
- Windows 7 Professional
- Webbrowser
- Firefox mit div. Addons
Zufallspunkte erzeugen und dann testen, ob sie innerhalb der Ellipse liegen, im Link ist eine entsprechende Formel:
http://www.klamm.de/forum/archive/index.php/t-6352.html
Ok ich werde mir das morgen mal zu Gemüte führen, für heute bin ich matsche. Danke
Für nen Kreis habe ich mir das eben gebastelt, das ging einigermaßen.
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
Ok ich werde mir das morgen mal zu Gemüte führen, für heute bin ich matsche. Danke
Für nen Kreis habe ich mir das eben gebastelt, das ging einigermaßen.
dann haste doch schon 90% vom Ergebnis?
Die Definition einer Ellipse ist doch nur unwesentlich schwieriger als bei einem Kreis.
Es muss also nur die Abfrage angepasst werden.
Zuletzt bearbeitet:
maxpayne80
Admiral Special
- Mitglied seit
- 07.08.2003
- Beiträge
- 1.420
- Renomée
- 61
- Standort
- Wo der Hahn auf den Esel steht...
- Mein Laptop
- Acer Travelmate 4002 LMi
- Prozessor
- Core i5 750
- Mainboard
- Gigabyte GA-P55-UD3
- Kühlung
- EKL Alpenföhn Brocken @ Noctua NF-P12
- Speicher
- 2x4 GB Teamgroup DDR3-1333
- Grafikprozessor
- Sapphire HD 6950 2GB @ 1536 shader @ AC Accelero Extreme
- Display
- 24 Zoll NEC 24WMGX³
- HDD
- SSD Samsung 830 128GB + 2TB WD Green EARS
- Optisches Laufwerk
- Pioneer DVD+R Brenner
- Soundkarte
- Asus Xonar D1 7.1 PCI
- Gehäuse
- Antec P182 Gun Metal Black mit 3x Skythe Slipstream 120x120 800rpm + Scythe Kaze Q
- Netzteil
- Seasonic X-560
- Betriebssystem
- Windows 7 Professional
- Webbrowser
- Firefox mit div. Addons
dann haste doch schon 90% vom Ergebnis?
Die Definition einer Ellipse ist doch nur unwesentlich schwieriger als bei einem Kreis.
Es muss also nur die Abfrage angepasst werden.
Wenn ich dir meine Methode zur Kreiserzeugung zeige wirst du das anders sehen
Das ganze ist in etwas Größeres integriert, daher mögen die Namen / Datenstrukturen evtl. etwas verwirrend klingen (außerdem bin ich kein super erfahrener Coder ).
Folgendes gibt eine Referenz auf ein Objekt (Typ "Vec") mit 3 Werten für x, y, z zurück, welches Koordinaten auf eine "Scheibe" hat; centerPosition ist natürlich der Mittelpunkt des Kreises:
Code:
Vec &SphereDomain::getRandomPositionInDomain() const
{
Vec rand = randomVec();
//This lets the vector be within a 1.0 radius sphere
rand.normalize();
// "Scheibe" in x-z dimension
rand.xValue = centerPosition.xValue + rand.xValue * sphereRadius;
rand.zValue = centerPosition.zValue + rand.zValue * sphereRadius;
//Return a random position within this sphere
return rand;
}
Hier die Methode randomVec()
Code:
Vec randomVec()
{
return Vec((-(float)rand() / RAND_MAX) + ((float)rand() / RAND_MAX),(-(float)rand() / RAND_MAX) + ((float)rand() / RAND_MAX),(-(float)rand() / RAND_MAX) + ((float)rand() / RAND_MAX));
}
Und "normalize()":
Code:
void Vec::normalize()
{
float normfactor = 1.0f / sqrtf(xValue*xValue+yValue*yValue+zValue*zValue);
xValue *= normfactor;
yValue *= normfactor;
zValue *= normfactor;
}
Vielleicht ist dieser etwas "unkonventionelle" Ansatz verständlich, jedenfalls erzeugt das genau nen Kreis, ich wüsste aber nicht, wie ich das auf ne Ellipse umbauen sollte
Zuletzt bearbeitet:
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
wenn ich nicht wüsste was Du da programmieren wolltest, hätte ich es auch nie erkannt
meine Idee:
http://www.htlortwein-graz.ac.at/edu/ras/kegelschnitte/ellipse/ellipse.htm
und dann der Teil:
a 2 – b 2 = e 2
Heißt quasie 2 Werte per Random und den Dritten dann ausrechnen, damit es passt.
Es gibt aber AFAIK auch andere Definitionen für eine Ellipse, ist mir aber nun zu spät.
Edit:
Ohne jetzt alles zu verraten
Beim Kreis hätte ich es wie folgt gemacht:
Radius per Zufall bestimmen (zwischen 0 und dem Radius des Begrenzungskreises)
Winkel per Zufall bestimmen. (beliebig 0-360!)
Beides dann zu einem Punkt ausgehend vom Mittelpunkt zusammenfügen.
2 Zufallszahlen hast Du dann gebraucht.
Mit einer Ellipse verhält es sich ähnlich einfach, müsstest nur die Mehrinformationen einer Ellipse verarbeiten
meine Idee:
http://www.htlortwein-graz.ac.at/edu/ras/kegelschnitte/ellipse/ellipse.htm
und dann der Teil:
a 2 – b 2 = e 2
Heißt quasie 2 Werte per Random und den Dritten dann ausrechnen, damit es passt.
Es gibt aber AFAIK auch andere Definitionen für eine Ellipse, ist mir aber nun zu spät.
Edit:
Ohne jetzt alles zu verraten
Beim Kreis hätte ich es wie folgt gemacht:
Radius per Zufall bestimmen (zwischen 0 und dem Radius des Begrenzungskreises)
Winkel per Zufall bestimmen. (beliebig 0-360!)
Beides dann zu einem Punkt ausgehend vom Mittelpunkt zusammenfügen.
2 Zufallszahlen hast Du dann gebraucht.
Mit einer Ellipse verhält es sich ähnlich einfach, müsstest nur die Mehrinformationen einer Ellipse verarbeiten
Zuletzt bearbeitet:
maxpayne80
Admiral Special
- Mitglied seit
- 07.08.2003
- Beiträge
- 1.420
- Renomée
- 61
- Standort
- Wo der Hahn auf den Esel steht...
- Mein Laptop
- Acer Travelmate 4002 LMi
- Prozessor
- Core i5 750
- Mainboard
- Gigabyte GA-P55-UD3
- Kühlung
- EKL Alpenföhn Brocken @ Noctua NF-P12
- Speicher
- 2x4 GB Teamgroup DDR3-1333
- Grafikprozessor
- Sapphire HD 6950 2GB @ 1536 shader @ AC Accelero Extreme
- Display
- 24 Zoll NEC 24WMGX³
- HDD
- SSD Samsung 830 128GB + 2TB WD Green EARS
- Optisches Laufwerk
- Pioneer DVD+R Brenner
- Soundkarte
- Asus Xonar D1 7.1 PCI
- Gehäuse
- Antec P182 Gun Metal Black mit 3x Skythe Slipstream 120x120 800rpm + Scythe Kaze Q
- Netzteil
- Seasonic X-560
- Betriebssystem
- Windows 7 Professional
- Webbrowser
- Firefox mit div. Addons
Beim Kreis hätte ich es wie folgt gemacht:
Radius per Zufall bestimmen (zwischen 0 und dem Radius des Begrenzungskreises)
Winkel per Zufall bestimmen. (beliebig 0-360!)
Beides dann zu einem Punkt ausgehend vom Mittelpunkt zusammenfügen.
2 Zufallszahlen hast Du dann gebraucht.
Mit einer Ellipse verhält es sich ähnlich einfach, müsstest nur die Mehrinformationen einer Ellipse verarbeiten
Ah ok macht Sinn
Ich wollte mich nur um die Winkelberechnungen drücken, da ich ehrlich gesagt in Sachen Mathe ne ziemliche Niete bin
Hier auch noch eine Variante in keiner konkreten Programmiersprache:
Das Resultat sind zufällige Punkte innerhalb der Ellipse, allerdings sind sie nicht gleichverteilt sondern häufen sich bedingt durch die Sinus- und Cosinus-Funktion zu der senkrechten und waagerechten Mittellinie hin. Schau' es Dir mal an, das Ergebnis nett
Insbesondere interessant sind die Ergebnisse bei wachsenden einstelligen Maximalgrößen für den Zufallswert in der Variable "zufall" - also die Zufallszahlen von 0-1, 0-2, 0-3 usw.
Viel Spaß beim Ausprobieren!
Code:
foreach punkt
zufall = zufallszahl(0,10000) # je größer der Maximalwert desto besser
temp1 = sinus(potenz(zufall,2))
temp2 = cosinus(potenz(zufall,2))
xfactor = zufall(0, maxradiusx)
yfactor = zufall(0, maxradiusy)
x = temp1 * xfactor + mittelpunktx
y = temp2 * yfactor + mittelpunkty
zeichnepunkt(x,y)
Das Resultat sind zufällige Punkte innerhalb der Ellipse, allerdings sind sie nicht gleichverteilt sondern häufen sich bedingt durch die Sinus- und Cosinus-Funktion zu der senkrechten und waagerechten Mittellinie hin. Schau' es Dir mal an, das Ergebnis nett
Insbesondere interessant sind die Ergebnisse bei wachsenden einstelligen Maximalgrößen für den Zufallswert in der Variable "zufall" - also die Zufallszahlen von 0-1, 0-2, 0-3 usw.
Viel Spaß beim Ausprobieren!
Zuletzt bearbeitet:
flybyray
Vice Admiral Special
Also ich denke wenn man sich an Geometrische Algorithmen traut, dann sollte man Mathematik vor allem Analytische Geometrie beherrschen.
Für diese Probleme die hier beschrieben werden gibt es mit Sicherheit vorgefertigte Bibliotheken.
Ich verweise hier zu erst einmal auf Wikipedia ( conic section / Kegelschnitt ). Wie fast immer ist der deutsche Beitrag unzureichend und ich kann einfach nur den englischen empfehlen.
Letztendlich sollte einem die Gleichung
ins Auge fallen. Deren Parameter untersucht werden. Hieraus ergeben sich dann Fälle für Ellipsen ( Kreise sind spezialfälle ).
Damit gibt es also schon mal einen Ansatz wie man ein Funktion und nicht mehrere für verschiedene Fälle schreibt.
Bibliotheken verwenden häufig intern Matrizen für all die Funktionen und Tests auf geometrischen Objekten. Im Englischen Wikipedia gibt es hier noch eine extra Seite über die Darstellung und Behandlung von Matrizen für Kegelschnitte ( Matrix representation of conic sections ).
Einige der vorher genannten links sind nicht gerade optimal. Meist behandeln sie nur achsensysmetrische Ellipsen. Mit den Gleichungen der Analytischen Geometrie befasst man sich sofort mit allen Freiheitsgraden (A,B,C,D,E,F) wobei F meist nicht dazu gezählt wird.
Für diese Probleme die hier beschrieben werden gibt es mit Sicherheit vorgefertigte Bibliotheken.
Ich verweise hier zu erst einmal auf Wikipedia ( conic section / Kegelschnitt ). Wie fast immer ist der deutsche Beitrag unzureichend und ich kann einfach nur den englischen empfehlen.
Letztendlich sollte einem die Gleichung
Code:
Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0
Damit gibt es also schon mal einen Ansatz wie man ein Funktion und nicht mehrere für verschiedene Fälle schreibt.
Bibliotheken verwenden häufig intern Matrizen für all die Funktionen und Tests auf geometrischen Objekten. Im Englischen Wikipedia gibt es hier noch eine extra Seite über die Darstellung und Behandlung von Matrizen für Kegelschnitte ( Matrix representation of conic sections ).
Einige der vorher genannten links sind nicht gerade optimal. Meist behandeln sie nur achsensysmetrische Ellipsen. Mit den Gleichungen der Analytischen Geometrie befasst man sich sofort mit allen Freiheitsgraden (A,B,C,D,E,F) wobei F meist nicht dazu gezählt wird.
maxpayne80
Admiral Special
- Mitglied seit
- 07.08.2003
- Beiträge
- 1.420
- Renomée
- 61
- Standort
- Wo der Hahn auf den Esel steht...
- Mein Laptop
- Acer Travelmate 4002 LMi
- Prozessor
- Core i5 750
- Mainboard
- Gigabyte GA-P55-UD3
- Kühlung
- EKL Alpenföhn Brocken @ Noctua NF-P12
- Speicher
- 2x4 GB Teamgroup DDR3-1333
- Grafikprozessor
- Sapphire HD 6950 2GB @ 1536 shader @ AC Accelero Extreme
- Display
- 24 Zoll NEC 24WMGX³
- HDD
- SSD Samsung 830 128GB + 2TB WD Green EARS
- Optisches Laufwerk
- Pioneer DVD+R Brenner
- Soundkarte
- Asus Xonar D1 7.1 PCI
- Gehäuse
- Antec P182 Gun Metal Black mit 3x Skythe Slipstream 120x120 800rpm + Scythe Kaze Q
- Netzteil
- Seasonic X-560
- Betriebssystem
- Windows 7 Professional
- Webbrowser
- Firefox mit div. Addons
Hier auch noch eine Variante in keiner konkreten Programmiersprache:
Code:foreach punkt zufall = zufallszahl(0,10000) # je größer der Maximalwert desto besser temp1 = sinus(potenz(zufall,2)) temp2 = cosinus(potenz(zufall,2)) xfactor = zufall(0, maxradiusx) yfactor = zufall(0, maxradiusy) x = temp1 * xfactor + mittelpunktx y = temp2 * yfactor + mittelpunkty zeichnepunkt(x,y)
Das Resultat sind zufällige Punkte innerhalb der Ellipse, allerdings sind sie nicht gleichverteilt sondern häufen sich bedingt durch die Sinus- und Cosinus-Funktion zu der senkrechten und waagerechten Mittellinie hin. Schau' es Dir mal an, das Ergebnis nett
Insbesondere interessant sind die Ergebnisse bei wachsenden einstelligen Maximalgrößen für den Zufallswert in der Variable "zufall" - also die Zufallszahlen von 0-1, 0-2, 0-3 usw.
Viel Spaß beim Ausprobieren!
Ah danke, das hat mir tatsächlich gut geholfen denke ich. Nachdem ich meine Zufallsfunktion im Griff hatte kam dann das hier raus (1000 Punkte jeweils als Anfangspunkt einer Linie):
Die Ellipse soll die Radien 5.0f und 10.0f vom Mittelpunkt aus haben, das scheint noch nicht so ganz zu passen
// Edit
Meine nächste Aufgabe ist nun, pro "Tiefenebene" eine Triangulierung zwischen je einem Partikel pro Ebene und "Faser" durchzuführen, und sozusagen ein 2D-Mesh zu erzeugen. Hui ... spaßig
Zuletzt bearbeitet:
Ähnliche Themen
- Antworten
- 84
- Aufrufe
- 17K
- Antworten
- 0
- Aufrufe
- 53K