У меня есть список объектов (вероятно, не более 100), где у каждого объекта есть расстояние до всех других объектов. Это расстояние - просто добавленная абсолютная разница между всеми полями, которые разделяют эти объекты. Может быть несколько (одно) или много (десятки) полей, поэтому размерность расстояния не важна.
Я бы хотел отобразить эти точки на двухмерном графике так, чтобы объекты с небольшим расстоянием появлялись близко друг к другу. Я надеюсь, что это ясно покажет, сколько подгрупп есть во всем списке. Очевидно, что оси этого графа не имеют смысла (я даже не уверен, что «график» - правильное слово для использования).
Какой будет хороший алгоритм для преобразования сети расстояний в двухточечное распределение точек? В идеале я хотел бы, чтобы небольшое изменение в дистанционной сети привело к небольшому изменению графики, чтобы постепенный прогресс можно было рассматривать как плавное изменение во времени.
Я сделал небольшой пример того результата, который ищу:
Пример графика http://en.wiki.mcneel.com/content/upload/images/GraphExample.png
Любые идеи с благодарностью,
David
Edit:
На самом деле, похоже, это сработало. Я рассматриваю весь набор значений как двумерное облако частиц, строю обратные квадратные силы отталкивания между всеми частицами и линейные силы притяжения на основе обратного расстояния. Это не стабильный алгоритм, результат имеет тенденцию резко вращаться всякий раз, когда выполняется дополнительная итерация, но он, кажется, всегда дает хорошее разделение на визуальные кластеры:
альтернативный текст http://en.wiki.mcneel.com/content/upload/images/ParticleCloudSolution.png
Я могу опубликовать код C #, если кому-то интересно (его, к сожалению, довольно много)