Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  21 3089
Hei,

Er det noen matematiske genier her som kunne tenke seg å forklare meg, gjerne med litt enkle illustrasjoner, hva en vektor er i matematikken/programmerings verden?

Jeg vet at en vektor er to punkter og linjen/avstanden mellom dem. Det jeg dog lurer på, er hvordan man regner ut vinkelen mellom to vektorer?

Jeg holder på å lære meg C++ og driver i den sammenheng på med ett veldig simpelt, 2d spill. Jeg bruker ett bibliotek som heter ClanLib og der har de en metode hvor man man kjører .angle() på en vektor, opp mot en annen.

Pseudo-kode:
float angle = vector1.angle(vector2).to_degrees();

Kunne noen illustrert hvordan denne logikken utspiller seg?
Jeg bruker vektor regning ved å beregne vind ombord på skip.

vektor strek 1: Vindenes retning (relativ). vektor lengde1: Vindens fart i knop.(relativ)
vektor sterk 2: skipets retning. vektor lengde 2: skipets fart i knop.

Står skipet i ro. Er det bare vindretningen som utgjør vinden.

Får vi vinden akten fra i 3 knop og vi seiler i 3 knop vil det føles som det er vindstille ombord på skipet.

Jeg beregner dette med å tegne det opp i en kompassrose i kartet. Ikke med bruk av matte.

Du kan søke på relativ og true wind på nettet så vil du finne mye mer om det hvis det skulle være av int.

Det er ihvertfall et praktisk eksempel på det. :-)
http://www.matematikk.net/cgi-bin/mimetex.cgi?\alpha%20\,%20=%20\,%20\cos%20^{-1}\left(%20\frac{\vec{a}%20\cdot%20\vec{b}}{\left|\vec{a}\right|%20\cdot%20\left|\vec{b}\right|}\right)

Altså, for å finne vinkelen alfa mellom to vektorer a og b, så regner du først ut skalarproduktet av a og b (i telleren), og produktet av lengdene (i nevneren). Deretter tar du invers cosinus av svaret du får. Dette skal da være vinkelen mellom vektorene, oppgitt i grader (husk å sjekk at ikke kalkulatoren din er stilt inn på radianer).

Edit:
Link 1
Link 2
Sist endret av Realist1; 10. februar 2013 kl. 11:11.
En vektor er ikke to punkter, og avstanden mellom.

En vektor er et linjestykke med en retning. Altså har en vektor to variabler: Lengde og Retning

Et skalarprodukt får du når du multipliserer to vektorer, da får du et tall som sier noe om forholdet på vektorene, Dette deler du så på produktet av lengdene.
edit: Realist1 har visst formelen over meg
Sist endret av Membranplan; 10. februar 2013 kl. 11:12.
Ok.. Dette er altså hvordan man regner ut vinkelen mellom to vektorer når man har oppgitt begge vektorene på koordinatform... Når jeg leser innlegget en gang til, så ser jeg at det kanskje ikke er tilfellet. Hvordan har du oppgitt vektorene? Det kan være greit å vite først, så det blir lettere å gi deg en så kort og god forklaring som mulig, uten at du må lære deg R1 og R2 for å komme videre med programmeringen...
I tegneprogrammet mitt oppfatter jeg en vektor som en linje med kraft(lengde) og retning(vinkel) ut fra et punkt.
Det kan være 1 eller 2 linjer ut fra punktet. Den(disse) linjene kan møte en annnen linje som kommer med kraft og retning fra et annet punkt. Jeg kan da tegne ved å plassere punkter og modifisere kraft og retning på linjene ut fra/inn til disse punktene.
Java's Avatar
Trådstarter
I bunn og grunn så har jeg en posisjon på en såkalt sprite, x og y, og jeg har en posisjon på muse-pekeren, x og y. Jeg ønsker å finne vinkelen mellom disse to... om det er logisk .. jeg vet ikke,hehe.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Java Vis innlegg
I bunn og grunn så har jeg en posisjon på en såkalt sprite, x og y, og jeg har en posisjon på muse-pekeren, x og y. Jeg ønsker å finne vinkelen mellom disse to... om det er logisk .. jeg vet ikke,hehe.
Vis hele sitatet...
Du kan sjå på det som vektor ja. Du har då to vektorer, med utgangspunkt i (0,0), der eine viser til musepeikaren og den andre til spriten din. Vinkelen mellom dei kan du finne med den metoden Realist1 viste over.

