• Nie Znaleziono Wyników

Wykład 5: Visual Python

N/A
N/A
Protected

Academic year: 2021

Share "Wykład 5: Visual Python"

Copied!
27
0
0

Pełen tekst

(1)

Wykład 5: Visual Python

Andrzej Krajka

(2)

Biblioteka numpy

Numpy

 rozszerzenie PYTHONa do wielowymiarowych tablic (wzorowane na MATLABie)

 bliska C wydajność

 adresowana do obliczeń naukowych Obiekty:

- array([[0.1, 1, 2.1], [3.1, 4, 5]])

(ones(2,3), zeros(4), diag(array([1,2,3,4])))

 typy int64. float64, complex128, Operacje na macierzach:

 Ze skalarem: 2**a, a+1, a*3

 Macierzowo: a+b, a-b, a.dot(b),

 Punktowo: a*b, a==b, a|b, a&b

(3)

Wektory w VPYTHONie

Trójwymiarowe np.

v1=vector(1.1,2,5) v2=vector(3,1) # (3,1,0)

do współrzędnych odwołujemy się v1.x, v1.y, v1.z lub v1[0]

Wektory można:

v1+v2 - dodawać

2*v1 - mnożyć przez skalar mag(v1) - długość wektora v1

mag2(v1) - długość do kwadratu wektora v1 norm(v1) - wektor unormowany (=v1/mag(v1))

v1.diff_angle(v2) – kąt pomiędzy wektorami v1 i v2 cross(v1,v2) – iloczyn wektorowy (v1 x v2)

dot(v1,v2) – iloczyn skalarny v1 i v2 (v1 ° v2)

v2=rotate(v1, angle=theta, axis=(1,1,1)) – obrót o kąt wektora wokół osi

2 2

2

1 . 1 .

.

1 x v y v z

v  

(4)

Vpython – dodatkowe informacje

Tworzenie i usuwanie obiektów:

ball.visble=0 ball.visible=True Szybkość animacji:

rate(n) – n obrotów pętli na sekundę Kolory:

RGB c=(1,1,0)

mnemoniki color.red, color.green, color.blue,

color.magenta, color.yellow, color.orange, color.cyan, color.black, color.white

C1=color.rgb_to_hsv(C2)

C2=color.hsv_to_rgb(C1)

(5)

Obiekt cylinder

rod=cylinder(pos=(0,2,1), axis=(5,0,0),radius=1) rod.color = (0,0,1)

rod.red = 0.4

rod.green = 0.7

rod.blue = 0.8

rod.pos = (2,2,-1)

(6)

Obiekt arrow

rod=arrow(pos=(0,2,1),axis=(5,0,0), shafwidth=1)

(7)

Obiekt cone

rod=cone(pos=(5,2,0), axis=(12,0,0), radius=1)

(8)

Obiekt pyramid

rod=pyramid(pos=(5,2,0), size=(12,6,4))

(9)

Obiekt sphere

rod=sphere(pos=(5,2,0), radius=6)

(10)

Obiekt ring

rod=ring(pos=(1,1,1), axis=(0,1,0), radius=0.5,

thickness=0.1)

(11)

Obiekt box

rod=box(pos=(3,5,2), length-4, height=3, width=4)

(12)

Obiekt ellipsoid

rod=ellipsoid(pos=(3,5,2), length-4, height=3,

width=4)

(13)

Obiekt convex

rod=convex(pos=[(3,5,2), (2,5,1), …])

Punkty które powodują, że figura nie jest wypukła są odrzucane

Punkty mogą być dodawane kolejno (metoda append z parametrami pos, color itp.), zadane parametrycznie:

t=arange(1,10,1) pos=(sin(t), 1/(1.0+t*t), exp(-t)) lub

x=arange(1,10,1) rod.y=sin(x) rod.z=cos(x)

(14)

Obiekt curve

rod=curve(pos=[(3,5,2), (2,5,1), …])

Podobnie jak convex – 2D lub 3D punkty na których rozpina

się krzywą

(15)

Shape library

rt = shapes.rectangle(pos=(-2,3), width=5, height=3, rotate=pi/6, roundness=0.1, invert=False, scale=2, thickness=0.1)

cr = shapes.circle(radius=2, np=64) el = shapes.ellipse(width=5, height=3)

