Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

moin leude,

ich brauche für ein programm die sinusfunktion. diese scheint aber nicht einwandfrei zu funktionieren. mein code ist folgender


for ( int i=0; i<=m_SavedData.GetSize(); i++ )

{

   // float alpha -> wert zuweisen

   tmp.m_SavedData.GetData(i);

   float steps = radius / (tmp.GetLength() / 2 );

   float addx = (float) sin (alpha) * steps

   // weitere code folgt

}

weiter info

1.) m_SavedData ist eine eigene Klasse, dessen funktion GetSize() die anzahl gespeicherter Elemente liefert. die funktion GetData(int n) liefer das nte Element eines Array. das element ist von Typ CString.

2.) tmp ist von Typ CString

3.) radius ist vom Typ float

werte :

alpha ändert seinen wert bei jedem durchlauf der schleife. und zwar in der reihenfolge

45.000000

43.200001

41.400002

39.599998

...

steps ist immer 0.636364

addx ändert seinen wert ebenfalls und zwar in der reihenfolge:

0.541484

-0.448579

-0.337648

0.602008

...

das problem dabei ist, das addx einmal negativ und dann wieder positiv ist, obwohl es das eigentlich nicht sollte. und daran ist die funktion sin() schuld. sie liefert mir falsche werte und zwar:

sin(45.000000) -> 0.850904

sin(43.200001) -> -0.704910

sin(41.400002) -> -0.530590

sin(39.599998) -> 0.946013

diese werte sind eindeutig falsch. und deshalb auch meine frage. WARUM ???

Geschrieben

Hallo maddin,

der Sinus kann durchaus negative Werte annehmen und damit auch addx. Das haengt von alpha ab und ueber alpha hast Du uns so ziemlich gar nichts erzaehlt!

Uli

Geschrieben

Hallo!

Also wenn ich meinen Taschenrechner auf "rad" stelle, statt auf normale Rechnung, dann kriege ich genau die Werte heraus, die dir die Sinus-Fkt angibt. Die Werte sind also durchaus korrekt, werden aber "anders" berechnet... :D

Versuche doch mal den voreingestellten, verwendeten Rechenmodus in deinem Prog von RAD auf DEG zu stellen. Dann dürftest du das haben, was du dachtest.

cya

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Tachyoon:

<STRONG>Hallo!

Also wenn ich meinen Taschenrechner auf "rad" stelle, statt auf normale Rechnung, dann kriege ich genau die Werte heraus, die dir die Sinus-Fkt angibt.</STRONG>

Geschrieben

danke aber könnte nebenbei mal einer erwähnen, wie man das format umstellt. dann brauch ich meine bücher nicht zu suchen.

@EisenUli

ich habe erwähnt, das sich alpha bei jedem schleifendurchlauf ändert und auch die entsprechenden werte notiert. ich denke das es nicht nötig ist da noch weiter drauf einzugehen, besonders, weil die werte von inhalt von m_SavedData abhängen.

[ 29. Juni 2001: Beitrag editiert von: maddin ]

Geschrieben

Hi maddin,

du musst deinen Wert für Alpha vorher von deg (Grad) in rad (Bogenmass) umrechnen. :)

rad = deg * PI / 180

deg = rad * 180 /PI

Manne :cool:

Geschrieben

Radiant/Pi = Degree/180°


float DegToRad (float Degree)

{ 

 return Pi/180.0*Degree; 

};


float RadToDeg (float Radiant)

{

 return 180.0*Radiant/Pi; 

};

[ 29. Juni 2001: Beitrag editiert von: hades ]

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von maddin:

<STRONG> ich denke das es nicht nötig ist da noch weiter drauf einzugehen,

</STRONG>

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...