AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einen Winkel errechnen!?

Ein Thema von ISAS · begonnen am 25. Feb 2005 · letzter Beitrag vom 26. Feb 2005
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#11

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 16:24
Zitat:
A = arccos(X) * 180 / pi;
Gibt es bei Arctan(x) einen Unterschied oder folgt darauf auch *180 / pi??

Komme irgendwie nicht so richtig hin, da ich will, dass ein Sprite immer dahin schaut, wo die Maus ist.
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 16:28
Zitat:
A = arccos(X) * 180 / pi;
A = arcsin(X) * 180 / pi;
A = arctan(X) * 180 / pi;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#13

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 16:37
Es funktioniert trozdem nicht.
Ich geb mal die EXE-File dazu. Dann sieht man den Fehler besser.
Der Code für das lautet nämlich so:

Angle:=trunc((arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi)); Aim.Y-Player.Y ergibt die Gegenkathete
Aim.X-Player.X ergibt die Ankathete
Angehängte Dateien
Dateityp: zip project1_667.zip (218,4 KB, 9x aufgerufen)
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 17:04
Angle:=trunc((arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi)); Warum nicht so:
Angle:=Round((arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi)); Am sonsten, wenn du uns Code posten würdest, könnten wir hilfreicher sein.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#15

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 17:10
Naja, weil das der COde ist. Somit schaut der Spieler in die Richtung, wo die Maus ist. Sollte er jedenfalls. Ich poste mal den Code, wird aber auch nicht weiterhelfen.

Delphi-Quellcode:
Procedure TPlayer.domove(MoveCount: Integer);
begin

 Angle:=Round(arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi);

  inherited DoMove(MoveCount);
  
  X := Cos256(Angle)+200;
  Y := Sin256(Angle)+200;

end;
Zwar kann man hier nicht gehen, dass is aber auch unwichtig, da zuerst mal der SPieler in die richtige Richtung schaun muss, was er aber nicht tut
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 17:23
Zitat von ISAS:
...
Ich poste mal den Code, wird aber auch nicht weiterhelfen.

Delphi-Quellcode:
Procedure TPlayer.domove(MoveCount: Integer);
begin

 Angle:=Round(arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi);

  inherited DoMove(MoveCount);
  
  X := Cos256(Angle)+200;
  Y := Sin256(Angle)+200;

end;
Zwar kann man hier nicht gehen, dass is aber auch unwichtig, da zuerst mal der SPieler in die richtige Richtung schaun muss, was er aber nicht tut
Ich weiß zwar nicht genau, was die Funktionen Cos256 und Sin256 berechnen (wenn es Sinus- und Cosinuswerte sind, kann man doch auch sin und cos nehmen, oder besser SinCos), aber ich vermute jetzt mal dass es an den letzten beiden Zeilen liegt:
Delphi-Quellcode:
Procedure TPlayer.domove(MoveCount: Integer);
begin
  Angle:=Round(arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi);
  inherited DoMove(MoveCount);
  
  X := Cos256(Angle)*200;
  Y := Sin256(Angle)*200;
  {//oder:
  SinCos(Angle, Y, X);
  X:= 200*x;
   Y:= 200*y;}


end;
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#17

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 17:33
Ich hoffe das hilft:
Delphi-Quellcode:

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  center : tpoint;

implementation

uses Math;

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
begin
 Canvas.FillRect(ClientRect);

 Canvas.MoveTo(0, height div 2);
 Canvas.LineTo(width, height div 2);

 Canvas.MoveTo(width div 2, 0);
 Canvas.LineTo(width div 2, height);

 center := point(width div 2,height - height div 2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Canvas.Pen.Color := clBlack;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var angle,p : extended;

begin
  angle := 0;
  p := 1;
  FormPaint(self);
  Canvas.MoveTo(width div 2, height div 2);
  Canvas.LineTo(x,y);

  y := Height - y;
  Label1.Caption := 'y-center.Y = '+inttostr(y-center.Y);

  if (x-center.X <>0) then
  begin
   Angle := ArcTan((y-center.Y)/(x-center.X)) * 180 / pi;
   Label3.Caption := 'x-center.X = '+inttostr(x-center.X);

   if (angle<0)and(x-center.X<0) then angle := 180 + angle
        else
   if (x-center.X<0)and(y-center.Y<0) then angle := 180 + angle
        else
   if (y-center.y<0) then angle := 360 + angle;

   Label2.Caption := 'Current angle: '+Floattostr(angle)+ ' degrees.';
  end;
end;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#18

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 18:38
Danke, hat sehr geholfen. Wusste schon, worans liegt. Nämlich an den 360°, nicht 90°.
Jetzt hab ich nur noch ein Problem. Der richtige Winkel wird angezeigt, doch das Bild dreht sich nicht richtig. Hier ist der Code:

Delphi-Quellcode:
if (Aim.x-Player.X <>0) then
  begin
   Player.Angle := trunc(ArcTan((Aim.y-Player.Y)/(Aim.x-Player.X)) * 180 / pi);
   if (Player.Angle<0)and(Aim.x-Player.X<0) then Player.Angle := 180 + Player.Angle
        else
   if (Aim.x-Player.X<0)and(Aim.y-Player.Y<0) then Player.Angle := 180 + Player.Angle
        else
   if (Aim.y-Player.y<0) then Player.Angle := 360 + Player.Angle;
  end;
  Form1.Label2.Caption:=floattostr((Player.Angle-360)*-1);

  Player.X := Cos256((Player.Angle-360)*-1)+200;
  Player.Y := Sin256((Player.Angle-360)*-1)+200;
Nach dem Label2 das richtige ausgibt, stimmt nur irgendwas mit den letzten 2 Zeilen nicht.. Vielleicht sieht jemand was
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#19

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 19:52
Wenn du uns jetzt noch verrätst, was sin256 und cos256 ist .
Ich verstehe auch dein Problem nicht. Du wolltest, dass der Spieler zum Ziel schaut, wozu veränderst du jetzt dessen Position? Und den Sinn hinter einer Addition oder Subtraktion eines Winkel mit 360° entdecke ich auch nicht (eine Funktion, die den Winkel auf 0..359 bringt, hätte ich noch verstanden).
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#20

Re: Einen Winkel errechnen!?

  Alt 25. Feb 2005, 19:59
Also:
sin256, cos256 hab ich beim suchen gefunden (Sprites drehen). Leider kA was die machn.

Der Spieler soll immer in die Richtung der Maus schaun.

Das ganze ist DelphiX, somit kann man mit Angle den Winkel des Spielers festlegen.

Der Winkel wird ja richtig errechnet. Nur das darstellen funktioniert nicht so ganz. Siehe EXE-File
Angehängte Dateien
Dateityp: zip project1_838.zip (220,6 KB, 9x aufgerufen)
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz