2020. augusztus 23., vasárnap

Fraktál létrehozása python segítségével

 Egyszerű alakzatokból bonyolult alapzatok létrehozása.


WIKI link


---Python minta:

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt


PIXEL_SCALE = 200

WIDTH = 3

HEIGHT = 3

XSTART = -2

YSTART = -1.5


image_width = int(PIXEL_SCALE*WIDTH)

image_height = int(PIXEL_SCALE*HEIGHT)


def create_color(v):

    values = [0, 64, 128, 196]

    b = values[v % 4] 

    g = values[(v//4) % 4] 

    r = values[(v//16) % 4]

    return (r, g, b)



def calc(c1, c2):

    x = y = 0

    for i in range(1000):

        x, y = x*x - y*y + c1, 2*x*y + c2

        if x*x + y*y > 4:

            return i+1

    return 0


array = np.zeros((image_height,

                  image_width,

                  3),

                 dtype=np.uint8)


for i in range(image_width):

    c1 = XSTART + i/PIXEL_SCALE

    for j in range(image_height):

        c2 = YSTART + j/PIXEL_SCALE

        v = calc(c1, c2)

        array[j, i,] = create_color(v)


img = Image.fromarray(array)

# img.save('mandelbrot-colour.png')

plt.imshow(img, cmap='hot')

plt.axis("off")

plt.show()







---Python minta:

import math

from random import randint

from collections import namedtuple

# const - upper limit for randint

s = 20

class Point(namedtuple('Point', 'x y')):

    def __str__(self):

        return'{} {}'.format(self.x, self.y)


    def __add__(self, other):

        assert isinstance(other, Point)

        return Point(self.x + other.x, self.y + other.y)


    def __mul__(self, other):

        return Point(self.x * other, self.y * other)


    def __rmul__(self, other):

        return self.__mul__(other)



class Branch(namedtuple('Branch', 'p1 p2 color size')):


    def __str__(self):

        """Path SVG object with points, color and stroke of branch."""

        return ('<path d="M {p1} L {p2}" '

                'stroke="rgb(100,{c},0)" stroke-width="{w}"/>\n'.

                format(p1=self.p1, p2=self.p2, w=self.size, c=self.color))


    def __repr__(self):

        return self.__str__()



class Tree(object):


    def __init__(self, length, angle, depth, point, size, color, outlist):

        """Main point of start generation."""

        self.branches = outlist

        self.draw_branches(length, angle, depth, point, size, color)


    def draw_branches(self, length, angle, depth, p1, size, color):

        """ Recursively generate three Branch objects per iteration."""

        if depth <= 0:

            return


        p2 = p1 + length * Point(

            math.cos(math.radians(angle)),

            math.sin(math.radians(angle))

        )


        # set some new characteristics for the next level

        branch_length = 2.0 / 3.0 * length

        branch_size = 2.0 / 3.0 * size + 1

        color += 6


        # Calculate new angle and recurse

        self.branches.append(Branch(p1, p2, color, branch_size))

        nangle = angle + randint(-10, s)

        self.draw_branches(branch_length, nangle, depth - 1,

                           p2, branch_size, color)


        # Calculate new angle and recurse

        b = Point(p1.x, p2.y)

        self.branches.append(Branch(p1, b, color, branch_size))

        nangle = angle + randint(-1, 0) * randint(1, s)

        self.draw_branches(branch_length, nangle, depth - 1,

                           b, branch_size, color)


        # Calculate new angle and recurse

        c = Point(-p2.x + 2 * p1.x, p2.y)

        self.branches.append(Branch(p1, c, color, branch_size))

        nangle = angle + randint(0, 1) * randint(1, s)

        self.draw_branches(branch_length, nangle, depth - 1,

                           c, branch_size, color)


    def write_svg(self, output='kl_py_fractral_20.svg'):

        with open(output, 'w') as outfile:

            outfile.write('<svg xmlns="http://www.w3.org/2000/svg" '

                          'viewBox="0 0 800 800" version="1.1">\n')

            outfile.writelines(map(str, self.branches))

            outfile.write('</svg>\n')



resultlist = [Branch(Point(400, 800), Point(400, 600), color=60, size=35)]

t = Tree(length=200, angle=-20, depth=9, point=Point(400, 600), size=35, color=60, outlist=resultlist)

t.write_svg()








Néhány látványos minta:





















Minta link

2020. augusztus 21., péntek

Térkép pontok (nevezetes helyek animált megjelenítése)

Térkép animáció készítése (openlayers JS segítségével) 

Minta a használatra Link


Térkép pontok felvétele után a pontok közötti átmenet animációt hozz létre amely prezentációra is alkalmas.

Pl. : Hol jártunk a nyáron?


Szép magyar tavak a térképen (minta)

https://youtu.be/cU-ZuNfmIHY

https://nationalmap.gov.au/#share=s-j2wl49Vo1g1O8W1GBTYpH6eUDFR  (megtekintés, lejátszás)


Itt lehetőség van saját animáció elkészítésére és elérési link készítésre is.


A tartalom html oldalba is beágyazható:

<iframe style="width: 720px; height: 600px; border: none;" src="https://nationalmap.gov.au/#share=s-j2wl49Vo1g1O8W1GBTYpH6eUDFR" allowFullScreen mozAllowFullScreen webkitAllowFullScreen></iframe>

2020. augusztus 11., kedd

Django alapok

Django installálás és használatba vétel


Release naptár : (forrása https://www.djangoproject.com/download/)




Lépések:


rem install

conda install -c anaconda django 


rem ellenőrzése a verziónak (3.1)

python -m django --version 


rem kedő project létrehozása

django-admin startproject mysite


rem létrejött project könyvtárba belépés

cd mysite


rem django project elindítása

python manage.py runserver 


---

(base) C:\Users\User\mysite>python manage.py runserver

Watching for file changes with StatReloader

Performing system checks...


System check identified no issues (0 silenced).


You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.

Run 'python manage.py migrate' to apply them.

August 11, 2020 - 19:30:20

Django version 3.1, using settings 'mysite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

[11/Aug/2020 19:30:27] "GET / HTTP/1.1" 200 16351

[11/Aug/2020 19:30:27] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423

[11/Aug/2020 19:30:27] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876

[11/Aug/2020 19:30:27] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184

[11/Aug/2020 19:30:27] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692

Not Found: /favicon.ico

[11/Aug/2020 19:30:27] "GET /favicon.ico HTTP/1.1" 404 1972



Installálás:



(base) C:\Users\User>conda install Django
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\User\Anaconda3

  added / updated specs:
    - django


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    asgiref-3.2.10             |             py_0          19 KB  conda-forge
    conda-4.8.4                |   py37hc8dfbb8_2         3.1 MB  conda-forge
    django-3.1                 |             py_0         3.8 MB  conda-forge
    sqlparse-0.3.1             |             py_0          30 KB  conda-forge
    ------------------------------------------------------------
                                           Total:         6.9 MB

The following NEW packages will be INSTALLED:

  asgiref            conda-forge/noarch::asgiref-3.2.10-py_0
  django             conda-forge/noarch::django-3.1-py_0
  sqlparse           conda-forge/noarch::sqlparse-0.3.1-py_0

The following packages will be UPDATED:

  conda                                4.8.3-py37hc8dfbb8_1 --> 4.8.4-py37hc8dfbb8_2


Proceed ([y]/n)? y


Downloading and Extracting Packages
sqlparse-0.3.1       | 30 KB     | ############################################################################ | 100%
conda-4.8.4          | 3.1 MB    | ############################################################################ | 100%
asgiref-3.2.10       | 19 KB     | ############################################################################ | 100%
django-3.1           | 3.8 MB    | ############################################################################ | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done



A project elérési útvonal:


c:\Users\User\mysite\manage.py




WEB elérési cím:


vagy








Más porton indítás lehetősége (paraméterben meg kell adni a port számot)


python manage.py runserver 4345



settings.py file tartalma

Ez a file vezérli többek között az adatbázishoz kapcsolódást (c:\Users\User\mysite\mysite\settings.py)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


Különböző adatbázis kapcsolódási lehetőségek:


MySQL        django.db.backends.mysql 
Oracle         django.db.backends.oracle 
PostgreSQL django.db.backends.postgresql_psycopg2 
SQLite         django.db.backends.sqlite3



Szükség lehet az adatbázis kapcsolat installálásra is:


PostgreSQL   psycopg2             pip install psycopg2 
MySQL          mysql-python       pip install mysql-python 
Oracle            cx_Oracle           pip install cx_Oracle


url.py file tartalma

Ez a file szolgál a HTML konfiguráció beállításra (c:\Users\User\mysite\mysite\urls.py)


from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]


Beállítási változtatások :

Új alkalmazás modull létrehozása CMD paranccsal:
python manage.py startapp polls



Létrejön az új könyvtár amelybe új filet hozunk létre

---polls/views.py   új file
from django.http import HttpResponse

def index(request):
    return HttpResponse("Üdvözöllek az új WEB lapon. (ez a polls könyvtár beállításai alapján jelenik meg)")


---polls/urls.py  új file
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

--- mysite/urls.py file tartalma:
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]


Új web lap elérése:







Admin belépés linkje:













Markdown jelőlés használat (Jupyter-nél)

 Markdown jelőlés használat (Jupyter-nél)


A Jupyter (python nyelvi környezet) egyik előnye a program mellet elhelyezett dokumentációs cellák használata.


A  Markdown cellában használatos jellölesek és jelentésük:



# Markdown cella fejléc 1.

## Markdown cella fejléc 2.

### Markdown cella fejléc 3.

**Ez itt félkövér**

*Ez meg dőlt*

| Ez  | meg itt |

| --- | ---  |

| egy | táblázat |


 Latex szerkezet:

$$

    \frac{1}{n}\sin x=    \frac{sinx}{n}=    \frac{sixn}{n}=    six\frac{n}{n}=six=6

$$


Képek beillesztése:

![interpreted](https://runestone.academy/runestone/books/published/thinkcspy/_images/interpret.png)

![compiled](https://runestone.academy/runestone/books/published/thinkcspy/_images/compile.png)


Szöveg kiemelés nyelvi értelmezéssel:

~~~python

 pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)

 ~~~

Jupyter notebook trükkök

  Hogyan jelezhetjük a felületen hogy elkészült a program futása? ## Java scrip felugró ablak: %%javascript alert("Kész vagyok!&qu...