Supondo que você já tenha o conjunto de dados que deseja plotar e o mapa que deseja plotar, você pode começar criando um mapa de intensidade: uma grade de valores de ponto flutuante proporcional aos limites do mapa final (se os mapas são pequenos o suficiente, 1: 1 provavelmente é bom). Inicialize toda a matriz para 0.
Depois, você percorre cada ponto que deseja plotar, mapeie-o no espaço de coordenadas do mapa de intensidade (que normalmente deve ser uma operação simples de escala) e, em seguida, plote um "blip" no mapa de intensidade centralizado nessa posição.
Um "blip" básico pode consistir apenas em aumentar a intensidade no ponto de blip mais algum raio em uma pequena quantidade. Implementações mais complexas podem ler a intensidade existente e usar um raio de queda maior, mais intenso o ponto de blip já é. Você pode experimentar a plotadora de blips para encontrar uma implementação de que você goste.
Depois de ter um mapa de intensidade, você pode usar a intensidade em cada ponto individual como uma pesquisa 1D em um gradiente de cores, o que permitirá obter o impacto visual desejado (é assim que você pode obter os resultados multicoloridos que são mais comumente visto). Você deve fazer essa pesquisa de cores ao transferir o mapa de intensidade para seu gráfico final (redimensionar, obviamente, conforme necessário para levar em conta as diferenças de tamanho no mapa de intensidade versus a imagem final).
Isso deve ser suficiente para uma implementação básica, mas há espaço para otimização. Por exemplo, o mapa de intensidade não será normalizado, portanto, você pode precisar renormalizá-lo (provavelmente lento) ou acompanhar a intensidade máxima ao plotar cada sinal, para poder executar a renormalização de uma intensidade individual ao mesmo tempo. você está fazendo a recolorização. Além disso, é possível que a distribuição de seus valores seja tal que não seja eficiente em termos de memória armazenar todo o espaço de coordenadas do mapa, e convém usar uma solução alternativa que não envolva a pré-alocação de um grande pedaço de memória isso estará quase vazio.
Se você tiver dados suficientes previamente para consultar as intensidades mínimas e máximas que espera ver no conjunto de dados, poderá evitar a renormalização, basicamente se basicamente tiver algum mapa entre (X, Y, Z) e o número de " hits "dos dados plotados que ocorreram naquele momento - é algo que você pode incorporar ao sistema que coleta os dados, o que ajudará a otimizar a parte do mapeamento.
Como o mapa de intensidade é apenas, essencialmente, uma imagem em escala de cinza, é uma maneira muito fácil de criar um protótipo desse tipo de sistema para usar um bitmap para o mapa de intensidade e sua API de desenho preferida (por exemplo, System.Drawing
em C #) para plotar círculos parcialmente transparentes para produzir um mapa de intensidade. Não parece o melhor, mas é funcional.