Operacije sa vektorima – aplikacija za vežbanje

Lekcija 6 od 14 · Processing

U nastavku je prikazana aplikacija za vežbanje sabiranja, oduzimanja dva vektora, upotrebom metode poligona vektora kao i metode paralelograma.Takođe je dodata i opcija množenje vektora skalarom. Potrebno je kreirati izraz sa vektorima, a zatim klikom na dugme "Practice", započeti vežbu. Da bi ste pogledali uvodni deo o operacijama sa vektorima i pisanje koda u Processing-u otvorite stranicu: Vektori u Processing-u

Sabiranje vektora

Vektori se mogu sabrati na dva naćina: metodom poligona i metodom paralelograma.

Metoda poligona

Neka su data dva vektora "a" i "b" (vektori obojeni svetlo plavom bojom na slici 1). Metoda poligona se sastoji u nadovezivanju jednog vektora na drugi, tako da se početak drugog poklapa sa završetkom prvog(translirani vektori a i b, sada obojeni teget plavom bojom na istoj slici). Rezultanta je novi vektor "c", čiji se početak poklapa sa početkom prvog, a kraj sa krajem drugog.(na slici1 obojen crvenom bojom). Sabiranje vektora, možete vežbati pomoću aplikacije "Operacije sa vektorima", koja se nalazi u nastavku, na istoj stranici, kao i video tutorijal za korišćenje iste.

Sabiranje vektora metodom poligona
Slika 1: Sabiranje vektora metodom poligona

U slučaju sabiranja dva kolinearna vektora, rezultanta se dobija na sličan način samo što je ona sada u istoj liniji sa oba vektora, kao što se može videti na slici 2.

Sabiranje dva kolinearna vektora metodom poligona
Slika 2: Sabiranje dva kolinearna vektora metodom poligona

Metoda paralelograma

Ova metoda je prikazana na slici broj 3 i sastoji se u tome da se vektori prvo nadovežu jedan na drugi, tako da im se počeci poklapaju(teget obojeni vektori "a" i "b"), a zatim se docrta paralelogram, tako da ti vektori predstavljaju različite stranice paralelograma. Rezultantni vektor je vektor čiji je početak zajednički sa oba vektora koji se sabiraju i proteže se preko dijagonale paralelograma, što se može videti na slici.

Sabiranje dva vektora metodom poligona
Slika 3. Sabiranje dva vektora metodom poligona

Oduzimanje vektora

Oduzimanje dva vektora "a-b" se svodi na sabiranje vektora i vektora b sa suprotnim pravcem, tj. vektorom koji je u ravni vektora zaokrenut za 180 stepeni. Oduzimanje vektora je prikazano na slici 4. Svetlo plavi vektori "a" i "b" su polazni vektori. Oni se u slučaju metode poligona sila nadovežu jedan na drugi(sada obojeni teget bojom) kao i kod sabiranja vektora, a zatim se vektor sa predznakom minus zaokrene za 180 stepeni, tako da ostane istog pravca, ali suprotnog smera, što se može i videti na slici 4. Rezultanta je sad vektor čiji je početak u početku vektora "a", a kraj se poklapa sa krajem vektora "-b"(obojena crveno).

Oduzimanje dva vektora
Slika 4: Oduzimanje dva vektora

Kada su vektori kolinearni, prvo se nadovežu vektori "a" i "b" jedan na drugi, a zatim se vektor "b" okrene za 180 stepeni, da bi postao vektor "-b", tj. vektor koji ima isti intenzitet i pravac kao vektor "b", ali suprotan smer(vektori obojeni teget plavom bojom na slici 5). Rezultanta je vektor "c", čiji se početak poklapa sa vektorom "a", a kraj sa krajem vektora "(-b)"(crveno obojena na slici 5)

Picture
Slika 6: Oduzimanje kolinearnih vektora;

Množenje vektora skalarom

Pretpostavimo da je zadat vektor a(20,10) i da treba da se odredi vektor c=3*a.
Množenje vektora sa skalarom(3 u ovom primeru) se vrši tako što se intenzitet vektora poveća 3 puta, dok pravac i smer vektora ostaju isti.(vidi sliku 5).

Množenje vektora skalarom
Slika 5. Množenje vektora skalarom

Video tutorijal za korišćenje aplikacije: Operacije sa vektorima

Upotreba aplikacije na desktop računarima

Upotreba aplikacije na mobilnim uređajima

Interaktivna animacija: animacija sa starog sajta (processing.js) nije preneta na novi sajt. Kod i objašnjenje su u nastavku, a skeč možeš da pokreneš u Processing-u.

Razlaganje vektora na komponente

Vektor se može zameniti svojim komponentama u bilo koja dva pravca u ravni, ali mi ćemo razmotriti razlaganje vektora na pravce koordinatnih osa. Vektor "a" se npr može zameniti svojim komponentama ax i ay, koje su takođe vektori i čiji se pravac poklapa sa pravcem X, odnosno Y ose. Zraci projekcije koji prolaze kroz početak i kraj vektora padaju upravno na ove ose, određujući vektore komponenti "ax" i "ay" za vektor a, odnosno "bx" i "by" za vektor b, što se može videti na slici 6.

Razlaganje vektora na komponente
Slika 6: Razlaganje vektora na komponente

Ako bi vektor "a" bio definisan kao npr. a(30,20) onda bi intenzitet vektora "ax" bio jednak 30, a intenzitet vektora "ay" bi bio jednak 20.

U processing-u bi se definisao vektor preko klase PVector, za java verziju ili preko klase p5.Vector ako je u pitanju javascript. U nastavku ćemo definisati npr vektore "a" i "b" i zatim odrediti i iscrtati komponente pomoću processing-a.

