UPOTREBA KLASE "PVector" U PRIMERIMA SA PROCESSINGOM I JAVOM
Klasa "PVector" se koristi za predstavljanje vektorskih veličina u 2D ravni i 3D prostoru. Objekat vektora se kreira na sledeći način:
PVector M = new PVector(100,50,60);
|
(vidi sliku 1)
|
ili za vektor u ravni:
PVector M = new PVector(100,200);
Ili u ravni, ako je Z=0
Dakle, položaj tačke M je određen vektorom koji spaja koordinatni početak sa tačkom M. Na gore pomenuti način se kreira nov objekat vektora, tj. zauzima se nova memorija za njega, ali ako želimo da preuzmemo samo kopiju onda bi to uradili pozivom metode get() kao npr.
PVector M = new PVector(100,200);
PVector MCopy= M.get();
Aplikacija za edukaciju- Operacije sa vektorima
Aplikacija je namenjena vežbanju operacija sa vektorima: Sabiranje vektora, oduzimanje vektora kao i proizvod vektora skalarom. Da biste pogledali aplikaciju kliknite na sliku(link) ispod.
Sabiranje vektora korišćenjem PVector-a u processing-u
Objekti klase PVector mogu da predstave bilo koju vektoorsku veli;inu u ravni ili prostoru. Pravila koja važe za vektore mogu se i ovde primeniti. Npr. da bi smo sabrali dva vektora, možemo to da uradimo tako što jedan nadovežemo na drugi i onda je rezultujući vektor vektor koji počinje u početku prvog, a kraj se podudara sa završetkom drugog, što se može videti na slici 3.
Sabiranje dva vektora je prikazano na sledećoj slici:
Sabiranje dva vektora je prikazano na sledećoj slici:
Ovde su prikazana dva načina da se saberu vektori a i b i dobije rezultanta c. Oba načina se koriste da se zadrži početni vektor a nepromenjenim. Ako bi samo napisali:
PVector c;
a.add(b);
a.add(b);
dobili bi smo vektor a kao zbir vektora b i njega samog, tako da bi vektor a bio promenjen, tj ne bi smo zadržali originalni vektor.
Sa druge strane ako metodu add pozovemo preko klase PVector, tj. statički, dodavanje vektora neće uticati na vektor a(početni vektor). Dakle, ako napišemo:
Sa druge strane ako metodu add pozovemo preko klase PVector, tj. statički, dodavanje vektora neće uticati na vektor a(početni vektor). Dakle, ako napišemo:
PVector c = PVector.add(a,b);
i vektor a i vektor b će ostati nepromenjeni, dok će vektor c biti zbir ova dva vektora.
Oduzimanje dva vektora u processing-u:
Oduzimanje dva vektora je objašnjeno na sledećoj slici:
Posmatrajmo dva vektora a i b definisnih kao na slici 4. Prvo se kreira kopija vektora a metodom get(). Onda se nad kopijom c izvrši oduzimanje vektora b metodom sub(), kojoj se pomenuti vektor b prosleđuje kao parametar. Kreiranjem kopije je izbegnuto da se originalni vektor a promeni. Na slici se vidi da je rezultantni vektor c(obojen crveno) zapravo vektor koji je dobijen sabiranjem vektora a i vektora (-b) koji je nadovezan na a. Znak minus ispred b govori da je to vektor jednak intenzitetu vektora b, istog je pravca, ali suprotnog smera.
Drugi način da se izbegne promena originalnog vektora a je da se upotrebi klasa PVector, što se takođe može videti na slici.
Drugi način da se izbegne promena originalnog vektora a je da se upotrebi klasa PVector, što se takođe može videti na slici.
Množenje vektora skalarom u processing-u(metoda mult)
Ovo je objašnjeno na sledećoj slici:
Ukoliko bi definisani vektor a i želimo da povećamo njegov intenzitet, recimo 2 puta, onda bi mogli da napišemo:
PVector a= new PVector(20,-10);
a.mult(2);
a.mult(2);
Ovo bi povećalo intenzitet vektor a dva puta, ali ne bi zadržali originalni vektor. Da bi smo to uradili potrebno je da prvo napravimo kopiju vektora, kao što je prikazano na slici 5.
Deljenje vektora skalarom u processing-u(metoda div)
Ukoliko želimo da podelimo vrednost intenziteta nekim brojem, onda bi to mogli da uradimo kao što je prikazano na sledećoj slici:
I ovde je situacija slična množenju vektora skalarom samo se umesto metode mult koristi div metoda. Takođe, ukoliko je potrebno zadržati originalni vektor, u ovom slučaju označenog sa b, nepromenjenim to je moguće uraditi na dva načina kao što je objašnjeno na slici 6.
Svođenje vektora na jedinični vektor u processing-u(normalize). Određivanje intenziteta datog vektora(mag). Rotacija vektora(rotate).
Ove tri metode su objašnjene na sledećoj slici:
Ukoliko želimo da odredimo neki vektor koji ima isti pravac kao neki drugi, poznat vektor, možemo taj poznati svesti na jedinični koji ima isti pravac i smer, ali intenzitet 1(metoda normalize), a zatim recimo pomnožiti sa intenzitetom, koji je poznat i tako odrediti pomenuti vektor. Ovo će biti detalnije obrađeno u primeru trenja( vidi naredne lekcije).
Na primer pravac i smer sile trenja uvek može da se odredi ako je poznat vektor brzine, na gore pomenuti način.
Metoda mag() određuje intenzitet nekog poznatog vektora, dok metoda rotate() vrši rotaciju poznatog vektora za neki ugao, oko ose koja prolazi kroz trenutni koordinatni početak u P2D ili P3D koo. sistemu.
Na primer pravac i smer sile trenja uvek može da se odredi ako je poznat vektor brzine, na gore pomenuti način.
Metoda mag() određuje intenzitet nekog poznatog vektora, dok metoda rotate() vrši rotaciju poznatog vektora za neki ugao, oko ose koja prolazi kroz trenutni koordinatni početak u P2D ili P3D koo. sistemu.
Određivanje ugla između dva vektora u processing-u
Ako su data dva vektora u processing-u može se odrediti ugao između njih u radijanima, pomoću metode angleBetween() objeta PVector klase, kao što je pokazano na sledećoj slici:
Sledeće
Opracije sa vektorima >| |