{"id":22804845,"url":"https://github.com/pysrc/fractal","last_synced_at":"2025-04-22T07:05:57.700Z","repository":{"id":57432097,"uuid":"110393427","full_name":"pysrc/fractal","owner":"pysrc","description":"Draw fractal image by python.","archived":false,"fork":false,"pushed_at":"2018-09-19T09:08:06.000Z","size":4643,"stargazers_count":41,"open_issues_count":0,"forks_count":16,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-19T03:10:27.769Z","etag":null,"topics":["fractal","ifs","julia-sets","l-system","mandelbrot-sets"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pysrc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-12T01:04:15.000Z","updated_at":"2025-03-07T02:16:43.000Z","dependencies_parsed_at":"2022-09-02T12:40:46.372Z","dependency_job_id":null,"html_url":"https://github.com/pysrc/fractal","commit_stats":null,"previous_names":["chenl1994/fractal"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pysrc%2Ffractal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pysrc%2Ffractal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pysrc%2Ffractal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pysrc%2Ffractal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pysrc","download_url":"https://codeload.github.com/pysrc/fractal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249836907,"owners_count":21332357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fractal","ifs","julia-sets","l-system","mandelbrot-sets"],"created_at":"2024-12-12T10:09:37.245Z","updated_at":"2025-04-20T01:28:22.649Z","avatar_url":"https://github.com/pysrc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Draw  Fractal Image By Python\n\n## install \n\n`pip install fractal`\n\nOr download the package\n\n`python setup.py install`\n\nIf you want to speed up the calculation of Julia Set or Mandelbort Set, you can use the fractension module in C_Extension dir. But you must build the fractension module by yourself , the more details in [here](C_Extension/readme).\n\n## Examples\n\n### L-System\n\n\n\n```python\nfrom fractal import Pen\nfrom math import sqrt\np = Pen([350, 270])\np.setPoint([140, 60])\np.setWidth(1)\np.doD0L(omega=\"L\", P={\"L\": \"L+R\", \"R\": \"L-R\"},\n              delta=90, times=15, length=200, rate=sqrt(2))\np.wait()\n```\n\n![](fenxing_images/dragon.jpg)\n\n```python\nfrom fractal import Pen\n\np = Pen([500, 500], title=\"Window\")\np.setPoint([495, 495])\np.setAngle(90)\np.doD0L(omega=\"f+f+f+f\", P={\"f\": \"ff+f--f+f\"},\n        delta=90, times=5, length=490, rate=3)\np.wait()\n```\n\n![](fenxing_images/Window.jpg)\n\n```python\nfrom fractal import Pen\np = Pen([420,420])\np.setPoint([10,10])\np.doD0L(omega = \"L\", P = {\"L\": \"LFRFL-FF-RFLFR+FF+LFRFL\", \"R\": \"RFLFR+FF+LFRFL-FF-RFLFR\"}, delta =  90, times = 4, length = 200 , rate = 3)\np.wait()\n```\n\n![](fenxing_images/fass2.jpg)\n\n```python\nfrom fractal import Pen\np = Pen([400, 470])\np.setAngle(90)\np.setPoint([200,470])\np.doD0L(omega = \"f\", P = {\"f\": \"h[-f][+f]hf\", \"h\": \"hh\"}, delta = 25.7, times = 7, length = 400, rate = 2.17)\np.wait()\n```\n\n![](fenxing_images/tree4.jpg)\n\n```python\nfrom fractal import Pen\np = Pen([400, 470])\np.setAngle(90)\np.setPoint([170, 470])\np.doD0L(omega=\"f\", P={\"f\": \"h+[[f]-f]-h[-hf]+f\", \"h\": \"hh\"},\n        delta=22.5, times=6, length=400, rate=2.3)\np.wait()\n```\n\n![](fenxing_images/tree5.jpg)\n\n### IFS\n\n```python\nfrom fractal import IFS\nfrom random import random\n\ndef ifsp(x, y):\n    p = random()\n    if p \u003c 0.01:\n        return (0, 0.16 * y)\n    elif p \u003c 0.07:\n        if random() \u003e 0.5:\n            return (0.21 * x - 0.25 * y, 0.25 * x + 0.21 * y + 0.44)\n        else:\n            return (-0.2 * x + 0.26 * y, 0.23 * x + 0.22 * y + 0.6)\n    else:\n        return (0.85 * x + 0.1 * y, -0.05 * x + 0.85 * y + 0.6)\n\nob = IFS([400, 500], title = \"Leaf\")\nob.setPx(100, 100, 100)\nob.setIfsp(ifsp)\nob.doIFS(200000)\nob.wait()\n```\n\n![](fenxing_images/ifern.jpg)\n\n```python\n# Box IFS\nfrom fractal import IFS\nfrom random import randint\n\n\ndef ifsp(x, y):\n    p = randint(1, 5)\n    if p == 1:\n        return (x / 3, y / 3)\n    elif p == 2:\n        return (x / 3 + 2 / 3, y / 3)\n    elif p == 3:\n        return (x / 3 + 1 / 3, y / 3 + 1 / 3)\n    elif p == 4:\n        return (x / 3, y / 3 + 2 / 3)\n    else:\n        return (x / 3 + 2 / 3, y / 3 + 2 / 3)\n\nob = IFS([500, 500], title=\"Box\")\nob.setPx(490, 5, 5)\nob.setIfsp(ifsp)\nob.doIFS(200000)\nob.wait()\n```\n\n![](fenxing_images/ibox.jpg)\n\n```python\nfrom fractal import IFS\n\nifscode = [\n    [0.879, 0.054, -0.051, 0.878, 0.077, 0.123, 0.123],\n    [0.1, -0.193, 0.285, 0.224, 0.174, 0.169, 0.169],\n    [0.008, 0.135, 0, 0.204, 0.075, 0.074, 0.074],\n    [0.402, 0.045, 0.016, -0.197, 0.111, 0.193, 0.193]\n]\n\nifs = IFS([500, 500])\n# ifs.setCoordinate()\nifs.setPx(700, 0, 0)\nifs.setIfsCode(ifscode)\nifs.doIFS(200000)\nifs.wait()\n```\n\n![](fenxing_images/leaf.jpg)\n\n```python\nfrom fractal import IFS\n\ncode = [\n    [0.195, -0.488, 0.344, 0.443, 0.4431, 0.2452, 0.2],\n    [0.462, 0.414, -0.252, 0.361, 0.2511, 0.5692, 0.2],\n    [-0.637, 0, 0, 0.501, 0.8562, 0.2512, 0.2],\n    [-0.035, 0.07, -0.469, 0.022, 0.4884, 0.5069, 0.2],\n    [-0.058, -0.07, -0.453, -0.111, 0.5976, 0.0969, 0.2]\n]\n\nifs = IFS([500,500])\nifs.setCoordinate()\nifs.setPx(500, 0, 0)\nifs.setIfsCode(code)\nifs.doIFS(200000)\nifs.wait()\n```\n\n![](fenxing_images/itree.jpg)\n\n\n\n### Julia\n\n```python\nfrom fractal import Julia\nju = Julia([500, 500])\nju.setC(0 - 1j)\nju.doJulia(500)\nju.wait()\n```\n\n![](fenxing_images/ju2.jpg)\n\n**-1.25 + 0j**\n\n![](fenxing_images/ju6.jpg)\n\n![](fenxing_images/ju62.jpg)\n\n\n\n**-0.605-0.45j**\n\n![](fenxing_images/(-0.605-0.45j)1.jpg)\n\n![](fenxing_images/(-0.605-0.45j)2.jpg)\n\n![](fenxing_images/(-0.605-0.45j)3.jpg)\n\n### Mandelbrot\n\n\n\n```python\nfrom fractal import Mandelbrot\nman = Mandelbrot([500, 500])\nman.setRange(5, 5)\nman.doMandelbrot(200)\nman.wait()\n```\n\n![](fenxing_images/mandelbrot.jpg)\n\n![](fenxing_images/mandelbrot2.jpg)\n\n![](fenxing_images/mandelbrot3.jpg)\n\n![](fenxing_images/mandelbrot4.jpg)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpysrc%2Ffractal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpysrc%2Ffractal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpysrc%2Ffractal/lists"}