Мне нужно отобразить график с тысячами узлов, чтобы пользователь мог прокручивать и увеличивать масштаб, чтобы просмотреть его. Узлы должны вести себя как безразмерные точки, а ребра - как одномерные. То есть, масштабирование, круги, представляющие узлы, перемещаются дальше друг от друга, но каждый из них остается одного размера, а линии, соединяющие их, становятся длиннее, но не более толстыми. При необходимости масштабирование должно быть «непрерывным» и «бесконечным».Построение большого количества точек/линий с увеличением
Какие API и алгоритмы используются для решения этой проблемы? (как, скажем, в приложениях САПР или ГИС)
Я не мог достичь приемлемой производительности с использованием GDI +. Моя реализация была, вероятно, наивной, но, тем не менее, я предполагаю, что мне нужно OpenGL или DirectX.
Спасибо за ваш ответ. Я рассмотрю только чертежи, которые видны на экране, но как насчет того, когда пользователь масштабируется? Думаю, я мог бы заменить близких соседей одной точкой, чтобы уменьшить количество очков. Есть ли установленный алгоритм для этого? Но все же тысяча очков легко могла быть сразу видна как умопостигаемый сюжет. Не будет ли заметной задержки отдать даже много эллипсов с GDI? – rgf
Алгоритм уровня детализации используется для уменьшения сложности вашей сцены при ее уменьшении. В вашем случае это может быть так же просто, как рендеринг каждой точки как одного пикселя вместо эллипса при увеличении. 1000 точек, безусловно, могут быть быстро реализованы с использованием GDI +. Если вы визуализируете только при смене сцены (например, пользователь увеличивает или уменьшает масштаб), это даже не проблема. Большинство приложений GDI + отображаются по запросу (т. Е. В событии Paint), а не в постоянном цикле, как в Direct3D. Если вам нужен постоянный рендеринг, возможно, WPF также может быть вариантом. – Ash