как сгенерировать тепловую карту для группы точек в Objective-C - PullRequest
2 голосов
/ 22 ноября 2010

У меня проблема с выяснением того, как создать наложение тепловой карты, имеющее:
- набор точек и их соответствующий счетчик повторений
- максимальный счетчик повторений для одной точки
- минимальный счетчик повторений для одной точки

Если у вас есть примеры кода, я был бы признателен.

Редактировать
Мне нужно закончить UIImage, который показывает карту, скажем, цвета радуги (красный - самый горячий -> синий холодный)

У меня есть идея:
-создание изображения в оттенках серого
-отведите небольшие градиенты серой шкалы в каждой точке с некоторым альфа-эффектом (наложение одной и той же точки увеличит ее визуальную плотность)
-создайте копию изображения в градациях серого и назовите его heatmapImage
- для каждого пикселя в HeatmapImage проверьте шкалу серого и замените ее соответствующим цветом пикселя из массива теплового градиента.

Но не знаю, как поместить это в код.

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Чтобы согласиться с ответом @ Goz, вы можете создать массив объектов с именем HTPoint, которые помогут в создании сетки.

@interface HTPoint NSObject {
    int _density;
}

enum Range {
  MaxAccumulator = 100,
  MinAccumulator = -100
}

@property (int) x
@property (int) y
@property (int) density

-(id)initWithPoint:(CGPoint)pt andDensity:(int)d;

@end

Используйте его так же, как CGPoint для изображения. Переопределите установщик / получатель плотности.

@implementation HTPoint

- (int) density { return _density; }
- (void) setDensity: (int) density
{
  if (density < MaxAccumulator && density > MinAccumulator)
      _density = density;
}

// Do the same for decr
- (void) incr
{
   if (_density > MaxAccumulator && _density < MinAccumulator) return; // or throw an exception
   _density ++;
}

@end

Это должно помочь вам следить за самой сеткой. Используйте ответ @Goz для его отображения, но вместо добавления «1» просто добавьте плотность HTPoint.

1 голос
/ 22 ноября 2010

Ну, это относительно легко.

Разделите область на фиксированную сетку (например, 64x64).

Теперь просмотрите каждую точку и проверьте, в какую сетку она падает. Затем добавьте 1 к счетчику этой сетки. Теперь у вас есть карта плотности. Конвертируйте и рендерируйте как вам угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...