Предполагая, что у вас уже есть набор данных, который вы хотите построить, и карта, на которую вы хотите его нанести, вы можете начать с создания карты интенсивности: сетки значений с плавающей запятой, которая пропорциональна в границах конечной карте (если карты достаточно малы, 1: 1, вероятно, хорошо). Инициализируйте весь массив к 0.
Затем вы проходите через каждую точку, которую хотите построить, отображаете ее в координатное пространство карты интенсивности (что обычно должно быть простой операцией масштабирования), а затем наносите «блик» на карту интенсивности с центром в этой позиции.
Базовый «всплеск» может просто состоять из увеличения интенсивности в точке всплеска плюс некоторый радиус на небольшую величину. Более сложные реализации могут считывать существующую интенсивность и использовать больший радиус спада, чем интенсивнее точка уже. Вы можете поэкспериментировать с блип-плоттером, чтобы найти реализацию, которая вам нравится.
Когда у вас есть карта интенсивности, вы можете использовать интенсивность в каждой отдельной точке в качестве одномерного просмотра цветового градиента, который позволит вам достичь желаемого визуального воздействия (именно так вы можете получить разноцветные результаты, которые чаще всего видели). Этот цветовой поиск следует выполнять при переносе карты интенсивности на конечный график (изменение масштаба, очевидно, необходимо для учета различий в размерах карты интенсивности по сравнению с конечным изображением).
Этого должно быть достаточно для базовой реализации, но есть место для оптимизации. Например, карта интенсивности не будет нормализована, поэтому вам может потребоваться перенормировать ее (возможно, медленно) или отслеживать максимальную интенсивность при построении каждого всплеска, чтобы можно было одновременно перенормировать индивидуальную интенсивность Вы делаете перекраску. Кроме того, возможно, что распределение ваших значений таково, что неэффективно хранение памяти для хранения всего координатного пространства карты, и вы можете использовать альтернативное решение, которое не предполагает предварительного выделения большого фрагмента памяти. это будет в основном пустым.
Если у вас есть достаточно данных заранее, чтобы запросить минимальную и максимальную интенсивности, которые вы ожидаете увидеть в наборе данных, вы можете вообще избежать перенормировки - в основном, если у вас есть какая-то карта между (X, Y, Z) и числом " попадания "нанесенных данных в тот момент - это то, что вы можете встроить в систему, которая собирает данные, что поможет вам оптимизировать часть отображения.
Поскольку карта интенсивности, по сути, представляет собой изображение в градациях серого, это действительно простой способ создать прототип системы такого типа, чтобы использовать растровое изображение для карты интенсивности и предпочитаемый вами API рисования (например, System.Drawing
в C #) для построения частично прозрачных кругов, чтобы создать карту интенсивности. Это не выглядит лучше, но его функционал.