Hej! Låt säga att väggen har riktningsvektorn u=(xu, yu), och rörelsen med v=(xv,yv). Hej! >Reflektionsvektorn blir: ojsan. va lite väl snabb där. Hej! har den verkligen rätt längd? Hej!vektorberäkning
Har en vektor (2-dim) som motsvarar en vägg i ett spel. Ett föremål rör sig mot "väggen", beskrivet med en annan vektor . Hur beräknar jag reflektionsvektorn med hjälp av väggens vektor och föremålets vektor?
tackar för svar
MichaelSv: vektorberäkning
sätt då
Alpha = ATan2(yu, xu)
Beta = ATan2(yv, xv)
R=Sqr(yv*yv+xv*xv)
då är den reflekterade rörelsen w=(xw, yw)
xw=R*Cos(2*Alpha-Beta)
yw=R*Sin(2*Alpha-Beta)
Det går nog att förenkla formlerna, men det får du göra det själv.
/Niklas JanssonSv: vektorberäkning
Tack för ditt svar. Ska titta närmre på det senare. Kom på att det måste fungera med enkel vektorberäkning.
Reflektionsvektorn blir:
w = 2u - v om vinkeln är spetsig
w = -2u -v om vinkeln är trubbig
w = -v om vinkeln är rät
Spetsig, trubbig eller rät vinkel avgörs enkelt med skalärprodukten. Detta förutsätter att väggens riktningsvektor pekar medsols i förhållande till rörelsevektorn.
Varifårn får du ATan2? Är det samma som Atn?
mvh
/MichaelSv: vektorberäkning
>w = 2u - v om vinkeln är spetsig
>w = -2u -v om vinkeln är trubbig
>w = -v om vinkeln är rät
Njaee... det verkar inte stämma riktigt...
Det kanske stämmer om u är parallell med x-axeln.
Atan2 är fel. det jag menar är Atn2, och denna räknar dels ut arctangens för y/x och dels väljer den rätt kvadrant.
/Niklas JanssonSv: vektorberäkning
Du har antagligen rätt.
Jag blandar alltid ihop -u med konjugatet till u (om man låtsas att u är ett komplext tal).
/Niklas JanssonSv: vektorberäkning
Nej helt rätt var det inte. Tack vare din kommentar kontrollerade jag igen och upptäckte att vektorn u måste multipliceras med faktorn (u*v)/(u*u) (*=skalärprodukten). Detta innebär också stt formeln blir oberoende av om vinkeln är rät, spetsig eller trubbig.
alltså reflektionsvektorn blir:
w = 2u' - v
där u' = (u*v)/(u*u)u (sista u:et är vektorn och det innan är tal)
mvh
/MichaelSv: vektorberäkning
Borde kanske ta w'=|u|/|w| * w ?
/Niklas JanssonSv: vektorberäkning
Jo, längden blir rätt. Tack vara skalningen beskriven ovan.
Har man u som enhetsvektor räcker det med u' = (u*v)u.
u' blir helt enkelt v's projektion på u. (eller v's skugga på u). Sedan är det vanlig vektoraritmetik.
exempel:
v = (2,5) längd:5.3852
u = (3,1) (ingen enhetsvektor)
faktorn enligt mitt förra inlägg blir 1.1 och
u' = (3.3 , 1.1)
2u'-v blir (4.6 , -2.8) längd:5.3852
mvh
/Michael