суббота, 17 июля 2010 г.

Об использовании возможностей платформы Eclipse из кода на Scheme


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

В поставку SchemeScript входит компилятор Scheme-кода в Java-байткод под названием Kawa. Данный компилятор позволяет как вызывать из Java-кода участки программы, написанные на Scheme, так и в Scheme-коде использовать Java-классы. Таким образом обеспечивается полная интероперабельность между Java и Scheme.



Разработчик SchemeScript - Dominique Boucher - пошел дальше и добавил в свой плагин возможность обращаться из Scheme-кода к классам, входящим в состав Eclipse, в частности, использовать SWT-контролы. Для тестирования добавлен специальный вид Kawa ScratchPad, на который можно добавлять разрабатываемый пользовательский интерфейс. Наличие специального вида для тестирования упрощает работу - ненужно собирать новый бандл, перезапускать Eclipse, достаточно просто выбрать из главного меню Scheme -> Select Interpreter -> Embedded Kawa и нажать комбинацию клавиш Ctrl-Shift-L, отправив тем самым ваш код на интерпретацию.

Давайте рассмотрим следующий пример: напишем программу, выводящую в вид Kawa ScratchPad множество Мандельброта.

Немножко теории. Рассмотрим последовательность комплексных чисел:

Zn+1 = Z2n + C       (1)

При некоторых значениях параметров Z0, C данная последовательность сходится, а при других - расходится. Множеством Мандельброта называют множество значений параметра C при которых последовательность (1) сходится. Изображают множество Мандельброта в виде совокупности точек на комплексной плоскости. Интересна она тем, что изображение данной совокупности точек представляет собою фрактал.

Как проверить, что при некотором заданном C последовательность (1) сходится? Можно предложить такую стратегию: вычислять значение какого-либо члена последовательности (1) (например, 20-го) от Z0 = 0 и C. Если модуль данного члена последовательности меньше 1.0, то последовательность (1) сходится и, соответственно, C принадлежит множеству Мандельброта.

Проще всего получить черно-белое множество Мандельброта. Стратегия его построения следующая: если точка принадлежит множеству, то она рисуется черным цветом, иначе - белым.



Интереснее выглядит множество в цвете. За основу назначения точке цвета можно взять количество итераций N, необходимых, чтобы проверить принадлежит она множеству или нет. Т.е. не проверять модуль именно 20-го члена последовательности (1), а проверять модули всех элементов от 1-го до 20-го включительно. Как только модуль превысил 1.0, считать, что последовательность (1) для данного значения C расходится. Число 20 в данном примере является максимальным числом итераций, будем обозначать его MaxIterations.

Исходя из числа итераций, назначается цвет точке. Например, в градациях серого, плавно увеличивая значение каждой компоненты RGB от 0 до 255 в зависимости от N (чем больше N, тем больше значение компоненты). Выглядеть такое множество будет следующим образом:



Другая стратегия: при изменении N от 0 до MaxIterations/2 цвет изменяется от черного до красного, при изменении же N от MaxIterations/2 + 1 до MaxIterations цвет изменяется от белого до черного. Выглядит данное множество Мандельброта так:



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

Код программы расположен на GitHub'е. В этом же репозитории приведены и другие примеры использования возможностей платформы Eclipse из кода на языке Scheme.

Понравилось сообщение - подпишитесь на блог или читайте меня в twitter

Комментариев нет:

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!