Ich möchte einige Daten erzeugen, die die Koordinaten einer Wolke von Punkten darstellen, die einen n-Würfel von n Dimensionen darstellen. Diese Punkte sollten gleichmäßig über den gesamten n-Raum verteilt sein und sollten mit einem benutzerdefinierten Abstand zwischen ihnen generiert werden können. Diese Daten werden in einem Array gespeichert.C++ Wie man den Satz des kartesischen Produkts von n-dimensionalen Tupeln erzeugt
Antwort
Ich habe eine Implementierung von cartesian product using Boost.MPL gefunden.
Es gibt auch ein kartesisches Produkt in Boost, aber das ist eine Präprozessor-Anweisung, ich nehme an, dass es für Sie keinen Nutzen hat.
Prost das ist ein etwas nützliches Beispiel für mich zu lesen, obwohl es meine Frage nicht ganz vollständig beantwortet. – Ben
Um die Dinge einfach zu halten, hier ist ein Beispiel für einen gewöhnlichen Würfel, dh einen mit 3 Dimensionen. Lassen Sie es Seitenlänge 1 und nehmen Sie an, dass Sie Punkte in Abständen von 1/n haben wollen. (Dies führt zu einer gleichmäßigen rechteckigen Verteilung von Punkten, nicht ganz sicher, dass dies das ist, was Sie wollen).
nun einige Pseudo-Code:
for i=0;i<=n;i++ //NB i<=n because there will be n+1 points along each axis-parallel line
for j=0;j<=n;j++
for k=0;k<=n;k++
addPointAt(i/n,j/n,k/n) //float arithmetic required here
Beachten Sie, dass dies nicht der cartesianischen Produkt von etwas ist, aber scheint (ein Sonderfall) Kriterien zu erfüllen. Wenn Sie die Punkte anders verteilen möchten, passen Sie die Anfangs- und Endindizes der Schleife oder die Intervallgröße an.
Um dies auf eine beliebige höhere Dimension zu verallgemeinern, ist es einfach, weitere Schleifen hinzuzufügen.
Verallgemeinern auf jede höhere Dimension, die bis zur Laufzeit nicht bekannt ist, ist nur etwas schwieriger. Deklarieren Sie anstelle eines N-dimensionalen Arrays ein 1-D-Array mit der gleichen Anzahl an Elementen. Dann müssen Sie die Indexarithmetik explizit schreiben, anstatt sie vom Compiler schreiben zu lassen.
Ich erwarte, dass Sie mir jetzt sagen, dass dies nicht das ist, was Sie wollen! Wenn nicht, kannst du es klären.
Dies ist, was ich will, aber was ich jage ist eine allgemeine Lösung für diese, anstatt eine bestimmte. Dies ist auch, was ich jage. Ein Freund formulierte die Frage für mich neu. Es war schwierig für mich, dies zu erklären, da ich keinen Hintergrund in Geometrie jenseits von 3 Dimensionen habe. – Ben
@Ben: OK, also ist die allgemeine Lösung, dass Sie ein 1-D-Array erstellen, das eine "abgeflachte" Darstellung Ihres N-D-Arrays ist. –
Ich habe mich gefragt, wie man eine n-tiefe Rekursion implementiert, so dass ich einen generischen Weg habe, um die Koordinaten für alle n-Dimensionen zu erzeugen. Eine Funktion, die sich selbst nennt, war eine Art, an die ich dachte, aber das scheint unnötig und unordentlich. – Ben
Sie diese rekursiv tun können (Pseudo-Code):
Function Hypercube(int dimensions, int current, string partialCoords)
{
for i=0, i<=steps, i++
{
if(current==dimensions)
print partialCoords + ", " + i + ")/n";
else if current==0
Hypercube(dimensions, current+1, "("+i);
else
Hypercube(dimensions, current+1, partialCoords+", "+i);
}
}
Sie nennen es: Hypercube (n, 0, ""); Dadurch werden die Koordinaten aller Punkte gedruckt, aber Sie können sie auch in einer Struktur speichern.
- 1. Ändern Sie den Attributsatz des Magento-Produkts.
- 2. Regex-ähnliche Syntax oder CFG zum Generieren eines kartesischen Produkts von verketteten String-Variablen und Literalen
- 3. Ändern des Preises des konfigurierbaren Produkts
- 4. Wie man den NLTK-Satz-Tokenizer zwickt
- 5. Alle Attribute des Produkts exportieren
- 6. Wie update "inventory_level" des Produkts von SKU ID in BigCommerce?
- 7. Wie man Bilddatei mit C++ gnuplot erzeugt?
- 8. Erzeugen von Tupeln aus Tupeln
- 9. wie Listenelemente Tupeln innerhalb Liste von Tupeln
- 10. Pyro4: Wie man eine Liste von Tupeln mit Pyrolite in Java erzeugt?
- 11. Wie Bild des Produkts von Front-End in Magento
- 12. Wie man Permutationen erzeugt?
- 13. In MATLAB, wie man Zufallszahlen abhängig von den Daten erzeugt?
- 14. Wie man Javadoc von der Befehlszeile erzeugt
- 15. Wie man Methodensignatur erzeugt?
- 16. Echo Preis des Produkts in virtuemart Warenkorb
- 17. Echo Wert des Produkts benutzerdefinierte Attribut - WooCommerce
- 18. Zip-Listen von Tupeln
- 19. Ändern eines Tupel in einem Vektor von Tupeln C++
- 20. Wie man Daten von Normalverteilung erzeugt
- 21. Wie man Codebeispiele von einer Grammatik erzeugt?
- 22. Verwalten von Sammlungen von Tupeln in Objective-C
- 23. wie Kategorie Name des aktuellen Produkts (auf Produktdetailseite) in magento
- 24. Klassenrechteck mit raw_input von kartesischen Koordinaten?
- 25. Wie man `DOS/Unix` erzeugt Wie GUI
- 26. Wie man eine Gitarrennote erzeugt
- 27. C++ 0x: sind Tupel von Tupeln erlaubt?
- 28. Wie man freedraw line mit den freedrawing `s Daten erzeugt
- 29. Wie erzeugt man zufällige Farben in Matplotlib?
- 30. Artikel ID erhalten nach dem Hinzufügen des Produkts zum Warenkorb
ist das Hausaufgaben? – Cetra
nein das ist persönliches Interesse. – Ben