AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Winkel - Rotation

Ein Thema von Airblader · begonnen am 20. Dez 2005 · letzter Beitrag vom 21. Dez 2005
Antwort Antwort
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#1

Winkel - Rotation

  Alt 20. Dez 2005, 21:23
Hi
Ich will grade ein Bild (Ball u.ä.) rotiert bewegen, also in alle Richtung mit Winkel.

Irgendwie geht diese Rechnung nicht richtig (hab sie mir "zusammengesucht") - er rotiert immer in 45°-Schritten, obwohl der Winkel +/- 1 gerechnet wird.
Winkel ist ein Real, Pos eben TPoint:


Delphi-Quellcode:
Player.Pos.X := Round(Player.Pos.X + cos(DegToRad(Player.Winkel)));
Player.Pos.Y := Round(Player.Pos.Y + sin(DegToRad(Player.Winkel)));

Was stimmt denn daran nun nicht?

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Winkel - Rotation

  Alt 20. Dez 2005, 21:31
? Willst du nun ein Bild rotieren oder eine Figur bewegen? Auf jeden Fall wird sich Pos nur auf die 9 Pixel um die aktuelle Position herum verlagern, da du das Ergebnis rundest -> Ergebnisse von cos und sin = -1, 0 oder 1 -> 45°
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#3

Re: Winkel - Rotation

  Alt 20. Dez 2005, 21:33
Stimmt, da is was wahres dran (nun gut, ich will sie bewegen).
Aber was kann ich dann machen, irgendwie muss ich ja runden, da Integer

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Winkel - Rotation

  Alt 20. Dez 2005, 21:40
Ich könnte dir besser antworten, wenn ich wüsste, wie das Bewegen genau von Statten gehen soll . Wenn du es in einer Animation bewegst und deshalb wirklich immer nur um ca. 1-2 Pixel verschieben kannst (und der Winkel sich ständig ändert), musst du intern Floats für die Position verwenden und zum Zeichnen wieder runden. Falls du die GR32-Lib hast, kannst du einfach GR32.TFloatPoint und die vielen Routinen dazu benutzen. Falls du das Objekt auch über eine längere Strecke auf einmal bewegen kannst, musst du das Ergebnis von sin/cos mit dem Radius multiplizieren, mit größerem Radius verringert sich die Ungenauigkeit.
Delphi-Quellcode:
// Player um 10 Pixel bewegen
// Das Runden sollte nicht mehr sichtbar sein
Player.Pos.X := Round(Player.Pos.X + 10 * cos(DegToRad(Player.Winkel)));
Player.Pos.Y := Round(Player.Pos.Y + 10 * sin(DegToRad(Player.Winkel)));
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#5

Re: Winkel - Rotation

  Alt 21. Dez 2005, 11:40
Danke, mit internen Floats gehts - manchmal denkt man einfach zu kompliziert
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:05 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