VEKTORER

Definition Vektor

Startpunkt

Slutpunkt

Riktning

Storlek*

* Kan även kallas längd eller magnitud

En vektor har en storlek och en riktning

Representation av en vektor i 2D rymd

(0,0)

(8,6)

y

y

x

a

a = (8, 6)

Representation av en vektor i 3D rymd

En tredje dimension, Z. 

z

y

x

a

a = (0, 3, 5)

 (0, 0, 0) 

En vektor anger alltså en position med en offset till nollpositionen (0, 0, 0)

Unity: transform.position = new Vector3(0, 3, 5);

Magnituden

(0,0)

(8,6)

Magnituden m av vektorn a

y

x

a

a = (8, 6)

Längden eller storleken på vektorn

x^2 + y^2 = m^2 \\m = \sqrt{x^2 + y^2} \\m = \sqrt{8^2 + 6^2} \\m = \sqrt{100} \\m = 10

Beräkna magnitud i Unity

   distance = transform.position.magnitude;

Vector3.magnitud eller Vector3.sqrMagnitude

Exempel:

   distance = transform.position.sqrMagnitude;

Eller

För av avgöra vilken magnitud som är störst behövs egentligen kvadrotsberäkningen!

Vektor addition

Addition av vektor A + B ger resultantvektorn C.

Exempelvis om ett objekt först rör sig till A och sedan B, så blir slutpositionen samma om den rört sig med vektor C.

Vector3 C = new Vector3(1, 2, 3) + new Vector3(4, 5, 6)

Vad blir vektor C?

Exempelvis:

 

A = (1,10) och B = (5, 6)

C = (1+5, 10+6) = (6, 16)

Unity

Vektor subtraktion

Subtraktion av vektor A - B ger vektorn C.

Vector3 C = new Vector3(1, 2, 3) - new Vector3(4, 5, 6)

Vad blir vektor C?

Exempel på beräkning med 2D vektor:

 

A = (1,10) och B = (5, 6)

C = (1-5, 10-6) = (-4, 4)

Unity

Exempel: Avstånd mellan objekt

Avståndet blir vektorn för dit man objektet vill nå - objektets egen position.

Normalvektorer

En vektor har en storlek och riktning

Säg - vi är bara intresserade av riktningen 

En normaliserad vektor, enhetsvektor beräknas genom att dividera varje komponent med magnituden.

3

4

5

Dela med 5!

3/5

4/5

5/5

En normaliserad vektor har längden 1

Normalvektorer i Unity

Vector3.Normalize

Exempel:

Vector3 displacementFromTarget = targetTransform.position - transform.position;

Vector3 directionToTarget = displacementFromTarget.normalized;

I spelet vill du bara ha riktningen till objektet, inte storleken på vektorn!

Hastighet som vektor

Hastighet som vektor

Hur långt (m) man färdas i en given riktning per sekund - förändring av position över tid.

Säg att ett objekt färdas 12 m/s i riktningen (3, 4)

\\v = \frac{12m}{s} * (3,4)
\\ v = \frac{(36 m; 48m )}{s}
\\ hur\hspace{0.1cm}långt = \frac{(36 m; 48m ) * deltaTime}{s}

60fps ≈ 0.017

\\ hur\hspace{0.1cm}långt = \frac{(36 m; 48m ) * 0.017 s}{s}
\\ hur\hspace{0.1cm}långt = (0.6 m; 0.816 m)

Skalärprodukt

Eng Dot product

Skalärprodukten av två vektorer A = (x, y, z) och B = (x, y, z)

A B = (Ax * Bx) + (Ay * By) + (Az * Bz)

Om skalärprodukten är 0 så är vektorerna vinkelräta mot varandra.

Unity: float Vector3.Dot(Vector3 A, Vector3 B);

Skalärprodukt

Eng Dot product

Man kan också beräkna vinkeln mellan två vektorer A och B. 

Unity: float Vector3.Angle(Vector3 A, Vector3 B);

A \cdot B = |A||B| cos θ \\ θ = arccos(\frac{A \cdot B}{|A||B|})

Obs! Magnituden av vektorn

Kryssprodukt

Eng. Crossproduct

Kryssprodukten av två vektorer a = (x, y, z) och b = (x, y, z)

Unity: Vector3 Vector3.Cross(Vector3 A, Vector3 B);

Kryssprodukt

Eng. Crossproduct

Kryssprodukten av två vektorer a = (x, y, z) och b = (x, y, z)

Kryssprodukten ger en ny vektor vars riktning är vinkelrät mot vektorn a och b. Parallelogrammets area ger storleken av a x b 

Spelprogrammering i Unity - Vektorer

By Sandra Larsson

Spelprogrammering i Unity - Vektorer

  • 339