Wikipedia har ganske mykje om vektorer, og forkursboka i matematikk er hendig å ha om du vil lære deg litt grunnleggjande matematikk
Vil tro det er mer korrekt å lage den vektor mellom disse 2 punktene. For så å finne vinkelen til denne ene vektoren.
Java's Avatar
Trådstarter
Ah, så jeg må ta utgangspunkt i at 0,0 er start på vektoren og X,Y er slutt på den for begge vektorene mine .. DA er jeg med!

tusen takk

Sitat av slashdot Vis innlegg
Du kan sjå på det som vektor ja. Du har då to vektorer, med utgangspunkt i (0,0), der eine viser til musepeikaren og den andre til spriten din. Vinkelen mellom dei kan du finne med den metoden Realist1 viste over.

Wikipedia har ganske mykje om vektorer, og forkursboka i matematikk er hendig å ha om du vil lære deg litt grunnleggjande matematikk
Vis hele sitatet...
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Java Vis innlegg
Ah, så jeg må ta utgangspunkt i at 0,0 er start på vektoren og X,Y er slutt på den for begge vektorene mine .. DA er jeg med!

tusen takk
Vis hele sitatet...
Nei, du må ikkje det. Etse sin ide er uansett enklare å gjennomføre...
Wait, what..? Nå detter jeg ut. Hvilken vinkel er det egentlig du vil finne? Jeg så for meg at du hadde en vektor fra musepekeren til punkt A, og en vektor fra musepekeren til punkt B, og ville finne vinkelen mellom disse to vektorene...

Har du bare to punkter, og vil finne vinkelen mellom disse? Altså.. Tenker du da at 0 grader er f.eks. rett opp eller rett til høyre, og vil finne hvilken vinkel det andre punktet ligger ift det første?
Java's Avatar
Trådstarter
Vet ikke om dette virker, men her er en basic scetch,

http://www.skrbl.com/224404992

Jeg ønsker altså å finne vinkelen til musa, ifht spriten, slik at jeg kan vri spriten i den vinkelen (så det ser ut som spriten ser på musepekeren)
Trigonoceps occipita
vidarlo's Avatar
Donor
Det du må velje då er eit referansepunkt. Om det er 0,0, spriten eller kva som helst anna er uviktig, så lenge det er likt for begge objekta.

http://stackoverflow.com/questions/7...orizontal-axis tar for seg litt om det
Java's Avatar
Trådstarter
Så hvordan blir logikken om jeg da velger 0,0 (oppe til venstre) som utgangspunkt?

Kunne du illustert det på den awesome tegningen jeg har begynt på ?
Notasjon: Vektor, ikke vektor. (0, 0) ligger øverst til venstre på skjermen, og den første koordinaten er avstanden fra toppen av skjermen. AB er en vektor fra A til B.

Pos O = (0,0)
OM = [musY, musX]
OS = [spriteY, spriteX]
SM = OM - OS = (musY - spriteY, musX - spriteX)

1. Finn ut hvor mye SM er rotert fra en referansevektor som er f.eks. [1, 0], ved hjelp av formelen ovenfor.
2. Roter spriten denne vinkelen. Om den er 90 grader feil, prøv å endre referansevektoren, eller pluss på 90 grader.
Sist endret av Ozma; 10. februar 2013 kl. 13:21.
Java's Avatar
Trådstarter
Yep - ble mer forståelig nå

Tusen takk folkens!
Sitat av slashdot Vis innlegg

Wikipedia har ganske mykje om vektorer, og forkursboka i matematikk er hendig å ha om du vil lære deg litt grunnleggjande matematikk
Vis hele sitatet...
Har du navnet også kanskje? Eller isbn#?
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av ompapa Vis innlegg
Har du navnet også kanskje? Eller isbn#?
Vis hele sitatet...
http://sinus.cappelendamm.no/artikke...tml?tid=617944
For en enkel vektor kan man fint bruke at vinkelen på vektoren er gitt med atan2(y, x). Burde vel være betydelig lettere? Dete gjelder rett og slett fordi en enkel vektor vil forme an rettvinklet trekant - noe som åpner opp for spesialtilfellet. (formelen tidligere gitt er jo veldig generell).