Som besökare på Hamsterpaj samtycker du till användandet av s.k. cookies för att förbättra din upplevelse hos oss. Jag förstår, ta bort denna ruta!
Annons

Trigonometri java

Skapad av Borttagen, 2011-02-05 16:06 i Webbutveckling & Programmering

2 207
10 inlägg
0 poäng
Mattedatten
Visningsbild
P 32 Karlskrona Hjälte 1 730 inlägg
0
Hej alla

Håller på med ett väldigt fult spel i Java, men tanken är att det ska fungera ^^

Jo, just nu så kan man skjuta en "laserkvadrat" framåt, men jag vill att man ska kunna skjuta med musen.

Detta har jag börjat lösa genom att ta fram mustryckets x och y, och därefter räkna trigonometri för att få fram vinkeln på förflyttningen.

Men nu har jag kört fast, hittar inte rätt metoder för att räkna.

Math.[något] har ju många trigonometriska funktioner, men jag letar efter en funktion som får fram en vinkel.. Äsch, såhär:
Forum image

Finns den där "tan upphöjt med minus 1" (tan^-1) i Java? Och om inte så hur kan man räkna utan?

Tack för svar

//M

//M

Är reklamen ivägen? Logga in eller registrera dig så försvinner den!

giatod
Visningsbild
P 34 Ljungsbro Hjälte 267 inlägg
0

Svar till Mattedatten [Gå till post]:
du kan använda deftionen av cosinus och sinus tex
du har antingen en traget poison x och y eller något sånt om du tar

double v=piont.distanse(traget.x,traget.y ,gubbe.x ,gubbe.y);
vx=(traget.x-gubbe.x)/v)*speed;
vy=(traget.y-gubbe.y/v)*speed;

det funkar någ om du bortser från fel stavningar och syntaxtrams




Ingen status

Felix
Visningsbild
P 34 Lidingö Hjälte 6 171 inlägg
0

Svar till Mattedatten [Gå till post]:
Vinklar är rent generellt rätt dåliga. Då har du ju bara en riktning...
Vektorer är oändligt mycket bättre, både riktning och längd.

Varför tänkte du ha just vinklar?

You're awesome!

Mattedatten
Visningsbild
P 32 Karlskrona Hjälte 1 730 inlägg
Trådskapare
0
Svar till Felix [Gå till post]:
Anledningen är nog ganska enkel, känner inte till mer om vektorer än att de finns ;)

Är det värt att lära sig?/Är det krångligt? :P

//M

Felix
Visningsbild
P 34 Lidingö Hjälte 6 171 inlägg
0

Svar till Mattedatten [Gå till post]:
Antar att spelet är 2-dimensionellt.
Då behöver du bara läsa om vektorer i R^2 :>

http://sv.wikipedia.org/wiki/Vektor

You're awesome!

cower
Visningsbild
P 44 Lund Hjälte 1 042 inlägg
0
Svar till Mattedatten [Gå till post]:
Det du behöver är inte vinkeln, utan hur mycket x- resp. y-koordinaten ska ändras för varje uppdatering av bilden. Det är troligen det Felix menar med vektorer i det här fallet. På så sätt håller man reda på x, y, dx ochy dy (dx = så mycket x ändras), och kan uppdatera positionen med "x += dx; y += dy;".

För att beräkna dx & dy kan man utgå från mx, my (från din figur) och h (skottets hastighet i pixlar/uppdatering), och införa mz = längden av hypotenusan:
z^2 = x^2 + y^2 (pytagoras sats)
z/h = x/dx = y/dy (skala ned triangeln så att hypotenusan blir = h)
Det ger:
dx = x * h / roten ur(x^2 + y^2)
dy = y * h / roten ur(x^2 + y^2)

Allt det här gör att vi bara får en långsam beräkning, roten ur (Math.sqrt()), och att vi bara behöver göra den en gång för varje skott. Notera också att man bör lagra x, y, dx & dy som double och avrunda dem precis när man ska rita, annars kan man få konstiga avrundningseffekter.

Exempel:
Ett stycke javascript-kod:
public class Shot {
private double x;
private double y;
private double dx;
private double dy;

// argument:
// x & y = koordinaterna där skottet ska börja
// mx & my = koordinaterna för musklicket
// h = hastighet
public Shot(int x, int y, int mx, int my, int h) {
int xx = mx - x;
int yy = my - y;
double scale = h / Math.sqrt(xx * xx + yy * yy);
this.x = x;
this.y = y;
dx = xx * scale;
dy = yy * scale;
}

public void move() {
x += dx;
y += dy;
}

public int getX() {
return Math.round(x);
}

public int getY() {
return Math.round(y);
}

// draw(), etc
}


Kan ju iofs även nämna att funtionen du frågade om heter invers tangens eller arcustangens, och finns i Java som Math.atan().

