Цели проекта:
1. Исследовать информировать учащихся о понятии фрактала и его видах;
2. Изучение основ фрактальной геометрии;
3. Обзор самых распространенных фракталов;
4. Познакомиться со способами применения фрактальной геометрии в современном мире;
5. Разработка прикладного объектно-ориентированного программного приложения, реализующего построение фракталов по изменяемому количеству интераций.
Задачи проекта:
1. Исследовать математические основы построения фракталов:
· Ковер Серпинского
· Треугольник Серпинского
· дракон Хартера — Хейтуэя
· Снежинка Коха
· Дерево Пифагора
· Бассейны Ньютона
2. Познакомиться со средой объектно-ориентированного программирования Delphi 7 и интегрировать знания по программированию в консоли в данную среду;
Составить на основе математических алгоритмов построения фракталов алгоритмы на языке Borland Pascal и реализовать их в среде Delphi 7.
Вложение | Размер |
---|---|
proekt_fraktaly.docx | 804.27 КБ |
fractals_program.zip | 233.17 КБ |
Муниципальное казенное общеобразовательное учреждение
средняя общеобразовательная школа №10
Проект
по информатике и ИКТ
«Фрактальная геометрия»
Проект выполнил: Петриев Роман Сергеевич, ученик 112 класса
Консультант: Басков Максим Владимирович, учитель информатики и ИКТ
Пласт, 2014г.
Содержание
3. Анализ информированности учащихся
Самые гениальные открытия в науке способны кардинально изменить человеческую жизнь. Изобретенная вакцина может спасти миллионы людей, создание оружия, наоборот, эти жизни отнимает. Совсем недавно (в масштабе человеческой эволюции) мы научились «укрощать» электричество — и теперь не можем себе представить жизнь без всех этих удобных устройств, использующих электроэнергию. Но есть и такие открытия, которым мало кто придает значение, хотя они тоже сильно влияют на нашу жизнь. Одно из таких «незаметных» открытий — фракталы.
Когда большинству людей казалось, что геометрия в природе ограничивается такими простыми фигурами, как линия, круг, коническое сечение, многоугольник, сфера, квадратичная поверхность, а также их комбинациями. К примеру, что может быть красивее утверждения о том, что планеты в нашей солнечной системе движутся вокруг солнца по эллиптическим орбитам?
Однако многие природные системы настолько сложны и нерегулярны, что использование только знакомых объектов классической геометрии для их моделирования представляется безнадежным. Как к примеру, построить модель горного хребта или кроны дерева в терминах геометрии? Как описать то многообразие биологических конфигураций, которое мы наблюдаем в мире растений и животных? Представьте себе всю сложность системы кровообращения, состоящей из множества капилляров и сосудов и доставляющей кровь к каждой клеточке человеческого тела. Представьте, как хитроумно устроены легкие и почки, напоминающие по структуре деревья с ветвистой кроной. Столь же сложной и нерегулярной может быть и динамика реальных природных систем. Как подступиться к моделированию каскадных водопадов или турбулентных процессов, определяющих погоду?
Фракталы и математический хаос – подходящие средства для исследования поставленных вопросов. Термин фрактал относится к некоторой статичной геометрической конфигурации, такой как мгновенный снимок водопада. Хаос – термин динамики, используемый для описания явлений, подобных турбулентному поведению погоды. Нередко то, что мы наблюдаем в природе, интригует нас бесконечным повторением одного и того же узора, увеличенного или уменьшенного во сколько угодно раз. Например, у дерева есть ветви. На этих ветвях есть ветки поменьше и т.д. Теоретически, элемент «разветвление» повторяется бесконечно много раз, становясь все меньше и меньше. То же самое можно заметить, разглядывая фотографию горного рельефа. Попробуйте немного приблизить изображение горной гряды – вы снова увидите горы. Так проявляется характерное для фракталов свойство самоподобия.
Во многих работах по фракталам самоподобие используется в качестве определяющего свойства. Следуя Бенуа Мадельброту, мы принимаем точку зрения, согласно которой фракталы должны определяться в терминах фрактальной (дробной) размерности. Отсюда и происхождение слова фрактал (от лат. fractus – дробный). Характерным свойством любого фрактала является итерация. Итерация в математике — результат повторного применения какой-либо математической операции
Понятие дробной размерности представляет собой сложную концепцию, которая излагается в несколько этапов. Прямая – это одномерный объект, а плоскость – двумерный. Если хорошенько перекрутив прямую и плоскость, можно повысить размерность полученной конфигурации; при этом новая размерность обычно будет дробной в некотором смысле, который нам предстоит уточнить. Связь дробной размерности и самоподобия состоит в том, что с помощью самоподобия можно сконструировать множество дробной размерности наиболее простым образом. Даже в случае гораздо более сложных фракталов, таких как граница множества Мандельброта, когда чистое самоподобие отсутствует, имеется почти полное повторение базовой формы во все более и более уменьшенном виде.
Изучение фракталов и хаоса открывает замечательные возможности, как в исследовании бесконечного числа приложений, так и в области чистой математики. Но в то же время, как это часто случается в так называемой новой математике, открытия опираются на пионерские работы великих математиков прошлого. Сэр Исаак Ньютон понимал это, говоря: «Если я и видел дальше других, то только потому, что стоял на плечах гигантов».
IV Этапы выполнения
На первом этапе была выбрана тема, подготовлен и отобран теоретический материал.
На втором этапе были выбраны фракталы, которые были подробно разобраны в данном проекте, была написана программа, наглядно показывающая строение данных фракталов.
На третьем этапе был проведен опрос обучающихся 7,9,10,11 классов об их осведомленности по данной теме, проведен анализ результатов анкетирования в виде круговых диаграмм.
Понятия фрактал и фрактальная геометрия, появившиеся в конце 70-х, с середины 80-х прочно вошли в обиход математиков и программистов. Слово фрактал образовано от латинского fractus и в переводе означает состоящий из фрагментов. Оно было предложено Бенуа Мандельбротом в 1975 году для обозначения нерегулярных, но самоподобных структур, которыми он занимался. Одним из основных свойств фракталов является самоподобие. В самом простом случае небольшая часть фрактала содержит информацию о всем фрактале. Рождение фрактальной геометрии принято связывать с выходом в 1977 году книги Мандельброта `The Fractal Geometry of Nature'. В его работах использованы научные результаты других ученых, работавших в период 1875-1925 годов в той же области (Пуанкаре, Фату, Жюлиа, Кантор, Хаусдорф). Для чтобы представить все многообразие фракталов удобно прибегнуть к их общепринятой классификации.
Фракталы в нашей жизни на данный момент имеют колоссальное значение. Рассмотрим некоторые области применения фракталов и фрактальной геометрии:
Наиболее полезным использованием фракталов в компьютерной науке является фрактальное сжатие данных. В основе этого вида сжатия лежит тот факт, что реальный мир хорошо описывается фрактальной геометрией. При этом, картинки сжимаются гораздо лучше, чем это делается обычными методами (такими как jpeg или gif). Другое преимущество фрактального сжатия в том, что при увеличении картинки, не наблюдается эффекта пикселизации (увеличения размеров точек до размеров, искажающих изображение). При фрактальном же сжатии, после увеличения, картинка часто выглядит даже лучше, чем до него. Кроме того фракталы получили огромное применение при создании компьютерных анимаций и 3D – моделей.
Изучение турбулентности в потоках газа или жидкости очень хорошо подстраивается под фракталы. Турбулентные потоки хаотичны и поэтому их сложно точно смоделировать. И здесь помогает переход к фрактальному представлению, что сильно облегчает работу инженерам и физикам, позволяя им лучше понять динамику сложных потоков.
При помощи фракталов также можно смоделировать языки пламени.
Пористые материалы хорошо представляются в фрактальной форме в связи с тем, что они имеют очень сложную геометрию. Это используется в нефтяной науке.
Для передачи данных на расстояния используются антенны, имеющие фрактальные формы, что сильно уменьшает их размеры и вес и увеличивает качество принимаемого сигнала.
Фракталы используются для описания кривизны поверхностей. Неровная поверхность характеризуется комбинацией из двух и более разных фракталов. Это позволяет смоделировать поверхность наиболее приближенную к реальности.
Применяется при моделировании и анализе биосенсорных взаимодействий и биения сердца, а также при моделировании хаотических процессов, в частности при описании моделей популяций.
Роль фракталов в машинной графике сегодня достаточно велика. Они приходят на помощь, например, когда требуется, с помощью нескольких коэффициентов, задать линии и поверхности очень сложной формы. С точки зрения машинной графики, фрактальная геометрия незаменима при генерации искусственных облаков, гор, поверхности моря. Фактически найден способ легкого представления сложных неевклидовых объектов, образы которых весьма похожи на природные.
Фракталы этого класса самые наглядные. В двухмерном случае их получают с помощью некоторой ломаной (или поверхности в трехмерном случае), называемой генератором. За один шаг алгоритма каждый из отрезков, составляющих ломаную, заменяется на ломаную-генератор, в соответствующем масштабе. В результате бесконечного повторения этой процедуры, получается геометрический фрактал.
Аналогично треугольнику Серпинского(2.2.2) можно строить ковер Серпинского (Sierpinski carpet), который является двуxмерным аналогом канторовского множества исключенных средних третей. Строится ковер Серпинского следующим образом. Вначале берётся квадрат со стороной равной единице, затем каждая сторона квадрата делится на три р авные части, а весь квадрат, соответственно, на девять одинаковых квадратиков со стороной равной . Из полученной фигуры вырезается центральный квадрат.
Рис.1 Рис.2 Рис. 3
Затем такой же процедуре подвергается каждый из 8 оставшихся квадратиков и т.д.
В 1915 году польский математик Вацлав Серпинский придумал занимательный объект, известный как решето Серпинского. Этот треугольник один из самых ранних известных примеров фракталов. Существует несколько способов построения этого фрактала. Один из них представляет следующий процесс. Берётся сплошной равносторонний треугольник, на первом шаге из центра удаляется перевёрнутый треугольник. На втором шаге удаляется три перевёрнутых треугольника из трёх оставшихся треугольников. Продолжая этот процесс, на -ом шаге удаляем перевёрнутых треугольников из центров оставшихся треугольников. Конца этому процессу не будет, и в треугольнике не останется живого места, но и на части он не распадётся - получится объект состоящий из одних только дырок. Это и есть треугольник Серпинского.
Рис.4 Рис.5
Рис. 6 Рис.7
Треугольник Серпинского также называют салфеткой Серпинского.
Дракон Хартера, также известный как дракон Хартера — Хейтуэя, был впервые исследован физиками NASA — John Heighway, Bruce Banks, и William Harter. Он был описан в 1967 году Мартином Гарднером (Martin Gardner) в колонке «Математические игры» журнала «Scientific American». Многие свойства фрактала были описаны Чандлером Девисом и Дональдом Кнутом.
Для его построения возьмем отрезок. Повернем его на 90 градусов вокруг одной из вершин и добавим полученный отрезок к исходному. Получим уголок из двух отрезков. Повторим описанную процедуру. Повернем уголок на 90 градусов вокруг вершины и добавим полученную ломаную к исходной.
Рис.8 Рис.9
Рис. 10 Рис.11
Кривая Коха является типичным геометрическим фракталом. Процесс её построения выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломаная, состоящая из четырех звеньев длины 1/3. На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев и т. д.
Рис.12 Рис.13
Рис.14 Рис.15
Разновидность фрактала, основанная на фигуре, известной как «Пифагоровы штаны»
Одним из свойств дерева Пифагора является то, что если площадь первого квадрата равна единице, то на каждом уровне сумма площадей квадратов тоже будет равна единице.
Рис.16 Рис.17 Рис. 18
Если в классическом дереве Пифагора угол равен 45 градусам, то также можно построить и обобщённое дерево Пифагора при использовании других углов. Такое дерево часто называют обдуваемое ветром дерево Пифагора. Если изображать только отрезки, соединяющие каким-либо образом выбранные «центры» треугольников, то получается обнаженное дерево Пифагора.
(Алгебраический фрактал)
Этот вопрос заинтересовал Артура Кэли ещё в 1879 году, однако разрешить его смогли лишь в 70-х годах двадцатого столетия с появлением вычислительной техники. Оказалось, что на пересечениях этих областей (их принято называть областями притяжения) образуются так называемые фракталы — бесконечные самоподобные геометрические фигуры.
Ввиду того, что Ньютон применял свой метод исключительно к полиномам, фракталы, образованные в результате такого применения, обрели название фракталов Ньютона или бассейнов Ньютона.
Рис.19 Рис.20
Рис. 21
Области с фрактальными границами появляются при приближенном нахождении корней нелинейного уравнения алгоритмом Ньютона на комплексной плоскости (для функции действительной переменной метод Ньютона часто называют методом касательных, который, в данном случае, обобщается для комплексной плоскости)
7.1 класс
9.1 Класс
10.1 класс
11.2 класс
Работая над проектом, я провел опрос, в котором приняли участие 78 учащихся. Целями опроса являлись выявление уровня информированности и заинтересованности данной темой.
По результатам сделаны следующие выводы:
Таким образом можно сделать следующее заключение – учащиеся практически не владеют информацией и необходимо хотя бы поверхностное знакомство с темой «Фрактальная геометрия», помощью при изучении которой станет разработанное программное приложение, т.к. большинству учащихся понравился вид фракталов и с небольшими комментариями при просмотре становится понятен принцип построения фракталов.
Природные объекты и явления, конечно, не являются фракталами в точном смысле слова. Однако для ассоциированных с ними фракталов можно осуществить точные расчеты, представляющие интерес для практики.
Одно из самых интересных свойств фракталов – их нелинейность. А нелинейность, как известно, зачастую приводит к необратимости. Косвенным подтверждением связи между фрактальной геометрией и необратимостью можно считать фрактальные свойства систем с динамическим хаосом.
В 80-х годах 20 века известный бельгийский физико-химик, лауреат Нобелевской премии Илья Пригожин в соавторстве с Изабеллой Стенгерс написал книгу "Порядок из хаоса. Новый диалог человека с природой". Книга обращает внимание на те стороны нашей реальности, которые обычно остаются вне поля зрения классической науки: неустойчивость и разупорядоченность, при которых самое незначительное отклонение в начальных условиях процесса приводит к радикальным изменениям в его течении. И часто бывает в принципе невозможно предсказать, как именно этот процесс пойдет. "Универсальные" же законы оказываются применимы лишь к ограниченным областям реальности. Фракталы наглядно демонстрируют как порядок соотносится с хаосом и возникает из него. И, кроме того, они просто красивы.
Кроме того, нужно обратить внимание и на существующие проблемы. К основным из них в настоящее время можно отнести поиск адекватного математического аппарата для описания самоподобных объектов и, что более важно, - разработку идеологии построения фрактальных моделей природных процессов. Скорее всего именно в этом направлении можно ожидать наиболее интересных достижений.
Стоит сказать, что попытки изучения механизмов образования и роста природных фракталов, а также процессов, в них происходящих, наталкиваются на определенные трудности. Наибольшие успехи в их преодолении связаны с использованием компьютеров. Полученные результаты впечатляют, и еще более захватывающими представляются перспективы развития этого направления. Именно развитие компьютерной техники определило прогресс в применении идей теории фракталов для описания природы.
Природа — лучший архитектор, идеальный строитель и инженер. Она устроена очень логично, и если где-то мы не видим закономерности, это означает, что ее нужно искать в другом масштабе. Люди все лучше и лучше это понимают, стараясь во многом подражать естественным формам. Инженеры проектируют акустические системы в виде раковины, создают антенны с геометрией снежинок и так далее. Я уверен, что фракталы хранят в себе еще немало секретов, и многие из них человеку еще лишь предстоит открыть.
Анкета опроса
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Spin, ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
SpinEdit1: TSpinEdit;
Image1: TImage;
Label1: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Image2: TImage;
SpinEdit2: TSpinEdit;
Image3: TImage;
SpinEdit3: TSpinEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Image4: TImage;
SpinEdit4: TSpinEdit;
TrackBar2: TTrackBar;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
Label2: TLabel;
Image5: TImage;
SpinEdit5: TSpinEdit;
TabSheet6: TTabSheet;
Image6: TImage;
SpinEdit6: TSpinEdit;
Label6: TLabel;
CheckBox1: TCheckBox;
procedure SpinEdit1Change(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
procedure SpinEdit3Change(Sender: TObject);
procedure SpinEdit4Change(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure RadioButton4Click(Sender: TObject);
procedure SpinEdit5Change(Sender: TObject);
procedure SpinEdit6Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x1,x2,y1,y2:integer;
implementation
{$R *.dfm}
//КОВЕР СПИРИНСКОГО
procedure kover(x1,y1,x2,y2,n:integer); //Описание процедуры
var x1n,x2n,y1n,y2n:integer; //Переменные
begin //Раздел описания
if n > 0 then begin //Запуск алгоритма
x1n := round(2*x1/3+x2/3); //Вычисление координат нового элемента
x2n := round(2*x2/3+x1/3);
y1n := round(2*y1/3+y2/3);
y2n := round(2*y2/3+y1/3);
if form1.RadioButton1.Checked = true thenform1.Image1.Canvas.Rectangle(x1n,y1n,x2n,y2n);
if form1.RadioButton2.Checked = true then form1.Image1.Canvas.Ellipse(x1n,y1n,x2n,y2n);
//Выбор между ковром из квадратов или из кругов
n := n-1;
form1.Image1.refresh; //Обновление Экрана
kover(x1,y1,x1n,y1n,n); //Процесс самоповторения
kover(x1n,y1,x2n,y1n,n);
kover(x2n,y1,x2,y1n,n);
kover(x1,y1n,x1n,y2n,n);
kover(x2n,y1n,x2,y2n,n);
kover(x1,y2n,x1n,y2,n);
kover(x1n,y2n,x2n,y2,n);
kover(x2n,y2n,x2,y2,n);
end;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
x1 := 0; //Нахождение координат холста
y1 := 0;
x2 := form1.Image1.Width;
y2 := form1.Image1.Height;
form1.Image1.Canvas.Brush.Color := RGB(0, 191, 255); //Выбор цвета фона
form1.Image1.Canvas.Rectangle(0,0,x2,y2); //Построение фона
form1.Image1.Canvas.Brush.Color :=RGB(205, 92, 92); //Выбор цвета фигуры
form1.Image1.Canvas.Pen.Width:=2; //Ширина линий
form1.Image1.Canvas.Pen.Color :=RGB(0,255,0); //Выбор цвета линий
if form1.SpinEdit1.Value >=1 then kover(x1,y1,x2,y2,form1.SpinEdit1.Value); //Условие запуска
end;
procedure TForm1.RadioButton1Click(Sender: TObject); //Описание кнопок выбора
begin
if form1.RadioButton1.Checked = true then form1.RadioButton2.Checked := false;
end;
procedure TForm1.RadioButton2Click(Sender: TObject); //Описание кнопок выбора
begin
if form1.RadioButton2.Checked = true then form1.RadioButton1.Checked := false;
end;
//КОНЕЦ КОВРА СПИРИНСКОГО
//ТРЕУГОЛЬНИК СПИРИНСКОГО
procedure trng(x1,y1,x2,y2,x3,y3,n:integer); //Описание процедуры
var x1n,x2n,y1n,y2n,x3n,y3n:integer; //Переменные
begin //Раздел описания
if n > 0 then begin
x1n := round((x1 + x2) / 2); //Вычисление координат нового треугольника
y1n := round((y1 + y2) / 2);
x2n := round((x2 + x3) / 2);
y2n := round((y2 + y3) / 2);
x3n := round((x3 + x1) / 2);
y3n := round((y3 + y1) / 2);
form1.Image2.refresh; //Обновление экрана
Form1.Image2.Canvas.MoveTo(x1,y1); //Построение треугольника
Form1.Image2.Canvas.LineTo(x2,y2);
Form1.Image2.Canvas.LineTo(x3,y3);
Form1.Image2.Canvas.LineTo(x1,y1);
n := n-1; //Условие остановки рекурсии
trng(x1, y1, x1n, y1n, x3n, y3n,n); //Процесс самоповторения
trng(x2, y2, x1n, y1n, x2n, y2n,n);
trng(x3, y3, x2n, y2n, x3n, y3n,n);
end;
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
var x1,y1,x2,y2,x3,y3: integer;
Begin
x1:=round(form1.Image2.Width/2);//Нахождение координат первичного треугольника
y1:=0;
x2 := form1.Image2.Width-5;
y2 := form1.Image2.Height-5;
x3:=0;
y3:=y2;
form1.Image2.Canvas.Brush.Color :=RGB(186, 85, 211); // Выбор цвета фона
form1.Image2.Canvas.Rectangle(0,0,form1.Image2.Width,form1.Image2.Height);
//Построение фона
form1.Image1.Canvas.Pen.Width:=2; //Толщина кисти
form1.Image2.Canvas.Pen.Color :=RGB(255, 255, 0);//Цвет границы треугольника
Form1.Image2.Canvas.MoveTo(x1,y1);//Построение первоначального треугольника
Form1.Image2.Canvas.LineTo(x2,y2);
Form1.Image2.Canvas.LineTo(x3,y3);
Form1.Image2.Canvas.LineTo(x1,y1);
if form1.SpinEdit2.Value >=1 then trng(x1,y1,x2,y2,x3,y3,form1.SpinEdit2.Value);
//Условие запуска построения
end;
//КОНЕЦ ТРЕУГОЛЬНИКА СПИРИНСКОГО
//ДРАКОН
procedure dragon(x1,y1,x2,y2,n:integer); //Описание процедуры
var ty,tx:integer; //Переменные
begin //Раздел описания
if n=0 then begin
Form1.Image3.Canvas.Pen.Color:=RGB(255, 255, 255);//Цвет линий
Form1.Image3.Canvas.Pen.Width:=1;//Ширина линий
Form1.Image3.Canvas.MoveTo(x1,y1); //Построение дракона
Form1.Image3.Canvas.LineTo(x2,y2);
exit; //Остановка процедуры
end ;
tx:=(x1+x2) div 2+(y2-y1) div 2;//Нахождение новых координат
ty:=(y1+y2) div 2-(x2-x1) div 2;
n := n-1;//Условие остановки рекурсии
dragon(x2,y2,tx,ty,n);// Процесс самоповторения
dragon(x1,y1,tx,ty,n);
form1.Image3.Refresh; //Обновление экрана
end;
procedure TForm1.SpinEdit3Change(Sender: TObject);
var x1,y1,x2,y2: integer; //Переменные
Begin
form1.Image3.Canvas.Brush.Color := RGB(205, 0, 205); // Выбор цвета фона
form1.Image3.Canvas.Rectangle(0,0,form1.Image2.Width,form1.Image2.Height);
//Построение фона
x1:=200;//Координаты начала дракона
y1:=200;
x2:=400;
y2:=400;
if form1.SpinEdit3.Value >=1 then dragon(x1,y1,x2,y2,form1.SpinEdit3.Value);
//Условие запуска
end;
//КОНЕЦ ДРАКОНА
//НАЧАЛО СНЕЖИНКИ КОХА
procedure Koh(startx,endx:real; starty,endy:real; lvl:integer); //Описание процедуры
var x1,x2,x3,y1,y2,y3,l,cosa,sina,h:real; //Переменные
begin//Раздел описания
if lvl=1 then
begin
form1.Image4.Refresh; //Обновление экрана
Form1.Image4.Canvas.Pen.Color:=RGB(0,0,0);//Цвет линий
Form1.Image4.Canvas.MoveTo(Trunc(startx),trunc(starty));
Form1.Image4.Canvas.LineTo(Trunc(endx),trunc(endy));
form1.Image4.Refresh; //Обновление экрана
end
else
begin
L:=sqrt(sqr(endx-startx)+sqr(endy-starty)); //Нахождение отрезаемой новым треугольником
h:=L/(2*sqrt(3)); //Нахождение сторон нового треугольника
sina:=(endy-starty)/L;
cosa:=(endx-startx)/L;
x1:=startx+(endx-startx)/3; //Нахождение координат нового треугольника
x2:=(endx+startx)/2+h*sina;
x3:=startx+2*(endx-startx)/3;
y1:=starty+(endy-starty)/3;
y2:=(endy+starty)/2-h*cosa;
y3:=starty+2*(endy-starty)/3;
Koh(startx,x1,starty,y1,lvl-1); //Запуск рекурсии
Koh(x1,x2,y1,y2,lvl-1);
Koh(x2,x3,y2,y3,lvl-1);
Koh(x3,endx,y3,endy,lvl-1);
end;
end;
procedure TForm1.SpinEdit4Change(Sender: TObject);
var k:integer;
begin
randomize;
Form1.Image4.Canvas.Brush.Color:=RGB(random(250-255), random(250-255), random(250-255));//Выбор цвета фона
Image4.Canvas.rectangle(0,0,image4.Width,image4.Height); //Закраска фона
form1.Image4.Refresh;//Обновление экрана
if form1.RadioButton3.Checked = true then begin
begin
k:=(Form1.Image4.Height div 2)-10;
x1:=round(k*cos((150+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
y1:=round(k*sin((150+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
x2:=round(k*cos((30+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
y2:=round(k*sin((30+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
//Вычисление координат 1-ого нового треугольника для 1-ого случая
koh(x1,x2,y1,y2,SpinEdit4.Value);//Обращение к процедуре построения
x1:=round(k*cos((30+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
y1:=round(k*sin((30+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
x2:=round(k*cos((-90+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
y2:=round(k*sin((-90+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
//Вычисление координат 2-ого нового треугольника для 1-ого случая
koh(x1,x2,y1,y2,SpinEdit4.Value); //Обращение к процедуре построения
x1:=round(k*cos((-90+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
y1:=round(k*sin((-90+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
x2:=round(k*cos((150+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
y2:=round(k*sin((150+TrackBar2.Position)*pi/180))+(Form1.Image4.width div 2);
//Вычисление координат 3-его нового треугольника для 1-ого случая
koh(x1,x2,y1,y2,SpinEdit4.Value); //Обращение к процедуре построения
end;
end;
if SpinEdit4.Value>0 then
begin
if form1.RadioButton4.Checked = true then begin
k:=(Image4.Height div 2)-10;
x1:=round(k*cos((-150+TrackBar2.Position)*pi/180))+(Image4.Width div 2);
y1:=round(k*sin((-150+TrackBar2.Position)*pi/180))+(Image4.Height div 2);
x2:=round(k*cos((-30+TrackBar2.Position)*pi/180))+(Image4.Width div 2);
y2:=round(k*sin((-30+TrackBar2.Position)*pi/180))+(Image4.Height div 2);
//Вычисление координат 1-ого нового треугольника для 2-ого случая
Koh(x1, x2, y1, y2, SpinEdit4.Value); //Обращение к процедуре построения
x1:=round(k*cos((-30+TrackBar2.Position)*pi/180))+(Image4.Width div 2);
y1:=round(k*sin((-30+TrackBar2.Position)*pi/180))+(Image4.Height div 2);
x2:=round(k*cos((90+TrackBar2.Position)*pi/180))+(Image4.width div 2);
y2:=round(k*sin((90+TrackBar2.Position)*pi/180))+(Image4.Height div 2);
//Вычисление координат 2-ого нового треугольника для 2-ого случая
Koh(x1, x2, y1, y2, SpinEdit4.Value); //Обращение к процедуре построения
x1:=round(k*cos((90+TrackBar2.Position)*pi/180))+(Image4.width div 2);
y1:=round(k*sin((90+TrackBar2.Position)*pi/180))+(Image4.Height div 2);
x2:=round(k*cos((-150+TrackBar2.Position)*pi/180))+(Image4.Width div 2);
y2:=round(k*sin((-150+TrackBar2.Position)*pi/180))+(Image4.Height div 2);
//Вычисление координат 3-его нового треугольника для 2-ого случая
Koh(x1, x2, y1, y2, SpinEdit4.Value); //Обращение к процедуре построения
end;
end;
end;
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
if form1.RadioButton3.Checked = true then form1.RadioButton4.Checked := false;
end;
procedure TForm1.RadioButton4Click(Sender: TObject);
begin
if form1.RadioButton4.Checked = true then form1.RadioButton3.Checked := false;
end;
//Процедуры проверки выбора между 1-ым и 2-м способом
//Конец Снежинки коха
//Начало Дерева Пифагора
Procedure lineto1(x, y : Integer; l, u : real); //Процедура построения разветвления
Begin
Form1.image5.Canvas.MoveTo(x,y);
Form1.image5.Canvas.LineTo(Round(x + l * cos(u)), Round(y - l * sin(u)));
//Построение линии
form1.Image5.Refresh;//Обновление экрана
End;
Procedure Draw(x, y : Integer; l, u : real; n:integer);
Begin
if n>4 then Begin form1.Image5.Canvas.Pen.Width:=2;
form1.Image5.Canvas.Pen.Color:=RGB(139, 90, 43);
end else begin form1.Image5.Canvas.Pen.Width:=1;
form1.Image5.Canvas.Pen.Color:=RGB(0, 255, 0)end; //Выбор цвета дерева
If n > 0 then
Begin
l := l * 0.7;//Нахождение увеличения дерева
lineto1(x, y, l, u); //Построение разветвления
x := Round(x + l * cos(u));//Нахождение новых точек дерева
y := Round(y - l * sin(u));
Draw(x, y, l, u + pi / 4,n-1);//Процесс рекурсии
Draw(x, y, l, u - pi / 4,n-1);
End;
End;
procedure TForm1.SpinEdit5Change(Sender: TObject);
var t,x,y,l:integer;
u:real;
begin
Form1.Image5.Canvas.Brush.Color :=RGB(250,240,190);//Цвет фона
Form1.Image5.Canvas.Rectangle(0,0,Form1.Image5.Height,Form1.Image5.Width);
//Построение фона
x1:=300; //Начальные координаты
y1:=550;
Draw(x1, y1, Form1.Image5.Height div 3, pi/2,SpinEdit5.Value);//Первичный запуск
end;
//Конец Дерева
//Начало Бассейна Ньютона
procedure TForm1.SpinEdit6Change(Sender: TObject);
type
Complex = Record
x : Real;
y : Real;
end;
const
iter = 20;
max = 1e+6;
min = 1e-6;
var
z, t, d : Complex;
p : Real;
q,x,f,y,n : Integer;
Cancel : Boolean;
mx, my : Integer;
col: TColor;
//Переменные и константы
begin
Mx := 300;
My := 300; начальные координаты
for y := -my to my do
for x := -mx to mx do
begin
n :=1;
q:=Form1.SpinEdit6.Value;
z.x := X* 0.0011*q ;
z.y := Y* 0.0011*q;
d := z;
while (sqr(z.x)+sqr(z.y) < max) and (sqr(d.x)+sqr(d.y) > min)
and (n < iter) do
begin
t := z;
{z^3 - 1}
p := sqr(sqr(t.x)+sqr(t.y));
z.x := 2/3*t.x + (sqr(t.x)-sqr(t.y))/(3*p);
z.y := 2/3*t.y*(1-t.x/p);
d.x := abs(t.x - z.x);
d.y := abs(t.y - z.y);
Inc(n);
end;
//Цикл нахождения координат фигуры
Form1.Image6.Canvas.Pen.Color:=RGB(0,n*9,10); //Выбор цвета
Form1.Image6.Canvas.moveto(600,600);
Form1.Image6.Canvas.Lineto(mx+x,my+y); //Процесс рисования
if form1.CheckBox1.Checked = true then form1.Image6.Refresh;//Выбор прорисовки
end;
end;
// Конец бассена ньютона
end.
Сказка "Морозко"
Усатый нянь
Большое - маленькое
Рисуем осень: поле после сбора урожая
На берегу Байкала