Hej! Kolla på dot product, http://mathworld.wolfram.com/DotProduct.html. För att räkna ut vinkeln mellan två vektorer använder du denna formel: http://hem.bredband.net/_petlar/tmp/dotprod.jpg. Där |U| och |V| är absolutbeloppet för de två vektorerna. Jag antog att du använder dig av tre dimensionern, annars är det bara att plocka bort z-komponenten. Tack för ditt svar Absolutbeloppet är längden på vektorn, räknas ut så här: sqrt(x^2 + y^2 + z^2). Sen är det inte -cos utan arccos (inversfunktionen för cosinus) du ska använda. Rätta mig om jag har fel men blir inte arccos() samma som 0-cos() eller cos() * -1? Nej, det blir det inte. Du får använda arc tan och göra lite operationer på den. Står i hjälpen hur man gör. Så här kan man göra:Få vinkel av en vektor.
Jag vill få en vektors vinkel utifrån start och slutpositionen.
Någon som vet hur man gör?
Visste inte riktigt var jag skulle skriva detta men eftersom jag behöver veta det för att utveckla ett spel så skrev jag det här.
Tack på förhand.
//AlexSv: Få vinkel av en vektor.
/PeterSv:Få vinkel av en vektor.
Vad innebär absolut beloppet?
Skulle formeln se ut nåt såhär? -cos((u.x*v.x+u.y*u.x)/((absolut av u) * (absolut av v)))Sv: Få vinkel av en vektor.
Så här blir det:
arccos( (u.x*v.x + u.y*v.y) / (|u|*|v|) )
/PeterSv:Få vinkel av en vektor.
Det finns ingen arccos funktion i vb. Det är därför jag undrar.Sv: Få vinkel av en vektor.
Annars är det bara att trixa lite med trigonometriska formler så får man fram det.Sv: Få vinkel av en vektor.
Public Function ACos(x As Variant) As Variant
If x >= -1 And x < 1
ACos = Atan(-x / Sqrt(-x * x + 1)) + 2 * Atan(1)
Else If x = 1
ACos = 0
Else
ACos = 0 ' Ogiltigt värde
End If
End Function
Formeln fungerar precis som arccos så länge x är skiljt från 1, x = 1 ger division med noll. Otestad kod men du fattar principen hoppas jag.
/Peter