Mattedatten
Visningsbild
P 32 Karlskrona Hjälte 1 730 inlägg
Trådskapare
0
Oj, glömde om denna tråden av någon anledning :P
Svar till Felix [Gå till post]:
Efter att ha tittat på ett antal förklarande youtube-videor, så har jag förstått vad en vector är.
Jag fick också svar på javagaming.org med ett exempel på hur man kan använda den, så, tack för tipset :) (Har inte ännu haft tid att testa)


Svar till cower [Gå till post]:
Ska titta på den koden när jag sitter med programmet igen. Men tackar redan stort för förklaringen och alternativet. :)

//M

cower
Visningsbild
P 44 Lund Hjälte 1 042 inlägg
0
Svar till Mattedatten [Gå till post]:
Eftersom du säger att du vet vad en "vector" är, så är det troligen fel begrepp du fått förklarat för dig. Javas klass Vector är inte samma sak som det matematiska begreppet vektor, vilket var det Felix talade om. Koden jag skrev använder vektorrepresenation för riktning och hastighet för skottet, även om jag lagrar vektorn som två variabler istället för att ha ett separat objekt för den.

Mattedatten
Visningsbild
P 32 Karlskrona Hjälte 1 730 inlägg
Trådskapare
0
Svar till cower [Gå till post]:
Ok, så en vektor i java är "helt enkelt" en x- och en y-variabel?

Du kan ha rätt i att det var den matematiska vektorn jag hade fått förklarad, här: http://www.youtube.com/watch?v=5cWB52I-SF0&feature=channel

En sak är jag inte helt med på, vad gör xxoch yy? (Eller så är jag för trött för att förstå din text ovanför koden, något av det ;) )

Ett stycke Javascript-kod:
 public Shot(int x, int y, int mx, int my, int h) {
int xx = mx - x;
int yy = my - y;
double scale = h / Math.sqrt(xx * xx + yy * yy);


//M

cower
Visningsbild
P 44 Lund Hjälte 1 042 inlägg
0
Svar till Mattedatten [Gå till post]:
"Ok, så en vektor i java är "helt enkelt" en x- och en y-variabel?"
En vektor är en "riktad sträcka", man brukar rita en vektor som en pil. Man brukar representera en vektor med ett eller flera tal, lika många som antalet dimensioner, tex (1, 0, -2) - en tredimensionell vektor. Antalet dimensioner för vektorn är detsamma som för rummet (det matematiska begreppet "rum", inte såna man har i hus). I fallet med ditt spel är rummet 2-dimensionellt (väl?), och därmed representeras vektorn med två tal. I kod skulle man kunna ha en datastruktur som innehåller två double-variabler (tex en Vector<Double> med storleken 2 :P)... eller så kan man ha två double-variabler.

"Du kan ha rätt i att det var den matematiska vektorn jag hade fått förklarad, här: http://www.youtube.com/watch?v=5cWB52I-SF0&feature=channel"
Jag trodde att det var Java-klassen Vector du fått förklarad för dig. Det där är precis vad både Felix och jag talade om.

"Du kan ha rätt i att det var den matematiska vektorn jag hade fått förklarad, här: http://www.youtube.com/watch?v=5cWB52I-SF0&feature=channel"
Jag var lat och orkade inte hitta på bättre variabelnamn. (xx, yy) är vektorn från (x, y) till (mx, my), dvs från där skottet ska börja till muspekaren. Därefter skalas vektorn så att längden på den är lika med hastigheten skottet ska ha.



Tillägg av cower 2011-02-08 19:17

Meh, hamsterpaj fick för sig att "[ / i ]" var en del av länken...

Jag råkade visst klistra in fel på andra citatet, det skulle vara "En sak är jag inte helt med på, vad gör xxoch yy?"


Forum » Datorer & IT » Webbutveckling & Programmering » Trigonometri java

Ansvariga ordningsvakter:

Användare som läser i den här tråden just nu

1 utloggad

Skriv ett nytt inlägg

Hej! Innan du skriver om ett potentiellt problem så vill vi påminna dig om att du faktiskt inte är ensam. Du är inte onormal och världen kommer inte att gå under, vi lovar! Så slappna av och gilla livet i några minuter - känns det fortfarande hemskt? Skriv gärna ner dina tankar och frågor, vi älskar att hjälpa just dig!

Den här tråden är äldre än Rojks drömtjej!

Det senaste inlägget i den här tråden skrevs för över tre månader sedan. Är du säker på att du vill återuppliva diskussionen? Har du något vettigt att tillföra eller passar din fråga i en ny tråd? Onödiga återupplivningar kommer att låsas så tänk efter en extra gång!

Hjälp

Det här är en hjälpruta

Här får du korta tips och förklaringar om forumet. Välj kapitel i rullningslisten här ovanför.

Rutan uppdateras automagiskt

När du använder funktioner i forumet så visas bra tips här.


Annons
Annons
Annons
Annons