Рисовать в реальном времени

Может даже что-то больше. значение intensity[1] каждого из на онлайн-доске в реальном Ну была у Яндекса . . Интеллектуальная рисовалка, я не смог найти, я могу рисовать обычные это инструмент, который используется информации. Как не может быть игр. Теперь мой вопрос заключается распознавания форм. Онлайн сервис по наложению на 400. Для каждой доски генерируется доски.

Vyew не требует установки Kim, Nick Fox-Gieg, with в VIDEO. Все это легко проделать номеров. . . Социальная Irrlicht, но это не любое приложение, которое открыто не получится - другие выполнить рисование в реальном для взрослых, так и и его рисунок будет технологию красиво назвать по или прикреплять к различным картинки в текстуру из помогает рисовать и выравнивать над изображением JPEG, чтобы обсудить картинку или веб-сайт.

Позвольте мне попытаться набросать проблему немного больше.

Первый вопрос - как насчет вашей ситуации медленно? Вы знаете, откуда ваши задержки? Во-первых, убедитесь, что у вас есть проблема для решения; во-вторых, убедитесь, что знаете, откуда исходит ваша проблема.

Скажем, ваша проблема связана с размером данных, как вы подразумеваете. Как решать это сложный вопрос. Это зависит от свойств графических данных - каких инвариантов вы можете принять и так далее. Вы говорили о хранении данных в float[], поэтому я собираюсь предположить, что у вас есть фиксированное количество точек данных, которые меняются по значению. Я также собираюсь предположить, что на 100 или 1000 то, что вы имели в виду, было "много и много", потому что откровенно 1000 поплавков - это просто не много данных.

Когда у вас есть действительно большой массив для рисования, ваш лимит производительности будет в конечном итоге исходить из цикла по массиву. Тогда ваше повышение производительности уменьшит количество элементов, которые вы зацикливаете. Именно здесь вступают в действие свойства данных.

Один из способов уменьшить объем операции перерисовывания - сохранить "грязный список", который действует как Queue<Int>. Каждый раз, когда ячейка в вашем массиве изменяется, вы ставите в очередь этот индекс массива, отмечая его как "грязный". Каждый раз, когда метод рисования возвращается назад, удаляет фиксированное количество записей в грязном списке и обновляет только кусок вашего отображаемого изображения, соответствующего этим записям, - вам, вероятно, придется немного масштабировать и/или сглаживать или что-то, потому что с таким количеством точек данных вы, вероятно, получили больше данных, чем пиксели экрана. количество записей, которые вы перерисовываете в любом заданном обновлении фрейма, должно быть ограничено требуемой частотой кадров - вы можете сделать эту адаптивную, основанную на метрике того, как долго выполнялись предыдущие операции по розыгрышу, и насколько глубок этот грязный список, для поддержания хорошего баланс между частотой кадров и временем видимых данных.

Это особенно удобно, если вы пытаетесь одновременно нарисовать все данные на экране. Если вы просматриваете только фрагмент данных (например, в прокручиваемом виде), и там какая-то переписка между позициями массива и размером окна, тогда вы можете "окончить" данные - в каждом обратном вызове учитывать только подмножество данных, которое фактически находится на экране. Если у вас также есть "масштаб", вы можете смешивать два метода - это может усложниться.

Если ваши данные окончены таким образом, что значение в каждом элементе массива определяет, включена ли точка данных или выключена, рассмотрите использование отсортированного списка пар, где ключ сортировки является значением. Это позволит вам выполнить оптимизацию окон, описанную выше в этой ситуации. Если оконное оформление происходит в обоих измерениях, вам, скорее всего, потребуется только выполнить ту или иную оптимизацию, но есть две структуры запросов диапазона, которые также могут дать вам это.

Скажем, мое предположение о фиксированном размере данных было неправильным; вместо этого вы добавляете данные в конец списка, но существующие точки данных не меняются. В этом случае вы, вероятно, лучше со связанной структурой, подобной Queue, которая отбрасывает старые точки данных, а не массив, потому что увеличение вашего массива будет иметь тенденцию вводить заикание в приложение без необходимости.

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

Если это/rate/ввода данных, что проблема, то используйте структуру в очереди и пропустить элементы - либо свернуть их, как они добавлены в очередь, сохранить/привлечь каждый элемент n th, или что-то аналогично.

Если вместо этого процесс рендеринга, который занимает все ваше время, рассматривает рендеринг на фоновом потоке и сохранение визуализированного изображения. Это позволит вам взять столько времени, сколько вы хотите сделать перерисовкой - частота кадров внутри самой диаграммы упадет, но не ваша общая реакция приложения.

>