Скачиваний:
36
Добавлен:
15.02.2021
Размер:
804.3 Кб
Скачать

генераторы.Каквымоглизаметитьданныйфайлпредоставляеттакже

 

некоторыеполезныеоперациидляреводаизэкранныхкоординатсистему

 

координатвычисляемогофрактала.

 

 

Видыфракталов,скоторыминужнобудетработать,вычисляются

 

комплексномвивде

 

ключаютвсебяпросматыеематическиефункции,

 

которыевыполняютсямног, неоквыполнитсяратноопределенноеусловие.

 

ФункциядляфракталаМандельбротаимеетвид:

zn = zn-12 + c,гдевсезначения

— эток мплексныечисла,

z0 = 0с - определеннаяточк

афрак,которуюала

мыотображанаэкран.Вычислповтемдтехпорния,ряютсяпока

 

|z| > 2

даннойситуацииочканаходитсяневомножествеМандельброта),илипока

 

читерацийслодостигнетмаксимзначения, льногопример, 2000вэтом(

 

 

случаеделает

сяпредп,чтонаходитсяложениечкавнаборе).

 

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

этапенеобходреализоприведенныевышемоычислать. ния

СоздайтеподклассFractalGeименемMaвнемnвамeratordelbrot.

необудобходимоетолькоспечитьдваметода: getInitialRan

ge()и

numIterations().

 

 

getInitialRange (Rectangle2D.Double) - методпозволяетгенера ору

фракталовопределитьнаинтер«более»областькомплекснойснуюплоскости

 

дляконкфр.Обративниманиеетногоакталанато,чметодуокачестве

 

аргумперентадается

прямоугольныйобъ,и долженкттодизменитьполя

прямдляоугольтобпраженвачальнильногокадиапазонадляго

 

фрактала. Примерможноувидетьметоде(

 

 

FractalGeneratorВклассеMandelbrotэтот.recenterAndZoomRange()метод

.)

долженустаначаовить

льныйдиапазонв

(-2 - 1.5i) - (1 + 1.5i).Т.е.значенияx

ибудутравныy

-2и

-1соответствен.5 ,ашивысотаринабудут3вны. о

 

МетодnumIterations(double,реализуетитеративную double)

функциюдляфракталаМандельброКонстанту. максимальнымколи чеством

итерацийможнопределитьследующимобразом:

public static final int MAX_ITERATIONS = 2000;

Затемвысможессылатьсянаэпеуремввашейреализациинную.

Обративниманато,чутнетJavaоиеподходящеготипаданныхдля

комплексныхчисел,поэт

 

омунеобходимобудетреализитеративнуювать

функцию,используяотдельныепеременныедлядействительноймнимой

частей.Вы(можетереализоватьотдельныйклассдлякомплексныхчисел.Ваш)

 

алгдолженобладатьритмбыстродействием,например,

нестоит сравнивать|z|

ссравните2; |z|

2 с 2 2

длятого,чтобыизбежатьсложныхмедленных

вычисленийквадратнкор.ТакжестяиспользоватьгоитметодMath.pow ()

длявычислениянебольшихстепеней,лучшеперзначениемножьте,инв ш

 

быстродействиевашегокодасил

 

ьноупадет.

Вслучае,ес игдошелритмзначенияMAXнужноITERATIONS

вернуть -1,чтобыпоказать, тоневыходитчказаграницы.

Вашизадачи

СоздклаFractalExplorer,ссйтекотповамрыйзволитисследовать

различныеобластифрак,пуегоалаемзда

отображения, через

графическийинтерфеобраSwingсосб,воткиытийзванных

взаимодействиемприл льзователемжения.

Каквидноихпривышееденныхизображенийпользовательского

интерфейса, FractalExploоченьпрост,онсостоитизJFкоrame,erорый

всвою

очередьсодержитобъектJImageDisplay,которыйотобфраиобъекткталжает

JButtonдлясбросаизображения,необходимыйдляотображенияцелого

фракт.Данныймможнолакетсоздать,установивдляфреймаBorderLayout,

затемпоотображениеестивцент

рмаикнопкуетасбросавюжной" "ч сти

макета.

КлассFractalExplorerдолженотсл живатьскольковажныхполей

длясостоянияпрограммы:

1)Целоечислоразмер« экрана»,котороеявляетсяширинвысотой

отображвпикс.Отоб( еляхнияфрабудеткжениеталав

адратным.)

2)СсылкаJImageDisplay,дляобновленияотображенияразных

методахвпроцессевычисленияфрактала.

3)ОбъектFractalGeneratorБудетиспользовссылканабазовый.ться классдляотобдрвидовугихаженияфракталовбудущем.

4)ОбъектRectangle2D.Double, указывающийдиапазонакомплексной

плоск,которвыводитсястинэкран.

Всевышепривполябудутимтипдоступаетьденныеprivate.

Уклассадолженбытьконструктор,которыйприз ачениеимает

размераотобрвк ачествеженияргум,затсохраняетэтомнтазн

 

 

 

ачениев

соотвеполе,атакжествующинициалобъдиапазонаектымзирует

 

 

 

