En supposant que vous disposez déjà de l'ensemble de données que vous souhaitez tracer et de la carte sur laquelle vous souhaitez tracer, vous pouvez commencer par créer une carte d'intensité: une grille de valeurs à virgule flottante proportionnelle aux limites de la carte finale (si les cartes sont assez petits, 1: 1 est probablement très bien). Initialisez le tableau entier à 0.
Ensuite, vous parcourez chaque point que vous souhaitez tracer, le mappez dans l'espace de coordonnées de la carte d'intensité (qui devrait normalement être une opération d'échelle simple), puis tracez un "blip" dans la carte d'intensité centrée à cette position.
Un "blip" de base pourrait simplement consister à augmenter légèrement l'intensité au point de blip plus un certain rayon. Des implémentations plus complexes pourraient lire l'intensité existante et utiliser un rayon de chute plus grand, plus le point de coupure est intense. Vous pouvez expérimenter avec le traceur de blip pour trouver une implémentation qui vous ressemble.
Une fois que vous avez une carte d'intensité, vous pouvez utiliser l'intensité à chaque point individuel comme une recherche 1D dans un dégradé de couleurs, ce qui vous permettra d'obtenir l'impact visuel souhaité (c'est ainsi que vous pouvez obtenir les résultats multicolores qui sont le plus souvent vu). Vous devez effectuer cette recherche de couleurs lorsque vous transférez la carte d'intensité vers votre tracé final (redimensionnement, évidemment, si nécessaire pour tenir compte des différences de taille dans la carte d'intensité par rapport à l'image finale).
Cela devrait suffire pour une implémentation de base, mais il y a place pour l'optimisation. Par exemple, la carte d'intensité ne sera pas normalisée, vous devrez donc peut-être la renormaliser (probablement lentement) ou garder une trace de l'intensité maximale lorsque vous tracez chaque blip, afin de pouvoir effectuer la renormalisation d'une intensité individuelle en même temps vous faites la recoloration. En outre, il est possible que la distribution de vos valeurs soit telle qu'il ne soit pas efficace en mémoire de stocker l'intégralité de l'espace de coordonnées de la carte, et vous souhaiterez peut-être utiliser une solution alternative qui n'implique pas de préallouer une grande partie de la mémoire ce sera presque vide.
Si vous avez suffisamment de données à l'avance pour interroger les intensités minimale et maximale que vous prévoyez de voir dans l'ensemble de données, vous pouvez éviter d'avoir à renormaliser du tout - en gros, si vous avez une carte entre (X, Y, Z) et le nombre de " hits "des données tracées qui se sont produites à ce moment - c'est quelque chose que vous pouvez intégrer dans le système qui recueille les données qui vous aidera à optimiser la partie de mappage.
Étant donné que la carte d'intensité est juste, essentiellement, une image en niveaux de gris, un moyen très simple de prototyper ce type de système pour utiliser une bitmap pour la carte d'intensité et votre API de dessin de choix (par exemple, System.Drawing
en C #) pour tracer des cercles partiellement transparents à produire une carte d'intensité. Il n'a pas l'air le meilleur, mais il est fonctionnel.