Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

1

15.07.2015, 13:57

[C++] Falsches Runden in Funktion ?

Hi Leute :)

Hab nun eine Funktion erstellt, um meinen Kreis um einen bestimmten Punkt drehen zu lassen,
also der Mittelpunkt um einen bestimmten Punkt:

C-/C++-Quelltext

1
2
3
4
5
6
void Physic::CollisionShape::Circle::rotate
(sf::Vector2f aNullPoint,float Degrees)
{
    Position.x = aNullPoint.x+(Position.x-aNullPoint.x)*cosf((M_PI/180)*Degrees)-(Position.y-aNullPoint.y)*sinf((M_PI/180)*Degrees);
    Position.y = aNullPoint.y+(Position.x-aNullPoint.x)*sinf((M_PI/180)*Degrees)+(Position.y-aNullPoint.y)*cosf((M_PI/180)*Degrees);
}


Nun ist das Problem, dass wenn ich die Funktion aufrufe, sich der Kreis immer mehr zu den bestimmten Punkt bewegt.
Hat das was mit float zu tun ? Zu wenig präzise ? Oder "falsches" Runden ?

Danke
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

15.07.2015, 14:03


Position.x = aNullPoint.x+(Position.x-aNullPoint.x)*cosf((M_PI/180)*Degrees)-(Position.y-aNullPoint.y)*sinf((M_PI/180)*Degrees);
Position.y = aNullPoint.y+(Position.x-aNullPoint.x)*sinf((M_PI/180)*Degrees)+(Position.y-aNullPoint.y)*cosf((M_PI/180)*Degrees);


Du veränderst Position und benutzt es danach. Speicher dir das ergebnis zwischen und dann sollte das gehen.

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

3

15.07.2015, 14:09

Position.x & Position.y sind ja im struct vom Kreis gespeichert.
Ich weiß jetzt nicht wie du es jetzt meinst, sry :|
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

15.07.2015, 14:17

Du verwendest in der Berechnung der neuen Position.y bereits die neue Position.x, dort sollte aber die alte Position.x verwendet werden...

Abgesehen davon ist M_PI non-standard und in C++ würde man besser std::sin() bzw. std::cos() verwenden. ;)

hanhau

Treue Seele

  • »hanhau« ist der Autor dieses Themas

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

5

15.07.2015, 14:21

Okay, das hat jetzt sickern müssen ^^

Sind die Rückgabewerte von std:sin() und std::cos() in Radiant oder in Grad angegeben ?

Danke für deine Hilfe dot und sylence :)
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

15.07.2015, 14:27

Sind die Rückgabewerte von std:sin() und std::cos() in Radiant oder in Grad angegeben ?

Das Ergebnis von cos() bzw. sin() hat keine Einheit, die Argumente werden aber selbstverständlich in Radiant erwartet... ;)

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

7

15.07.2015, 14:50

Dazu gibt es uebrigens eine sogenannte "Doku" (auch FM genannt), in der man das ganz einfach nachschlagen kann.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

15.07.2015, 15:42

Z.B. so ^^

9

15.07.2015, 15:48

Der Kosinus gibt ja bekanntlich die x-Koordinate des Punktes auf dem Einheitskreis für den gegebenen Winkel des Radius an, der am Ende dessen liegt, also macht "Rad oder Deg" keinen Sinn. ;)

MfG
Check

Werbeanzeige