Vektori
U ovoj lekciji učimo o vektorima - objektu od kog je zapravo sagrađen skoro svaki geometrijski zadatak (ne mešati sa strukturom podataka).
Šta je vektor
Vektor je strelica: ima pravac, smer i dužinu, ali nema fiksni položaj. Zapisujemo ga kao par brojeva, , što čitamo kao "pomeri se x udesno i y nagore".
Znači, tačka i vektor se čuvaju na potpuno isti način - kao dva broja. Razlika je samo u tome kako o njima razmišljamo:
- tačka je mesto (gde se nešto nalazi)
- vektor je pomeraj (kako da stignemo negde)
Dve strelice iste dužine i istog smera su isti vektor, bez obzira gde ih nacrtamo. To znači ono "nema fiksni položaj", i baš zato su vektori toliko zgodni: možemo ih slobodno pomerati tamo gde nam trebaju u računu.
Od tačaka do vektora
Vektor koji nas vodi od tačke A do tačke B je prosto razlika njihovih koordinata:
Ovo je najčešće korišćena operacija u geometrijskim zadacima. Skoro svaki zadatak počinje tako što tačke iz ulaza pretvorimo u vektore - i od tog trenutka radimo isključivo sa vektorima.
Na primer, za A = (1, 2) i B = (4, 6):
Što nam govori upravo ono što očekujemo: da bismo od A stigli do B, idemo 3 udesno i 4 nagore.
Pazi na redosled: nije isto što i , to je potpuno suprotna strelica, . Oduzimanje u pogrešnom redosledu je jedna od najčešćih grešaka u geometrijskom kodu.
Operacije nad vektorima
Postoje tri osnovne stvari koje možemo da radimo sa vektorima:
Sabiranje - izvršavanje jednog pomeraja pa zatim drugog:
Oduzimanje - pomeraj od vrha vektora do vrha vektora :
Množenje skalarom - istezanje strelice brojem k. Pravac ostaje isti, a dužina se množi sa k; negativno k okreće strelicu na suprotnu stranu:
Dužina vektora
Vektor ima dužinu (intenzitet), a to je ista ona formula za rastojanje iz prethodne lekcije:
Implementacija
U C++-u sve ovo možemo napisati kao nekoliko malih funkcija pored naše strukture.
#include <bits/stdc++.h>
using namespace std;
struct v{
long long x, y;
};
v add(v a, v b){
return {a.x + b.x, a.y + b.y};
}
v sub(v a, v b){
return {a.x - b.x, a.y - b.y};
}
v scale(v a, long long k){
return {a.x * k, a.y * k};
}
long long len2(v a){ // kvadrat duzine - ostaje ceo broj!
return a.x * a.x + a.y * a.y;
}
double len(v a){
return sqrt((double)len2(a));
}
double dist(v a, v b){
return len(sub(b, a));
}
int main(){
v a = {1, 2};
v b = {4, 6};
v ab = sub(b, a); // vektor od a do b
cout<<"Vektor AB: ("<<ab.x<<", "<<ab.y<<")\n";
cout<<"Duzina: "<<len(ab)<<'\n';
cout<<"Rastojanje od a do b: "<<dist(a, b);
return 0;
}Output:
Vektor AB: (3, 4)
Duzina: 5
Rastojanje od a do b: 5
Rezime
| Operacija | Formula | Napomena |
|---|---|---|
Vektor A do B |
oduzmi početnu tačku | |
| Sabiranje | jedan pomeraj pa drugi | |
| Oduzimanje | pazi na redosled | |
| Množenje skalarom | negativno k okreće smer |
|
| Dužina | ista formula kao rastojanje |
Vektori su glavni alat kojim rešavamo geometrijske zadatke, a u narednim lekcijama ćemo videti kako da ih iskoristimo!


