Кривая Минковского: различия между версиями
Перейти к навигации
Перейти к поиску
[непроверенная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
добавил источник |
MBHbot (обсуждение | вклад) м →Ссылки: Project talk:Викификатор#Шаблон:Rq, replaced: {{rq|sources}} → {{подст:нет источников}} |
||
(не показано 26 промежуточных версий 16 участников) | |||
Строка 1: | Строка 1: | ||
'''Кривая Минковского''' — классический геометрический [[фрактал]], предложенный [[Минковский, Герман|Минковским]]. Инициатором является [[отрезок]], а генератором является [[ломаная]] из восьми звеньев (два равных звена продолжают друг друга) — см. рис., где в качестве генератора использован «биполярный скачок»<ref name=slyusarantenna3>{{cite web|last = Слюсар|first = В.|title = Фрактальные антенны. Принципиально новый тип «ломаных» антенн. Часть 2.|work = Электроника: наука, технология, бизнес. — 2007. — № 6.|date = 2007|pages = С. 85.|url = http://www.electronics.ru/files/article_pdf/0/article_611_312.pdf|access-date = 2020-05-06|archive-date = 2018-04-03|archive-url = https://web.archive.org/web/20180403104208/http://www.electronics.ru/files/article_pdf/0/article_611_312.pdf|deadlink = no}}</ref><ref name="wireless">Вишневский В. М., Ляхов А. И., Портной С. Л., Шахнович И. В. Широкополосные беспроводные сети передачи информации. — М.: Техносфера. — 2005.- C. 498—569</ref> |
|||
[[Файл:Minkowsky01.gif|right|thumb|300 px|Построение кривой Минковского]] |
|||
'''Кривая Минковского''' или '''колбаса<ref>[http://chaostarantula.narod.ru/ToC/1.htm]</ref> Минковского''' |
|||
[[Файл:Minkowsky01.gif|Построение кривой Минковского]]<!-- не делайте миниатюрой, миниатюры больших гифок не анимируются--> |
|||
— классический геометрический [[фрактал]], предложенный [[Минковский, Герман|Минковским]]. Инициатором является [[отрезок]], а генератором является [[ломаная]] из восьми звеньев (два равных звена продолжают друг друга) — см. рис. |
|||
[[Файл:Karperienflakeani2.gif|thumb|Квадратичный остров Коха типа 1 из четырёх кривых Минковского, расположенных в многоугольнике]] |
|||
[[Файл:Minkowski island 1-3.svg|thumb|Квадратичный остров Коха типа 2 из четырёх кривых Минковского, расположенных в многоугольнике]] |
|||
== Свойства == |
== Свойства == |
||
Строка 7: | Строка 9: | ||
* Кривая Минковского не имеет самопересечений. |
* Кривая Минковского не имеет самопересечений. |
||
* Кривая Минковского имеет [[Хаусдорфова размерность|Хаусдорфову размерность]] <math>\ln8/\ln4\ = 3/2</math> (поскольку она состоит из восьми равных частей, каждая из которых подобна всей кривой с коэффициентом [[подобие|подобия]] 1/4). В частности, |
* Кривая Минковского имеет [[Хаусдорфова размерность|Хаусдорфову размерность]] <math>\ln8/\ln4\ = 3/2</math> (поскольку она состоит из восьми равных частей, каждая из которых подобна всей кривой с коэффициентом [[подобие|подобия]] 1/4). В частности, |
||
* Кривая Минковского имеет нулевую [[мера Лебега|меру Лебега]]. |
|||
== Построение через [[L-система|систему Линденмайера]] == |
|||
: '''переменные''': F |
|||
: '''константы''': + − |
|||
: '''старт''': F |
|||
: '''правило''': (F → F−F+F+FF−F−F+F) |
|||
: '''угол''': 90° |
|||
Здесь F означают «рисуем отрезок», + означает «повернуть вправо на угол», а − означает «повернуть влево на угол». |
|||
== Примеры алгоритма == |
|||
{{Hider| |
|||
title = Python| |
|||
hidden = 1 | |
|||
title-style = text-align: left; | |
|||
content-style = text-align: left; | |
|||
content = |
|||
{{Hider| |
|||
title = Пример алгоритма на Python с помощью модуля turtle| |
|||
hidden = 1 | |
|||
title-style = text-align: left; | |
|||
content-style = text-align: left; | |
|||
content = |
|||
<source lang="Python"> |
|||
from turtle import * |
|||
def start(x: float): |
|||
"""This function clears window and make turtle go to start""" |
|||
clear() |
|||
penup() |
|||
x = x if x < 0 else -x |
|||
goto(x, 0) |
|||
pendown() |
|||
def curve_minkowski(length: float, iterations: int): |
|||
"""This function draw Minkowski's curve""" |
|||
if iterations == 0: |
|||
forward(length * 4) |
|||
else: |
|||
curve_minkowski(length/4, iterations - 1) |
|||
left(90) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
right(90) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
right(90) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
left(90) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
left(90) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
right(90) |
|||
curve_minkowski(length/4, iterations - 1) |
|||
LENGTH = 100 # длина линии |
|||
ITERATION = 3 # номер итерации |
|||
start(LENGTH * 2) |
|||
curve_minkowski(LENGTH, ITERATION) |
|||
exitonclick() # функция чтобы программа не завершалась сразу |
|||
</source> |
|||
}} |
|||
{{Hider| |
|||
title = Пример алгоритма на Python с помощью [[L-система|системы Линденмайера]]| |
|||
hidden = 1 | |
|||
title-style = text-align: left; | |
|||
content-style = text-align: left; | |
|||
content = |
|||
<source lang="python"> |
|||
import turtle |
|||
turtle.hideturtle() |
|||
turtle.tracer(0) |
|||
turtle.penup() |
|||
turtle.setposition(-150, 0) |
|||
turtle.pendown() |
|||
axiom, tempAx, logic, iterations = 'F', '', {'F': 'F-F+F+FF-F-F+F'}, 3 |
|||
for i in range(iterations): |
|||
for j in axiom: |
|||
tempAx += logic[j] if j in logic else j |
|||
axiom, tempAx = tempAx, '' |
|||
for k in axiom: |
|||
if k == '+': |
|||
turtle.left(90) |
|||
elif k == '-': |
|||
turtle.right(90) |
|||
else: |
|||
turtle.forward(5) |
|||
turtle.update() |
|||
turtle.mainloop() |
|||
</source> |
|||
}} |
|||
}} |
|||
{{Hider| |
|||
title = Пример алгоритма на PHP| |
|||
hidden = 1 | |
|||
title-style = text-align: left; | |
|||
content-style = text-align: left; | |
|||
content = |
|||
<source lang="PHP"> |
|||
<?php |
|||
$i = 2; |
|||
$image = imagecreatetruecolor(600, 400); |
|||
imagefilledrectangle($image, 0, 0, imagesx($image) - 1, imagesy($image) - 1, |
|||
imagecolorresolve($image, 255, 255, 255)); |
|||
$color = imagecolorresolve($image, 0, 0, 0); |
|||
drawMinkowski($image, 0, imagesy($image) / 2, imagesx($image), imagesy($image) / 2, $i, $color); |
|||
/** |
|||
* Draws minkowski curve between two points. |
|||
* @return void |
|||
*/ |
|||
function drawMinkowski($image, $xa, $ya, $xi, $yi, $i, $color) { |
|||
if($i == 0) |
|||
imageline($image, $xa, $ya, $xi, $yi, $color); |
|||
else { |
|||
// C---D |
|||
// | | |
|||
// A---B E H---I |
|||
// | | |
|||
// F---G |
|||
$xb = $xa + ($xi - $xa) * 1/4; |
|||
$yb = $ya + ($yi - $ya) * 1/4; |
|||
$xe = $xa + ($xi - $xa) * 2/4; |
|||
$ye = $ya + ($yi - $ya) * 2/4; |
|||
$xh = $xa + ($xi - $xa) * 3/4; |
|||
$yh = $ya + ($yi - $ya) * 3/4; |
|||
$cos90 = 0; |
|||
$sin90 = -1; |
|||
$xc = $xb + ($xe - $xb) * $cos90 - $sin90 * ($ye - $yb); |
|||
$yc = $yb + ($xe - $xb) * $sin90 + $cos90 * ($ye - $yb); |
|||
$xd = $xc + ($xe - $xb); |
|||
$yd = $yc + ($ye - $yb); |
|||
$sin90 = 1; |
|||
$xf = $xe + ($xh - $xe) * $cos90 - $sin90 * ($yh - $ye); |
|||
$yf = $ye + ($xh - $xe) * $sin90 + $cos90 * ($yh - $ye); |
|||
$xg = $xf + ($xh - $xe); |
|||
$yg = $yf + ($yh - $ye); |
|||
drawMinkowski($image, $xa, $ya, $xb, $yb, $i - 1, $color); |
|||
drawMinkowski($image, $xb, $yb, $xc, $yc, $i - 1, $color); |
|||
drawMinkowski($image, $xc, $yc, $xd, $yd, $i - 1, $color); |
|||
drawMinkowski($image, $xd, $yd, $xe, $ye, $i - 1, $color); |
|||
drawMinkowski($image, $xe, $ye, $xf, $yf, $i - 1, $color); |
|||
drawMinkowski($image, $xf, $yf, $xg, $yg, $i - 1, $color); |
|||
drawMinkowski($image, $xg, $yg, $xh, $yh, $i - 1, $color); |
|||
drawMinkowski($image, $xh, $yh, $xi, $yi, $i - 1, $color); |
|||
} |
|||
} |
|||
header('Content-type: image/png'); |
|||
imagepng($image); |
|||
imagedestroy($image); |
|||
?> |
|||
</source> |
|||
}} |
|||
== Примечания == |
== Примечания == |
||
{{примечания}} |
|||
<references /> |
|||
== Литература == |
|||
* Вишневский В. М., Ляхов А. И., Портной С. Л., Шахнович И. В. Широкополосные беспроводные сети передачи информации. — М.: Техносфера. — 2005.- C. 498—569. |
|||
== Ссылки == |
|||
* [http://www.wolframalpha.com/input/?i=minkowski+sausage&a=*C.minkowski+sausage-_*MathWorld-&f2=3&f=MinkowskiSausage.n%5Cu005f3 «Minkowski Sausage» — пример интерактивного построения кривой Минковского] |
|||
{{rq|sources|iwiki}} |
|||
{{Кривые}} |
{{Кривые}} |
||
{{Нет источников |дата=2024-10-20}} |
|||
[[Категория:Фрактальные кривые]] |
[[Категория:Фрактальные кривые]] |
||
[[Категория:Герман Минковский]] |
Текущая версия от 05:34, 20 октября 2024
Кривая Минковского — классический геометрический фрактал, предложенный Минковским. Инициатором является отрезок, а генератором является ломаная из восьми звеньев (два равных звена продолжают друг друга) — см. рис., где в качестве генератора использован «биполярный скачок»[1][2]
Свойства
[править | править код]- Кривая Минковского нигде не дифференцируема и не спрямляема.
- Кривая Минковского не имеет самопересечений.
- Кривая Минковского имеет Хаусдорфову размерность (поскольку она состоит из восьми равных частей, каждая из которых подобна всей кривой с коэффициентом подобия 1/4). В частности,
- Кривая Минковского имеет нулевую меру Лебега.
Построение через систему Линденмайера
[править | править код]- переменные: F
- константы: + −
- старт: F
- правило: (F → F−F+F+FF−F−F+F)
- угол: 90°
Здесь F означают «рисуем отрезок», + означает «повернуть вправо на угол», а − означает «повернуть влево на угол».
Примеры алгоритма
[править | править код]Python
Пример алгоритма на Python с помощью модуля turtle
from turtle import *
def start(x: float):
"""This function clears window and make turtle go to start"""
clear()
penup()
x = x if x < 0 else -x
goto(x, 0)
pendown()
def curve_minkowski(length: float, iterations: int):
"""This function draw Minkowski's curve"""
if iterations == 0:
forward(length * 4)
else:
curve_minkowski(length/4, iterations - 1)
left(90)
curve_minkowski(length/4, iterations - 1)
right(90)
curve_minkowski(length/4, iterations - 1)
right(90)
curve_minkowski(length/4, iterations - 1)
curve_minkowski(length/4, iterations - 1)
left(90)
curve_minkowski(length/4, iterations - 1)
left(90)
curve_minkowski(length/4, iterations - 1)
right(90)
curve_minkowski(length/4, iterations - 1)
LENGTH = 100 # длина линии
ITERATION = 3 # номер итерации
start(LENGTH * 2)
curve_minkowski(LENGTH, ITERATION)
exitonclick() # функция чтобы программа не завершалась сразу
Пример алгоритма на Python с помощью системы Линденмайера
import turtle
turtle.hideturtle()
turtle.tracer(0)
turtle.penup()
turtle.setposition(-150, 0)
turtle.pendown()
axiom, tempAx, logic, iterations = 'F', '', {'F': 'F-F+F+FF-F-F+F'}, 3
for i in range(iterations):
for j in axiom:
tempAx += logic[j] if j in logic else j
axiom, tempAx = tempAx, ''
for k in axiom:
if k == '+':
turtle.left(90)
elif k == '-':
turtle.right(90)
else:
turtle.forward(5)
turtle.update()
turtle.mainloop()
Пример алгоритма на PHP
<?php
$i = 2;
$image = imagecreatetruecolor(600, 400);
imagefilledrectangle($image, 0, 0, imagesx($image) - 1, imagesy($image) - 1,
imagecolorresolve($image, 255, 255, 255));
$color = imagecolorresolve($image, 0, 0, 0);
drawMinkowski($image, 0, imagesy($image) / 2, imagesx($image), imagesy($image) / 2, $i, $color);
/**
* Draws minkowski curve between two points.
* @return void
*/
function drawMinkowski($image, $xa, $ya, $xi, $yi, $i, $color) {
if($i == 0)
imageline($image, $xa, $ya, $xi, $yi, $color);
else {
// C---D
// | |
// A---B E H---I
// | |
// F---G
$xb = $xa + ($xi - $xa) * 1/4;
$yb = $ya + ($yi - $ya) * 1/4;
$xe = $xa + ($xi - $xa) * 2/4;
$ye = $ya + ($yi - $ya) * 2/4;
$xh = $xa + ($xi - $xa) * 3/4;
$yh = $ya + ($yi - $ya) * 3/4;
$cos90 = 0;
$sin90 = -1;
$xc = $xb + ($xe - $xb) * $cos90 - $sin90 * ($ye - $yb);
$yc = $yb + ($xe - $xb) * $sin90 + $cos90 * ($ye - $yb);
$xd = $xc + ($xe - $xb);
$yd = $yc + ($ye - $yb);
$sin90 = 1;
$xf = $xe + ($xh - $xe) * $cos90 - $sin90 * ($yh - $ye);
$yf = $ye + ($xh - $xe) * $sin90 + $cos90 * ($yh - $ye);
$xg = $xf + ($xh - $xe);
$yg = $yf + ($yh - $ye);
drawMinkowski($image, $xa, $ya, $xb, $yb, $i - 1, $color);
drawMinkowski($image, $xb, $yb, $xc, $yc, $i - 1, $color);
drawMinkowski($image, $xc, $yc, $xd, $yd, $i - 1, $color);
drawMinkowski($image, $xd, $yd, $xe, $ye, $i - 1, $color);
drawMinkowski($image, $xe, $ye, $xf, $yf, $i - 1, $color);
drawMinkowski($image, $xf, $yf, $xg, $yg, $i - 1, $color);
drawMinkowski($image, $xg, $yg, $xh, $yh, $i - 1, $color);
drawMinkowski($image, $xh, $yh, $xi, $yi, $i - 1, $color);
}
}
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
Примечания
[править | править код]- ↑ Слюсар, В. Фрактальные антенны. Принципиально новый тип «ломаных» антенн. Часть 2. Электроника: наука, технология, бизнес. — 2007. — № 6. С. 85. (2007). Дата обращения: 6 мая 2020. Архивировано 3 апреля 2018 года.
- ↑ Вишневский В. М., Ляхов А. И., Портной С. Л., Шахнович И. В. Широкополосные беспроводные сети передачи информации. — М.: Техносфера. — 2005.- C. 498—569
Литература
[править | править код]- Вишневский В. М., Ляхов А. И., Портной С. Л., Шахнович И. В. Широкополосные беспроводные сети передачи информации. — М.: Техносфера. — 2005.- C. 498—569.
Ссылки
[править | править код]В статье не хватает ссылок на источники (см. рекомендации по поиску). |