фрактальгенератора.Даконструкторныйогодолженустакакиеавливать

 

 

-

либокомпSwing;онбусиендутановленыследующметоде.

м

 

 

 

СоздайтеметодcreateAndShowGUIкоторый

(),

инициализирует

графическийинтерфесодержащийSwing:объектJFrame,JimageDisplay,

 

 

 

кнопкудлясбросаотображения.Используйтеjavaдля.awt.BorderLayout

 

 

 

содержимогоокна;добавьтеобъектотображенизображениявпозицию

 

 

 

BorderLayoutикнопкув .CENTER

позициюBorderLayout.SOUTH.

 

Вамнеобходимодатьокнуподходящийзаг ловокбеспечить

 

 

 

операциюзакрытияокнапоумолчаниюсм. етод(

 

 

 

 

JFrame.setDefaultCloseOperation ()).

 

 

Послетого,какмпонентыпользовательскогоинтерфейса

 

 

 

иницирализированызмещены,

 

 

добавьтеследующуюпоследовательность

 

операций:

 

 

 

 

 

frame.pack ();

frame.setVisible (true);

frame.setResizable (false);

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

затемзапретятизменеразмеровок. ние

Реализуйогательныйвспометодсипомдоступаprivateдля выводанаэкранфракт,можетедатьемуимялаdrawFractalЭтотме од ().

долженциклическ ипроходчерезкаждыйивтьотображенииксель..(

значенияxбудутyменятьсяодо0размераотображения),сделайте

следующее:

ØВычислитеколичествоитерацийдлясоответствующихкоординат

областиотобфра.Выможетежениякталаопределитькоордина

тыс

плавающточкойдляопренаборайделенногокоординатпик, селейпользуя

 

вспометодогательныйFractalGeneratorнапример,чтобыполучить.getCoord ();

 

координатуx,соответствующуюкоординатепиксX,сделяедующееайте:

 

//x - пикоординатасельная; x

Coord - координатавпространстве

фрактала

 

double xCoord = FractalGenerator.getCoord (range.x, range.x + range.width, displaySize, x);

