niedziela, 30 października 2016

Proof Without Words: The Circle - YouTube

Dowód na poprawność wzoru na pole koła - bez słów.


Fraktale - trójkąt Sierpińskiego


  • Zaznacz trzy punkty.

  • Postaw kropkę długopisem w dowolnym miejscu.

  • Powtarzaj do znudzenia poniższe czynności.

    • Wylosuj jeden z trzech punktów.

    • Postaw kropkę w połowie drogi od ostatniej kropki do wylosowanego punktu.
Co Tobie wyszło? Trójkąt Sierpińskiego!

Podejrzewam i nie dziwię się, że mogłeś (mogłaś) nie wykonać powyższego przepisu, dlatego poniżej możesz zrobić to jednym kliknięciem w Run.


Kod generujący


# -*- coding: utf-8 -*-
"""Program rysujacy Trojkat Sierpinskiego na podstawie losowania
jednego z trzech punktow trojata rownobocznego."""
import turtle
import random

def w_polowie_drogi(od, do):
    x = 0.5 * (od[0] + do[0])
    y = 0.5 * (od[1] + do[1])
    return x, y

def przesun(punkt, wektor):
    x, y = punkt
    dx, dy = wektor
    return (x + dx, y + dy)


def pozdrowienia():
    turtle.setpos((-170, 90))
    turtle.write("Dziekuje i pozdrawiam! Pawel", font=("Arial", 20, "normal"))

KROK = 300  # dlugosc boku rysowanego trojkata
ILE_KROPEK = 1000  # ile kropek ma byc postawione w trakcie calej animacji
OKRES_ODSWIEZENIA = 10  # co ile kropek pokazywac rysunek
WIERZCHOLKI = [(0, 0), (KROK, 0), (KROK / 2, KROK / 2 * 3 ** 0.5)]
WIERZCHOLKI = map(lambda punkt: przesun(punkt, (-KROK / 2, -KROK * 3 ** 0.5 / 3)), WIERZCHOLKI)

def rysuj():
    turtle.tracer(0, 0)  # wylaczenie animacji co KROK, w celu przyspieszenia
    turtle.hideturtle()  # ukrycie glowki zolwika
    turtle.penup() # podnosimy zolwia, zeby nie mazal nam linii podczas ruchu

    ostatnie_rysowanie = 0  # ile kropek temu zostal odrysowany rysunek

    for i in xrange(ILE_KROPEK):
        # losujemy wierzcholek do ktorego bedziemy zmierzac
        do = random.choice(WIERZCHOLKI)
        # bierzemy nasza aktualna pozycje
        teraz = turtle.position()
        # ustawiamy sie w polowie drogi do wierzcholka, ktorego wczesniej obralismy
        turtle.setpos(w_polowie_drogi(teraz, do))
        # stawiamy kropke w nowym miejscu
        turtle.dot(1)
        ostatnie_rysowanie += 1
        if ostatnie_rysowanie == OKRES_ODSWIEZENIA:
            # postawilismy na tyle duzo kropek, zeby odswiezyc rysunek
            turtle.update()
            ostatnie_rysowanie = 0

    pozdrowienia()

    turtle.update()

if __name__ == "__main__":
    rysuj()

 

Zagadka o misjonarzach i kanibalach w PyGame

W ramach zabawy z nowo rozpoczętym na studiach przedmiotem nazwanym Sztuczna Inteligencja i Systemy Doradcze postanowiłem zaimplementować przeszukiwanie przestrzeni stanów problemu misjonarzy i kanibali.

Problem brzmi następująco: na brzegu rzeki stoi trzech misjonarzy, trzech kanibali łódka mieszcząca co najwyżej dwie osoby. Wszystkie sześć osób chce przedostać się na drugą stronę rzeki za pomocą łódki, każdy potrafi wiosłować.

Jedyną trudnością jest to, że pozostawienie na którymś brzegu rzeki większej liczby kanibali niż misjonarzy kończy się zjedzeniem misjonarzy.

Jeśli przy którymś brzegu stoi łódka, to liczba kanibali (misjonarzy), przy tym brzegu jest sumą kanibali (misjonarzy) w łodzi i stojących na tym brzegu.

Poniżej zamieszczam kod, który prezentuje rozwiązanie dla dowolnej liczby kanibali, misjonarzy i dowolnej pojemności łódki. Wyjście programu dla opisanego wyżej przypadku wygląda następująco.
M M M K K K  |
M M M K      | K K
M M M K K    | K
M M M        | K K K
M M M K      | K K
M K          | M M K K
M M K K      | M K
K K          | M M M K
K K K        | M M M
K            | M M M K K
M K          | M M K K
             | M M M K K K

https://gist.github.com/samorajp/a182fb22eb59fe89b620#file-misjonarze-py

Dodatkowo napisałem aplikację przy pomocy biblioteki PyGame, która przestawia rozwiązanie interaktywnie.
Kod programu wrzucony na githuba znajduje się poniżej:
https://gist.github.com/samorajp/66bbc1760b854e8ff3f1#file-pygame_vis-py
Do działania powinno wystarczyć posiadanie zainstalowanej biblioteki PyGame oraz umieszczenie w jednym katalogu pliku misjonarze.py i pygame_vis.py.




piątek, 28 października 2016

Four Dimensional Maths: Things to See and Hear in the Fourth Dimension with Matt Parker - YouTube

Poznany przeze mnie parę lat temu na kanale Numberphile (i z tego powodu czasem już nieco dla mnie przewidywalny) Matt Parker prezentuje różne matematyczne rzeczy - i reklamuje swoją książkę.

W skrócie:
- sztuczka z wyliczeniem pierwiastka sześciennego liczby,
- kostka Rubika,
- efektywne sznurowanie butów,
- pierścienie boromejskie i nieco teorii węzłów,
- ciekawe wstawki o przeplataniu się biologii i teorii węzłów (bakterie(?), które minimalizują ilość użytego enzymu do cięcia DNA, które trzeba rozplątać)
- wstęga Möbiusa i jej warianty,
- i najciekawsze w tej prezentacji dla mnie: wizualizacje i intuicja czwartego wymiaru.

[embed]https://www.youtube.com/watch?v=1wAaI_6b9JE[/embed]