Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 05:15

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: arcsin ?
BeitragVerfasst: Mi Mär 24, 2004 18:42 
Offline
DGL Member

Registriert: Mi Mär 24, 2004 16:45
Beiträge: 29
Also ich muss als erstes sagen, dass ich leider erst in der 10Klasse bin und deswegen noch mathematische probs bei 3d programmierung habe.

so habe ich jetzt endlich herrausgefunden, welche rotation ein model benutzen muss, damit es zu einem andren guckt. Das is ja ganz gut wenn man weiss in welche richtung ein Bot gucken muss.

Ich benutze folgenden Code, den ich mir mit Hilfe von irgentwelchen Mathe Sites und nem Tut von DGL zusammengebastelt habe. Der auch funzt.

Code:
  1.  
  2. function winkel(x1,z1,x2,z2: GLFloat):GLFloat;
  3. var
  4. hyp,tmprot: glfloat;
  5. relx,rely: glFloat;
  6. begin
  7.  relx:=x2-x1;
  8.  rely:=z2-z1;
  9.  hyp:=sqrt(relx*relx+rely*rely);
  10.  relx:=relx/hyp;
  11.  rely:=rely/hyp;
  12.  tmprot:=arcsin(rely)*60;
  13.   if relx>=0 then
  14.     tmprot:=180-tmprot;
  15.  tmprot:=tmprot-90;
  16.  if tmprot<0 then tmprot:=360+tmprot;
  17.  result:=tmprot;
  18. end;
  19.  


den satz des pythagoras kann ich ja aber mit arcsin bin ich echt überfordert. Denn der Bot guckt zwar jetzt in die richtige richtung, aber ich kann ihn irgentwie nicht mit der gleichen funktion nach vornelaufen lassen, mit der ich mein spieler model bewege (dessen Rotation wird durch maus bestimmt). Deshalb musste ich mir eine sehr hässlige funktion schreiben mit der er auch gehen kann, aber nicht so gut halt.

Mein spieler bewegt sich so

Code:
  1.  
  2.     X := X - sin(rot*pi/180)*FrameTime/s_forw;
  3.     Z := Z + cos(rot*pi/180)*FrameTime/s_forw;
  4.  


nach vorne.

Ich hoffe, die mathe genies hier wissen was ich falsch mache und wie meine Winkel funktion eigentlich gehen müsste.

Achja, die beiden x und z werte, die ich in die funktion eingebe, stellen die vektoren da, für die anwendung brauchte ich nix 3 dimensionales...
also x1,z1 is z.B. die pos vom Spieler und x2,z2 die vom bot.
Hoffe das war halbwegs verständlich

Schon mal danke im vorraus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 24, 2004 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Code:
  1.  
  2. function PunktzupiWinkel(X,Y:Double):Double;
  3. begin
  4.   if X = 0 then
  5.    if Y > 0 then  result := 0.5*pi else result:= 1.5*pi
  6.   else {X <> 0}
  7.    if X > 0 then  result := Arctan(Y/X) else  result := Arctan(Y/X) +pi;
  8. end;
  9.  

Diese Funktion berechnet den Winkel den ein Punkt zum Ursprung des Koordinaten System hat. Möchte man nun wissen in welchen Winkel Punkt1 zu Punkt 0 hat so muss man den Punkt 0 in den Ursprung verschieben.
Nehmen wir mal an wir haben
X0 := 3
Y0 := 7
X1 : = 8
Y1 : = -2
So wäre X1 5 weiter rechts als X0 (X1-X0),
und Y1 -9 weiter oben als Y0 (Y1-Y0) (also im Enteffekt 9 weiter unten)
Wir erhalten also im Prinzip einen Vektor der von P0 zu P1 Zeigt.
Wir müssen meine Funktion nur noch entsprechent aufrufen:
Code:
  1.  
  2. var
  3.   RichtunginPi:Double;
  4.   RichtungwieGewohnt:Double;
  5. begin
  6.   RichtunginPi := PunktzupiWinkel(X1-X0,Y1-Y0);
  7.   RichtungwieGewohnt := RichtunginPi / pi *180;
  8.   //Oder in einem
  9.   RichtungwieGewohnt := PunktzupiWinkel(X1-X0,Y1-Y0) / pi *180;
  10.  

Allerding solltest du das im Mathe Unterricht schon gehabt haben.
Nur noch mal so zur Erinnerung: :wink:
Im Rechtwinkligen Dreieck gilt:
  • Tangens aus Alpha = GegenKathete durch AnKathete;
  • Sinus aus Alpha = GegenKathete durch Hypothenuse;
  • Cosinus aus Alpha = AnKathete durch Hypothenuse;

Wobei die Hypothenuse(oder wie man das schreibt) immer gegenüber des rechten Winkel liegt.
MfG
IFlo
//Edit: Wort Hypothenuse ausgebessert

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Zuletzt geändert von Flo am Do Mär 25, 2004 14:18, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 25, 2004 12:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Hypothenuse :wink:

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 25, 2004 22:51 
Offline
DGL Member

Registriert: Mi Mär 24, 2004 16:45
Beiträge: 29
ja cool scheint ja ganz einfach zu sein.
klar ist es wichtig dass ich das zum kompletten verständnis mal in mathe durchnehmen sollte, aber das würd ja locker noch n paar monate dauern bis ich dafür grad mal die grundlagen lerne... solange wollte ich dann doch nich warten.

Also danke ich probier das gleich mal aus


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]