Vektor je usmeren segment definisan dužinom (magnitude) i smerom. Dok brojčane (skalarnе) veličine imaju samo vrednost, vektori opisuju i koliko i u kom pravcu nešto “gura” ili “se kreće”. Primere i operacije sa vektorima pogledajte u našem detaljnom vodiču na SvetProgramiranja: Operacije sa vektorima .
U nastavku je interaktivni primer u p5.js koji prikazuje dve nasumične vektorske strelice u ravni. Kliknite i povucite glave strelica da promenite njihovo položaj i vidite kako se menjaju.
U ovoj simulaciji koristimo biblioteku p5.js za crtanje dveju strelica-vektora koje možete prevlačiti mišem. Canvas dimenzija je 600×400 piksela, a koordinatni sistem je pomeren tako da se centar platna nalazi u sredini.
Globalne promenljive:
vectors
— niz objekata, svaki sa komponentama vx, vy
i bojom col
.dragging
— referenca na trenutno prevlačeni vektor (ili null
).setup():
createCanvas(600, 400)
i canvas.parent('sketch-holder')
za vezivanje u HTML.vectors.push({ vx: ..., vy: ..., col: ... });
draw():
background(240)
čisti platno.line(width/2,0, width/2,height); line(0,height/2, width,height/2);
drawVector(v)
koji:Interakcija:
mousePressed()
— proverava da li je kliknuto unutar kruga radijusa 10 px oko glave vektora; ako jeste, čuva taj vektor u dragging
.mouseDragged()
— dok je miš pritisnut, ažurira dragging.vx
i dragging.vy
prema trenutnoj poziciji miša.mouseReleased()
— postavlja dragging = null
, prekidajući pomeranje.
// glavni niz i promenljiva za prevlačenje
let vectors = [];
let dragging = null;
function setup() {
const canvas = createCanvas(600, 400);
canvas.parent('sketch-holder');
// Generiši dva nasumična vektora
for (let i = 0; i < 2; i++) {
vectors.push({
vx: random(-150, 150),
vy: random(-100, 100),
col: i === 0 ? '#e63946' : '#2a9d8f'
});
}
}
function draw() {
background(240);
stroke(50);
// nacrtaj ose kroz centar
line(width/2, 0, width/2, height);
line(0, height/2, width, height/2);
noStroke();
// prikaži svaki vektor
vectors.forEach(v => {
drawVector(v);
});
}
function drawVector(v) {
push();
translate(width/2, height/2);
stroke(v.col);
strokeWeight(3);
line(0, 0, v.vx, -v.vy);
// strelica
push();
translate(v.vx, -v.vy);
rotate(-atan2(v.vy, v.vx));
fill(v.col);
noStroke();
triangle(0, 0, -10, 5, -10, -5);
pop();
// čvor za povlačenje
noStroke();
fill(v.col);
ellipse(v.vx, -v.vy, 12);
pop();
}
function mousePressed() {
const mx = mouseX - width/2;
const my = -(mouseY - height/2);
for (let v of vectors) {
if (dist(mx, my, v.vx, v.vy) < 10) {
dragging = v;
break;
}
}
}
function mouseDragged() {
if (dragging) {
dragging.vx = mouseX - width/2;
dragging.vy = -(mouseY - height/2);
}
}
function mouseReleased() {
dragging = null;
}
U ovom kratkom videu je objašnjeno kako da upravljate interaktivnom aplikacijom za vežbanje vektorskih operacija. Ovde je sažeto objašnjenje koraka:
Detaljnije uputstvo, primeri i teorijska objašnjenja pogledajte u video-zapisu: