J'expérimente actuellement avec le rendu d'un ensemble Mandelbrot et je me suis rapidement rendu compte qu'il serait utile de ne pas avoir à recalculer le nombre d'itérations maximum pour chaque rendu ... d'un autre côté c'est beaucoup de données à suivre. Il me semble (basé sur mon expérience limitée avec RDMSes) qu'une base de données relationnelle n'est probablement pas la voie à suivre parce que je ne veux pas que la performance soit affectée pendant que l'ensemble de données devient plus grand. Cela ressemble presque à la situation idéale pour une table de hachage, mais je n'en ai jamais utilisé auparavant et je n'arrive pas à comprendre comment utiliser ou gérer un des langages du serveur web existant (Python/PHP/whatever).Quelle pourrait être la meilleure méthode de stockage des valeurs Mandelbrot dans une base de données?
Pour être un peu plus explicite: les valeurs importantes à stocker sont:
- La partie réelle originale d'un numéro sur le plan complexe
- La partie imaginaire d'origine d'un certain nombre sur le plan complexe
- le nombre d'itérations maximum
- le nombre de itérations achevéesn avant itérations max est atteint ou jusqu'à ce que le point va à l'infini
- La partie réelle finale d'un numéro sur le plan complexe après n itérations
- La partie imaginaire finale d'un numéro sur le plan complexe après n itérations
à tout moment, étant donné la partie réelle originale, le partie imaginaire originale, et le nombre maximum d'itérations, je voudrais être en mesure d'obtenir un ensemble de résultats avec les parties finales réelles et imaginaires.
Alors, qu'en pensez-vous? Est-ce qu'une table de hachage est le chemin à parcourir? Le problème est-il trop complexe pour de simples structures de données mortelles?
Toute aide serait grandement appréciée. Merci d'avance!
Modifier
Je vais exposer sur le problème un peu à la demande de type de julienaubert.
Le but que j'ai est de permettre à un utilisateur de zoomer sur un ensemble Mandelbrot sans le délai de calcul (même si c'est par des zooms prédéfinis). Je veux aussi pouvoir le faire dans un navigateur qui demande constamment au serveur un nouveau tableau de données donnant les nouvelles coordonnées x et y ainsi que la hauteur et la largeur à visualiser sur le plan complexe. Cependant, comme le calcul de la valeur de la couleur du pixel peut être fait beaucoup plus rapidement (avec max_iter, real_final et imag_final), et aussi parce que ce serait sympa de permettre à l'utilisateur d'ajuster les paramètres de couleur, je vais envoyer le navigateur les variables énumérées dans mon message et laissez le navigateur de l'utilisateur calculer la couleur.
Jetez un oeil à ceci:
Si vous jetez un oeil à la fonction drawMandelbrot(), vous pouvez voir que les boucles de points stockent les valeurs importantes dans une variable appelée ensemble de données. Cette variable est ensuite utilisée dans la fonction drawMandelbrotFromData() où elle exécute les calculs restants nécessaires pour déterminer la couleur de chaque pixel.
Si vous cliquez sur "cleardabrot", le canevas est remplacé par un rectangle blanc. Si vous cliquez sur "refilldabrot", il exécute à nouveau la fonction drawMandelbrotFromData() ... ceci est fait pour vous montrer à quelle vitesse il peut réellement rendre l'ensemble si seulement il n'avait pas à effectuer les calculs itératifs douloureux. Donc le but ultime ici est de pouvoir calculer ces valeurs avec une précision arbitraire, afin qu'un utilisateur puisse zoomer à n'importe quel niveau de l'ensemble, demander au serveur de déterminer s'il y a des données pour ces points précis (ou, de préférence, des points près de ces points précis ... bien que je ne sois pas sûr de la façon dont cela pourrait être fait sans effectuer une requête de gamme de quelque sorte), puis cracher l'information sur une base pixel par pixel. Par exemple ...
- Un utilisateur utilise un canevas 300x300. Il effectue un zoom sur un point où le coin supérieur gauche est
x = .000001
ety = .0000231
. - Sa largeur choisie et de la hauteur dans ce cadre est
w = .00045
eth = .00045
Il enverrait ces numéros hors du serveur et de recevoir, à son tour, un tableau avec 300 * 300 index (un représentant de chaque point), chacun contenant les informations requises pour déterminer la couleur de chaque pixel sur sa toile. Ma question ici est ... quelle est la meilleure façon de stocker des données Mandelbrot précalculées de telle sorte qu'un utilisateur peut entrer des valeurs x, y, w et h arbitraires et de retirer rapidement les valeurs des points sur le plan complexe dans ce gamme.
Merci pour la réponse, julienaubert! J'ai ajouté une énorme quantité de nouvelles informations qui, je l'espère, vous permettront de conceptualiser un peu mieux ce que j'essaie de réaliser. Je continuerai à écrire jusqu'à ce que mes mots s'écoulent à l'infini (pour ainsi dire) si cela vous aide! – treeface
@julienaubert Merci encore, julienaubert. Je suppose que vous avez raison au sujet de l'impraticabilité de ce plan initial. Je suppose que ce que je prévois vraiment faire est de permettre aux utilisateurs de faire des zooms pré-rendus pour donner aux gens une bonne idée de ce que l'élément canvas peut faire en termes de rendu. Je vais peut-être également le faire via une connexion Web Sockets persistante pour des taux de transfert maximum. Je vous ai déjà donné les points pour cette réponse, mais si vous avez d'autres idées, j'aimerais les entendre. Merci encore! – treeface
pourquoi ne pas les laisser peindre dans la toile, et collaborer :) – user348466