Было несколько вопросов, очень близких к этой теме, но ни один из них не помог мне.
Я программировал библиотеку графиков, и мне нужен алгоритм для вертикального размещения меток без наложения.Я застрял на этом пару дней, и мне удалось преобразовать его в самую основную функцию:
Если дать серию позиций меток вдоль оси Y, скажем, 1 1 2 3 5 6 9
, иверхний и нижний пределы 10
и 0
соответственно, мне нужен способ разметки значений для вывода 1 2 3 4 5 6 9
333467
должен быть 234567
взвешенным, чтобы быть близким к оригиналукоординаты.
Это также должно работать в обратном направлении, если значения сгруппированы в верхнем конце шкалы, они должны быть распределены как можно больше (перед переполнением)
Я не смотрюдля окончательного ответа, но я хотел бы получить некоторую помощь о том, как подойти к этой проблеме.Я полностью застрял.
Последним ходом мысли было сканирование всех меток на предмет возможных столкновений и позиционирование их как одного большого блока, выравнивая по центру всех координат Y.Но это не будет работать, если есть несколько наборов коллизий.
РЕДАКТИРОВАТЬ: Чтобы поместить этот алгоритм в более широкий контекст, взгляните на эти две круговые диаграммы API Google Chart:
1) Этикетки с верхним расположением
2) Этикетки с нижним расположением
Эти этикетки почти упругие, они избегают столкновений, объединяясь и перемещая всю свою массу вцентр их массы.