Visual Python


Vektorji

Kaj so, kaj z njimi počnemo

Morda si opazil, da smo v prejšnjem poglavju definirali hitrost krogle kot vektor:

   krogla.hitrost=vector(1,0,0)

Funkcija vector()  je konstruktor in omogoča tvorbo nevidnih objektov, ki imajo več vgrajenih lastnosti in metod. Med njimi najdemo naslednje:

Vektorje lahko med seboj seštevamo, lahko jih tudi množimo s skalarno veličino.

Primer seštevanja:

   a = vector(1.,2.,3.)
   b = vector(4.,5.,6.)
   c = a + b               #ker sta a in b vektorja, bo tudi c vektor

Ugotavljanje magnitude

   d = mag(c)           # d je skalar
   z = mag(c)**2      # vektorja ne moremo kvadrirati,  njegovo magnitudo pa

Primer skalarnega množenja

   d = 3.*a              # d je vektor s komponentami (3., 6., 9.)

Primeri vektorskih produktov

   f = cross(a,b)     # vektorski produkt
    g = dot(a,b)      # skalarni  produkt
    h = norm(a)      # normaliziran  vektor, vektor enote

Primer - vodoravni met krogle

Oglejmo si znani fizikalni poskus, ko predmet vržemo vodoravno in začne padati pod vplivom gravitacije:  Spoznalo bomo, da so vektorji pripravna stvar za računanje trajektorij in drugih podobnih pojmov v 3D grafiki  fiziki, matematiki.

Tu je potreben program, ki ga najdemo tudi  v datoteki metKrogle.pyw:

from visual import *

krogla=sphere(radius=0.25,pos=(-1,1,0))

krogla.masa=2.0 #krogli smo dodali atribut z imenom "masa"

krogla.sled=curve() #sled bo prikazovala gibanje krogle

sila=vector(0,-20,0) #tvorimo vektor z imenom "sila". ta deluje le v smeri -y

krogla.hitrost=vector(5,0,0) #hitrost je tudi vektor. Zacetna hitrost je v smeri +x

krogla.pospesek=sila/krogla.masa
#Ker je sila vektor, masa pa skalar, je pospesek vektor (0,-10,0).
# krogla bo zato pospesevala navzdol

dt=.01

while krogla.pos.x<2:
scene.autoscale=0 # S tem le prekinemo stalno skaliranje scene.

rate(1/dt)

krogla.hitrost+=krogla.pospesek*dt #Hitrost se spreminja zaradi pospeska

krogla.pos+=krogla.hitrost*dt #osvezi polozaj krogle z upostevanjem hitrosti

krogla.sled.append(pos=krogla.pos) #risi sled za kroglo