ar = shapes.arc(radius=2, angle1=0, angle2=pi/2) tr = shapes.triangle(length=5)

pt = shapes.pentagon(length=5) hx = shapes.hexagon(length=5)

poly = shapes.ngon(np=7, length=5) st = shapes.star(n=5)

tr=shapes.trapezoid(pos=(-2,3), width=5, height=1, top=3) st = paths.cross(width=10, thickness=2)

pl = shapes.pointlist(points=[(1,0),(1,1),(-2,3),(1,0)],rotate=pi/4) pl = shapes.text(text="Hello!")

g = shapes.gear()

(16)

Obiekt extrusion

ex = extrusion(pos=..., shape=...)

Wtłaczanie 2D wymiarowego obiektu wokół 3D wymiarowego kształtu

1. Utwórz 2D wymiarowy kształt (lub skorzystaj z biblioteki shapes)

2. Zdefiniuj 1D wymiarowa ścieżkę (krzywą) po której 2D wymiarowy kształt ma się przemieszczać

3. Określ jak ma się skręcać (obracać) 2D wymiarowy kształt

(17)

Obiekt extrusion – parametry (ważniejsze)

ex = extrusion(pos=..., shape=...)

pos[] tablica określająca ścieżkę (1D krzywa).

x[], y[], z[] współrzędne pos (domyślnie [0,0,0,0,...])

color[] kolor punktów

red[], green[], blue[] współrzędne color

up kontrola orientacji w chwili początkowej (domyślnie (0,1,0))

visible czy widoczny (domyślnie True)

material materiał pokrywający 2D obiekt z biblioteki materials

(C:\Python27\Lib\site-packages\vis\materials.py) – zależy od karty graficznej, często nie działa

shape zbiór konturów opisujacych kształt 2D

scale tablica xy scalujących czynników w osiach OX i OY (domyślnie [(1,1,), (1,1), ...])

xscale , yscale wektor 1 i 2 współrzędnych scale (domyslnie każdy [1, 1, ...])

twist tablica obrotów (w radianach) względem poprzedniego punktu

(domyślnie [0, 0, 0, ...]) Pierwszy twist[0] jest ignorowany. Wartość dodatnia –

zgodnie z ruchem wskazówek zegara, ujemna – odwrotnie

(18)

Obiekt faces

f = faces(pos=…, color=..., normal=…, )

Służy do stworzenia własnego 3D wymiarowego obiektu. Tworzy się taki obiekt z małych trójkątów pokrywających ten kształt