ØЕсличитерацийслоравно -1т.е.точка(невыходитзаграницы,

установитепиксельчерныйцветдля( значениеrgbИн0).

ачевыберите

значцв,основанноениетанаколичествеитераций.Можнотакжедляэтого

 

использцветпровстранстпосколькуоеатьHSV:значцвениета

 

варьируетсяотдо0получается1, плавнаяпоследцветоввательность

 

красногожелтзеленому, ,сине

му,фиолетовомузатемобратнок

красн!Дляэтвыможетемугоиспоследующийьзоватьфрагмент:

float hue = 0.7f + (float) numIters / 200f;

int rgbColor = Color.HSBtoRGB(hue, 1f, 1f);

Есливыприддрспособумалигойотображенияпикселейвзависимости

отк оличтпопробуйте, стварацийреализоватьего!

ØОтображеннеобходимообновлятьсоответствиицветомдля

каждогопикселя.

ØПослетого,каквызакончилиотривпикселие,вамывать

необходимообновить JimageDisplay всоостекущимветствииизображением .

Дляэтоговызовитефункциюrepaint()длякомпонента.Вслучае,есливы воспользуетесьданнымметодом,изображениенаэкранебудетобновляться!

Создайтевнутрклассдляобраннийсоботкиытий

java.awt.event.ActionListener откнопкисброса.Обработчи

кдолженсбросить

диапазонкначальному,определеннгенерат,затперерисоватьмромму

фрактал.

Послетого,каквысоздалиэтоткласс,обновитеметод

createAndShowGUI

().

Создайтедругойвнутреннийклассдляобрасоботкиытий

java.awt.event.MouseListener сдисплея.Вамнеобходимообработатьсобытия

 

мыши,поэтвыдолжныунаследоватьмуэтотвнутреннийклассоткласса

 

MouseAdapterAWT.Приполучениисобытиящелчкемышью,классдолжен

 

отобразитьпиксельныекооринатыщелчкавобластьфр,заквыземала

вать

методгенератора

recenterAndZoomRange()скоордината,покоторыми

щелкнули,масштабом0Таким.5обр. ,н нажимаязомкакое

 

-либоместона

фрактальномотображении,выувеличиваетеего!

 

Незабывайтеперерисовыватьфрактпослетого, меняетекоб

ласть

фрактала.

 

 

Далееобновитеметод

createAndShowGUI

(),чтобызарегистрировать

экземплярэтогообработчиотображениявкомпонентефра ального.

Взаключении,вамнеобходимосоздатьстатическийметодmain()

дляFractalExplorerтак,чтоможнобыегол

запустить.Вmainнеобходимо

бусде: лать

ØИнициализироватьновыйэкземплярклассаFractalExplorer

размеромотображения800.

ØВызовите метод createAndShowGUI () класса FractalExplorer.

ØВызовитеметодdrawFractal()классаFractalExplorerдля

отображения ачальногопредставления.

Послевыприолнвышееденныхдейния,высможететвийдетально

рассмотретьфракталМандельбр

ота.Есливыувеличиможетемасш,товы аб

столкнутьсядвумяпроблемами:

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

более2000итерацийдляпоискаточкивомножествеМандельбр ота!Можно увеличитьмаксимальнколичествоитерац,ноэтпр замедлениюведетй

работыалгоритма.

 

Во-вто,псильнорых

мувеличениимасштаба,выстолкнетесь

пиксельнымвыводомотображения!Этовызванотем,чтоработаете пределетого,чтомпредогутзначенсплавающейтавзапятойисдвойнойть точностью.

Пририсовфрактэкрненииазнлависаетдолго.Следующая

лабораторнаяработабудетнаправ

ленарешениеданнойпроблемы.

Лабораторнаяработа№5Выбор. исох анени

е фракталов

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

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

Рисунок5Графическ.5.

ийинтерфейсновогоприложения

 

Верхняяпанельгенефравкторалючаетталовсебявиджета2,

 

 

позвпользовяющихвыбирафрак,нижтелюпаньвключаетяяель

 

 

себякнопку"SaveкотсоImage",храняетраятекущееизобфра. женияктала

 

 

Таккактеперьбуд

етнесколькоисточниковсобытий(action

-event

sources),высможетепопрактиквобрабвсехисточниковватьсятке

 

 

использоднметодаActionListenerгованиемвашемклассе.

 

 

Поддержканесколькихфракталов

 

 

 

ТаккаквреализбылавведенаабстракцияциюFracta

 

 

lGenerator,

добавлениенесколькихфракталовбудетпроблем.Вданнолабораторной

 

 

рабвыдобавитеподдержкунесколькихфракталов,пользсм вательжет

 

 

 

выбиратьмеждун, миспользуя

 

combo-box.Программныйинтерфейс

Swing

(Swing API)предоставляет

combo-box черезкласс

javax.swingа

.JComboBox,

такжезапускает

ActionEvents привыбореновогоэлемента.Необходимосделать:

 

 

Создатьновые2 реализацииFractalGenerator

Первымбудетфрактал

tricorn,котдонаходитьсярыйлженвфайле

 

Tricorn.java.Дляэтогон

ужносоздатьподкласс

FractalGenerator иреализация

будетпочтиидентичфракталуМан,кромедельбротадвухизменений.Вы

 

 

 

дажеможетескопирисхфродвМандельбертаныйтькталаипросто

 

 

внестиследующиеизменения:

 

 

 

Ø

Уравнимеетвидние

zn = zn-12

+ c.Ед инственнотличиетольков

 

том,что

используетсякомплексноесопряжение

zn-1 накаждойитераци

и.

Ø

Начальныйдиапазондлятрехцветногофрактала

долженбыоть

(-

2, -2) до (2, 2).

 

 

 

Втофрактал,которыйнеобходимореализовать

- этофрактал«Burning

Ship», которыйвреальнепохожнапылающийстикор.Данныйфракталбль

 

 

имеслесвойствадующие:

 

 

 

Ø

Уравнимеетвидние

zn = (|Re(zn-1)| + i |Im(zn-1)|)2 + c. Другими

слов,выберетеабсолютмизначекаждогокомпноеи нента

 

zn-1 накаждой

итерации.

 

 

 

Ø

Начальныйдиап

азондляданногофракталадолженбыоть

 

(-2, -2.5)

до (2, 1.5).

Сombo -boxeв Swingможетуправколобъектовлятьекцией,но

объектыдолжныпредоставлятьметод

toString()Убедитесь. ,чтовкаждой

 

реализациифракталметодtcnmв

toString(),котвозвращарый

етимя,

например«Mandelbrot», «T

ricorn» и «Burning Ship».

 

Настроить

JComboBox ввашемпользовательскоминтерфейсе

можносисп конструкторальзованиембезпараметров,затемиспользовать

 

метод addItem(Object)длятого,чтобыдобавитьреализациивашегоге

нератора

фракт.Какукаловзывалосьпредыдущемшаге,выпадающийсписокбудет

 

использоватьметод

toString ()ввашихреализацияхдляотображения

 

генератороввыпадающемсписке.

 

 

Необходимобудеттакжедобавитьобъект

 

label вразрабатываемый

пользовательскийинтепередвыпадающимфейссписком,

вкачестве

поясненияквыпадающсписку.Этом сджно,создавелатьмуобъектвый

 

Jpanel идобавивнегообъекты

JLabel и JcomboBox,азатемразместитьпанель

напозиции NORTH навашеммаокна. ете

 

Инаконец,необход

имодобавитьподдержку

выпадающего спискав

реализацию ActionListener.Вслучае, лиобытиепосотвыупилоадающего

 

списка,

выможетеизвыбранныйлэлементчьизвиджустановитьего

 

качтекущегоствегенефра.Используйтекталовтора( метод

 

getSelectedItem())

Приэтомнезабудьтесброситьначалдиапазонпереныйфрактал!исовать

 

Нижепризобведеныфракталов«Tricorn»жения

Burning Ship»для

провеправильностикиаботыалгоритма

 

 

Рисунок5Фра.6.«Tricorn»тал

Рисунок5Фра.7.« тал

Burning Ship»

СохраненияизображенияФрактала