Системные представления знаний в инвариантной структуре блочно-модульного содержания на примере темы «пространственные кривые». Совместное решение геометрических задач и задач визуализации с использованием компьютеров, страница 7

·  при построении графика, на котором отображен разрыв первого рода, происходит сбой работы программы, не приводящей к критическим последствиям (перезагрузка системы, потеря данных), но влекущем дальнейшее неудобство при работе с программным продуктом.

Причина первой проблемы заключалась в том, что графики окрашивались в фиксированное количество цветов равное восьми (цвета хранились в ограниченном массиве). Таким образом, мы столкнулись с проблемой переполнения массива данных при построении 9–го и более графиков, так как  для их визуализации программа обращалась за пределы ограниченного массива, это приводило к ошибке. Для решения данной проблемы была создана собственная цветовая палитра. В основу была положена стандартная цветовая схема RGB, содержащая 16 777 216 цвета (2563).

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

Подробней о том, как происходила генерация палитры методом квантования.

Представим куб с ребром 256, оси которого означают определенные цвета R,G,B и могут принимать значение от 0 до 255. Любая точка этого куба - цвет, а координаты точки – его параметры в схеме RGB (интенсивность каждого из составляющих цветов). Необходимо было разбить куб. При этом разбиваем куб на оптимальное количество кубиков, близкое к необходимому количеству цветов. Соответственно центры кубов (точнее их координаты) составили новую палитру.

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

Дальнейшая работа велась при использовании других графических библиотек. Ниже остановимся на одной из них.

Библиотека JFreeChart.

Преимущества данной библиотеки: качество графики выше, чем в библиотеке JSci; имеется возможность масштабирования изображения и сохранения графиков в формате png, и т.д. Главное преимущество – наличие различных типов графиков, это позволило расширить набор методов визуализации данных.

Осветим недостатки этой библиотеки, с которыми мы столкнулись в течение работы:

·  существующие ограничения при построении графиков с качественными атрибутами.

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

Рассмотрим другие доработки данной библиотеки.

Для визуализации нормального распределения (или других функций, которые приходится рассчитывать самому, а не использовать при построении готовые точки) нельзя пользоваться стандартным подходом построения графиков, а именно построение графика с фиксированным шагом. Необходимо рассчитывать шаг, для каждого из отображаемых графиков. Иначе возможна ситуация, когда импульс, соизмеримый с шагом, может пропасть с графика, а пологий и длинный сигнал займет большое время для расчетов и отображения графика.

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