منحنی Gosper در ، همچنین به عنوان شناخته شده پیانو-Gosper در منحنی ، [1] به نام پس از بیل Gosper در ، همچنین به عنوان شناخته شده flowsnake (یک اشتباه در تلفظ حروف از برف ریزه )، یک است منحنی فضای پر کردن که مجموعه ای محدود است هرزه -7. این منحنی فراکتال است که در ساختارش شبیه به منحنی اژدها و منحنی هیلبرت است .

  • منحنی گوسپر مرحله چهارم

  •  
  • خط از قرمز تا نقطه سبز یک مرحله از ساخت منحنی Gosper را نشان می دهد.

از منحنی Gosper نیز می توان برای خوشه بندی و نمایه سازی شش ضلعی سلسله مراتبی کارآمد استفاده کرد. [2]

 

فهرست

الگوریتم ویرایش ]

سیستم Lindenmayer ویرایش ]

منحنی Gosper را می توان با استفاده از یک سیستم L با قوانینی به شرح زیر نشان داد:

  • زاویه: 60 درجه
  • اصل: آ
  • قوانین جایگزینی:
    • A \ mapsto AB - B + A ++ AA + B-
    • B \ mapsto + A-BB - B-A ++ A + B

در این حالت ، هر دو A و B به معنای حرکت به جلو ، + به معنای چرخاندن سمت چپ 60 درجه و - به معنای چرخاندن راست 60 درجه - با استفاده از یک برنامه "لاک پشت" استایل مانند آرم است .

to rg :st :ln
make "st :st - 1
make "ln :ln / sqrt 7
if :st > 0 [rg :st :ln rt 60 gl :st :ln  rt 120 gl :st :ln lt 60 rg :st :ln lt 120 rg :st :ln rg :st :ln lt 60 gl :st :ln rt 60]
if :st = 0 [fd :ln rt 60 fd :ln rt 120 fd :ln lt 60 fd :ln lt 120 fd :ln fd :ln lt 60 fd :ln rt 60]
end

to gl :st :ln
make "st :st - 1
make "ln :ln / sqrt 7
if :st > 0 [lt 60 rg :st :ln rt 60 gl :st :ln gl :st :ln rt 120 gl :st :ln rt 60 rg :st :ln lt 120 rg :st :ln lt 60 gl :st :ln]
if :st = 0 [lt 60 fd :ln rt 60 fd :ln fd :ln rt 120 fd :ln rt 60 fd :ln lt 120 fd :ln lt 60 fd :ln]
end

The program can be invoked, for example, with rg 4 300, or alternatively gl 4 300.

Python[edit]

Python program, that uses the aforementioned L-System rules, to draw the Gosper curve using turtle graphics (online version):

import ​turtle


def gosper_curve(order: int, size: int, is_A: bool = True) -> None:
   ​"""Draw the Gosper curve."""
   ​if order == 0:
       ​turtle.forward(size)
       ​return
   ​for op in "A-B--B+A++AA+B-" if is_A else "+A-BB--B-A++A+B":
       ​gosper_op_map[op](order - 1, size)


gosper_op_map = {
   ​"A": lambda o, size: gosper_curve(o, size, True),
   ​"B": lambda o, size: gosper_curve(o, size, False),
   ​"-": lambda o, size: turtle.right(60),
   ​"+": lambda o, size: turtle.left(60),
}
size = 10
order = 3
gosper_curve(order, size)

خواص ویرایش ]

فضای پر شده توسط منحنی را جزیره گاسپر می نامند . چند تکرار اول از آن در زیر نشان داده شده است:

جزیره Gosper 0.svgجزیره Gosper 1.svgجزیره Gosper 2.svgجزیره Gosper 3.svgجزیره Gosper 4.svg

جزیره Gosper می تواند هواپیما را کاشی کند . در حقیقت ، می توان هفت نسخه از جزیره Gosper را به یکدیگر پیوند داد تا شکلی شبیه به هم داشته باشد ، اما با یک فاکتور 7 پوند در همه ابعاد تقسیم می شود. همانطور که از نمودار زیر مشاهده می شود ، انجام این عمل با تکرار متوسط ​​این جزیره منجر به یک نسخه کوچک شده از تکرار بعدی می شود. تکرار این روند به طور نامحدود به تولید موزاییک کاری از هواپیما. منحنی خود به همین ترتیب می تواند به یک منحنی نامحدود که تمام صفحه را پر می کند ، گسترش یابد.

Gosper Island Tesselation 2.svgGosper Island Tesselation.svg

منبع

https://en.wikipedia.org/wiki/Gosper_curve