pos[] tablica określająca współrzędne trójkątów (np.:

v1=array([[0.,0.,0.1],[0.,0.1,0.],[0.1,0.,0.]]) v2=array([[1,1,1], [1,1,1], [1,1,1]])

v3=vector([-1,0-1,-1]) f=frame()

model=faces(pos=v1, color=v2, normal=v3, frame=f) model.smooth_shade(doublesided=0)

Inne metody:

.make_twosided()

.smooth(0.8)

.make_normals()

(19)

Obiekt frame

Służy do grupowania innych obiektów, np.:

f = frame()

cylinder(frame=f, pos=(0,0,0), radius=0.1, length=1,         color=color.cyan)

sphere(frame=f, pos=(1,0,0), radius=0.2, color=color.red) f.axis = (0,1,0) # zmiana orientacji obu obiektów

f.pos = (-1,0,0) # zmiana pozycji obu obiektów

Uwaga! Kula sphere ma współrzędne środka (1,0,0) względem ramki.

Współrzedne możemy przeliczać dwoma funkcjami:

world_pos = f.frame_to_world(frame_pos) frame_pos = f.world_to_frame(world_pos)

Obiekty w ramce przechodzimy np.:

for obj in f.objects:

    obj.color = color.red

(20)

Obiekt helix

rod = helix(pos=(0,2,1), axis=(5,0,0), radius=0.5) Sprężyna. Ma parametry (w nawiasie domyślne):

pos (0,0,0), x (0), y(0), z(0), axis (1,0,0),

length (1), radius (1), coils (5), thickness (radius/20), color (1,1,1)=color.white, red (1), green (1), blue (1), material,

up (0,1,0

(21)

Obiekt label

rod = label(pos=ball.pos, height=16, text=‘Etykieta nr %d’ % (12), xoffset=20, yoffset=12, space=ball.radius, border=6, font=„sans”) Parametry (w nawiasie domyślne):

pos; x,y,z – współrzędne etykietowanego punktu (0,0,0)

xoffset, yoffset – wsp. linii do etykiety

text - Tekst do wyświetlenia (może być z „\n” i znakami formatującymi)

font – Nazwa fontu np., 'sans', 'serif', 'monospace’

height - szerokość fontu w pikselach (13)

color, red, green, blue – kolor tekstu (scene.foreground)

background - kolor tła etykiety (scene.background)

opacity – przezroczystość etykiety (0.66, 0- widoczny, 1-przezroczysty)

border – ramka w pikselach wokół etykiety

box - True jeśli ranka wokół etykiety ma być narysowana

line - True jeśli linia do etykiety ma być narysowana

linecolor – kolor linii and ramki

space – promień w pikselach wokół pos gdzie linia ma

nie być rysowana

(22)

Obiekt text

rod=text(text='My text is\ngreen‘, align='center', depth=-0.3,

color=color.green)

Do wyświetlania na przykład 3D tekstu np. w obrebie etykiety. Parametry:

pos; x,y,z

align = 'left' (domyślne), 'right', 'center'.

text – tekst do wyświetlania font – Nazwa fontu 'sans', 'serif'

(domyślny), 'monospace‘ lub np.

"Times“ lub "Verdana". '.

height – wysokość liter w pikselach depth – grubość tekstu (efekt 3D)

(domyslne 0.2)

width - szerokośc wyświetlanego tekstu (jak wektor to linii tekstu)

axis – oś wyznaczająca podstawe tekstu ((1,0,0)).

descent – wysokość o ile mniejsze są małe litery od dużych (0.3 x wys.

dużych)

vertical_spacing – pionowy odstęp między liniami

color, red, green, blue – kolor material – materiał jak np.

materials.wood.

upper_left, upper_right, lower_right, lower_left – ramka ograniczająca tekst start - Początek tekstu w linii (jak wektor

to dla każdej linii tekstu).

up – zachowanie tekstu w ramce spacing – odstęp pomiędzy literami

(0.03)

twosided – True gdy można ten obiekt

obracać

(23)

Kontrolowanie okien

okno = display(title=‘Przyklad‘, x=0, y=0, width=600, height=200, center=(5,0,0), background=(0,1,1))

Polecenie display() tworzy i wyświetla okno o zadanych parametrach. Na początku zawsze jest tworzone jedno domyślne okno o nazwie scene (można zmieniać jego parametry)

select() – wybór okna (display.get_selected() – wybrane okno)

foreground, background – kolor obiektów ((1,0,0)) i tła (czarny)

stereo – opcje do oglądania stereoskopowego (np. ‘redcyan’, ‘crosseyed’,

‘passive’, ‘active’)

ambient – bezkierunkowe oświetlenie okna (0.2)

lights - wektor świecenia od (0,0,0) do wsp. światła.

cursor.visible – widoczność kursowa (True, False)

objects – atrybut zwracający listę obiektów w oknie Parametry kontroli okna:

x,y – miejsce okna na ekranie w pikselach

title – tytuł okna

visible - czy widoczne w danej chwili

fullscreen - True jeśli zajmuje czały monitor

exit – True to zamknięcie okna kończy program

(24)

Mysz – atrybut okna

Atrybuty myszy:

pos – 3D miejsce w którym jest mysz

button – (None, ‘left’, ‘right’ ‘middle’,’wheel’)

pick – najbliższy obiekt w oknie który jest pod kursorem lub None

pickpos – 3D wartość parametru pos obiektu „pod” myszą

camera – pozycja kamery

ray – jednostkowy wektor od kamery do myszy

project() – ustawia kursor myszy na planie

alt, ctrl, shift – True gdy wciśniety odpowiedni klawisz Zdarzenia myszy:

press, click, drag, drop, release –

wciśnięcie/puszczenie/przesunięcie/zwolnienie po drag/zwolnienie klawisza – ‘left’,’right’,’middle’, ‘None’

events – kolejka zdarzeń

getevent() – pobiera pierwsze w kolejce zdarzenie myszy

clicked getclick() – gdy interesuje nas tylko wciśniety lewy klawisz

(25)

Klawiatura – atrybut okna

Atrybuty klawiatury:

keys – True gdy wciśnięto jakiś klawisz Zdarzenia klawiatury:

keys() – True gdy wciśnięto jakiś klawisz

getkey() – pobiera znak wciśniętego klawisza z kolejki i

usuwa go z kolejki (jak litery to np. ‘c’, ‘A’, jak inne klawisze to np.:

‘shift+delete’,’backspace’, ‘F1’ , 'ctrl+alt+shift+f3‘). Jeżeli

długość łańcucha pobranego tą metodą jest 1 to jest to

pojedyncza litera a w przeciwnym razie jest to jakis znak

sterujący

(26)

Moduł visual.graph

Krzywe:

gcurve(gdisplay=…, pos=…, color=… ) gdots(gdisplay=…, pos=…, color=… )

gvbars(gdisplay=…, pos=…, color=…, delta=… ) ghbars(gdisplay=…, pos=…, color=…, delta=… )

ghistogram(gdisplay=…, bins=…, pos=…, color=…, delta=…

)

(delta-grubość)

for x in arange(0., 8.1, 0.1):

f.plot(pos=(x, 5.*cos(x)*exp(-x))) Okna:

gdisplay(x=0,y=0, width=800, height=400, title=„cos

tam”, xtitle=‘t’, ytitle=‘N’, xmax=50., xmin=-20., ymin=- 2E3, ymax=2E3, foreground=color.black,

background=color.white)

(27)

Biblioteka visual.controls

c=controls(title=„”, x=0, y=400, width=300, height=300, range=50) Kontolki:

button - klawisz

slider – do wpisywania liczb togle – przełącznik

menu – rozwijalne menu Atrybuty kontrolek:

pos – pozycja kontrolki color – kolor kontrolki

width, height – szerokość i wysokość kontrolki axis - orientacja kontrolki

length – długość slidera

min, max – minimaln i maksymalna wartość slidera

value – wartość togle lub slidera (d0 wpisania lub odczytu) text – tekst na przycisku lub tytuł menu

text0, text1 – tekst wyświetlany na dole/górze toggle

action – procedura którą należy wywołać gdy manipuluje się kontrolką items – punkt rozwijalnego menu np.:

m.items.append((‘Red’, lambda : prcolor(color.red)))

Cytaty

Powiązane dokumenty

Kopernika / Bema (174) 14 Ulica Witebska, Białystok Kopernika / Stacja Paliw (175) 38 Mikołaja Kopernika, Białystok Kopernika / Lokomotywownia (176) 65 Ulica Mikołaja

ZAMIEJSKIE ROZKŁADY JAZDY MPK ZB W ŁOMŻY aktualizacja na dzień: 01..

Kosmiczna →Zadzień Pętla: 12:30 (6) Najdziszów Pętla →Dąbie Szkoła: 04:33 - 16:06 (7) Najdziszów Pętla →Najdziszów Pętla: 14:01 - 15:01 (8) Sadowie Daleka →Dąbie

Jednakże, jak pokazano na rysunku 29.20c, te dwie siły nie działają wzdłuż tej samej prostej, tak więc powstaje wypadkowy moment siły.. Moment ten usiłuje obrócić ramkę tak,

9 Ulica Osiedle Robotnicze, Rogoźnik Dobieszowice Skrzyżowanie 2 Ulica Mickiewicza, Poland Dobieszowice Kościuszki. 47 Tadeusza Kościuszki, Dobieszowice Dobieszowice

07:14 - 16:05 (3) Tychy Sikorskiego Wiadukt →Wilkowyje Obywatelska: 08:32 - 21:04 (4) Tychy Towarowa →Tychy Dworzec PKP: 05:55 (5) Tychy Towarowa →Wilkowyje Obywatelska: 03:52 -

Pierwszy gracz powtarza ruch i tak na zmianę, aż jednemu z graczy uda się ustawić trzy swoje żetony w jednej linii – poziomo, pionowo lub

Najczęściej powtarza się zarzut, że to nie jest ko- szyk świadczeń gwarantowanych, lecz katalog procedur finansowanych przez NFZ.. Do pewnego stopnia zgadzam się z tą opinią, bo