Kod sa slike 7: Razlaganje vektora na komponente-kod, prvi deo

PVector a;          // vektor a
PVector b;          // vektor b
PVector ax, ay;     // projekcije vektora a
PVector bx, by;     // projekcije vektora b

PVector xOsa;       // x osa
PVector yOsa;       // y osa
PVector pozA;       // pozicija vektora "a"
PVector pozB;       // pozicija vektora "b"
PVector pozXOse;    // pozicija X ose
PVector pozYOse;    // pozicija Y ose
float RAZMERA = 3;  // razmera za prikaz sila

void setup() {
  size(500, 500, P2D);
  pozA = new PVector(15 * RAZMERA, 20 * RAZMERA);       // pozicija vektora "a" – kreiranje
  pozB = new PVector(-10 * RAZMERA, -15 * RAZMERA);     // pozicija vektora "b" – kreiranje
  pozXOse = new PVector(-width / 2 + 10, 0);            // pozicija X ose – kreiranje
  pozYOse = new PVector(0, -height / 2 + 10);           // pozicija Y ose – kreiranje
  a = new PVector(30 * RAZMERA, 20 * RAZMERA);          // kreira vektor a
  b = new PVector(-30 * RAZMERA, -30 * RAZMERA);        // kreira vektor b
  xOsa = new PVector(width - 20, 0);                    // vektor x ose
  yOsa = new PVector(0, height - 20);                   // vektor y ose
  /* Kreira projekcije */
  ax = new PVector(a.x, 0);
  ay = new PVector(0, a.y);
  bx = new PVector(b.x, 0);
  by = new PVector(0, b.y);
}

Kod sa slike 8: Razlaganje vektora na komponente-kod, drugi deo

void draw() {
  background(255);
  translate(width / 2, height / 2);
  crtanjeVektora(pozXOse, xOsa, color(0, 0, 0), 3);     // X osa
  crtanjeVektora(pozYOse, yOsa, color(0, 0, 0), 3);     // Y osa

  crtanjeVektora(pozA, a, color(255, 0, 0), 5);         // crta vektor "a"
  crtanjeVektora(pozB, b, color(255, 0, 255), 5);       // crta vektor "b"

  /* Crtanje komponentnih vektora */
  crtanjeVektora(new PVector(pozA.x, 0), ax, color(255, 0, 0), 3);    // crta vektor "ax"
  crtanjeVektora(new PVector(0, pozA.y), ay, color(255, 0, 0), 3);    // crta vektor "ay"
  crtanjeVektora(new PVector(pozB.x, 0), bx, color(255, 0, 255), 3);  // crta vektor "bx"
  crtanjeVektora(new PVector(0, pozB.y), by, color(255, 0, 255), 3);  // crta vektor "by"
}

/* Metoda koja crta bilo koji vektor */
void crtanjeVektora(PVector poz, PVector v, color c, float s) {
  float ugao = v.heading();   // ugao vektora prema x osi, sa znakom
  push();                     // u kombinaciji sa pop omogućava da se koordinatni sistem privremeno premesti ili rotira
  translate(poz.x, poz.y);
  rotate(ugao);
  fill(c);                    // boja ispune vektora
  stroke(c);                  // boja linije vektora
  strokeWeight(s);            // debljina linije vektora

  line(0, 0, v.mag(), 0);     // crta telo vektora

  /* crtanje strelice */
  translate(v.mag(), 0);
  triangle(0, 3, 10, 0, 0, -3);
  pop();
}
Napomena: Na slici je ugao računat kao PVector.angleBetween(v, xOsa). Taj ugao je uvek pozitivan (0 do π), pa bi se vektor usmeren nagore (negativno y, npr. vektor b) nacrtao kao da je usmeren nadole. Metoda heading() daje ugao sa znakom.

Pre setup metode kreirani su objekti klase PVector, pozicije vektora "a" i "b", kao i koordinatnih osa, vektori "a" i "b", koordinatne ose, projekcije vektora. Ovi vektori su kreirani u setup metodi, a crtaju se u draw metodi pozivom nove metode "crtanjeVectora", koja crta bilo koji vektor u zavisnosti od poslatih parametara. Kao parametri se šalju: vektor pozicije početka vektora, sam vektor, boja i debljina linije za crtanje. Za rad sa klasom PVector, pročitajte članak: Vektori u Processing-u.
Posle pokretanja koda dobiće se(vidi sliku 9):

Razlaganje vektora na komponente-izvršenje aplikacije
Slika 9: Razlaganje vektora na komponente-izvršenje aplikacije

Nastavak aplikacije u kome će se docrtati pomoćne linije ispisati oznake itd. se ostavlja čitaocu kao vežba.

Projekcije vektora na koordinatne ose

Projektovanje vektora na koordinatne ose je slično razlaganju vektora na komponente, s tim da je projekcija skalar, a ne vektorska veličina i da može imati predznak "+" ili "-", tj. može biti pozitivna ili negativna, a to zavisi od smera originalnog vektora u odnosa prema X, odnosno prema Y osi (vidi sliku 10).

Projekcije vektora na koordinatne ose
Slika 10: Projekcije vektora na koordinatne ose

Proveri znanje

Otvori kviz

Kviz: Operacije sa vektorima

1. Kako se sabiraju vektori metodom poligona?




2. Šta je razlika a − b?




3. Šta se desi sa vektorom pomnoženim negativnim brojem?




4. Komponente vektora intenziteta v pod uglom α prema x osi su: