Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
22.05.2003, 22:36
DolHalflife



Hallo Programmierer/innen...

Ich arbeite mit Visual C++, der von Microsoft hergestellt. Die Programm ist nicht alt, hat eine Version 6.0 mit Professional (legal, als Schülerversion besorgt).

Ich möchte die Sinus (glaube ich) und Cosinus (glaube ich) jede Gradwinkel die Ergebnisse anzeigen lassen statt über Rechner (Taschenrechner) im PC tippen. Bis jetzt habe ich eine Problem mit Ausgabe der Sin. und Cos..

Ich gebe folgende Code...

Quellcode:
#include <iostream.h>
#include <math.s>

void main()
{
  // Der Funktion gibt kein Wert zurück, void.

  float sin = 0, cos = 0;
  for(int i = 0; i < 91; i++)
  {
    sin = sin(i);   // Die Ergebnisse der Sin-Funktion wird an sin zugewiesen.
    cos = cos(i);  // Die Ergebnisse der Cos-Funktion wird an cos zugewiesen.

    cout << "SIN: " << sin << " | COS: " << cos << endl;
  }
}
Nun habe ich eine Problem, die Sin-Funktion und Cos-Funktion geben ihre falsche Ergebnisse zurück. Ich habe mit PcRechner + Taschenrechner vergleichen... PcRechner und Taschenrechner haben ihre gleiche Wert als über Programm zu checken...

Was habe ich falsch gemacht...

PS: Unsere Schule habe geweigert, mich die Informationen über Sin und Cos zu übermitteln, naja diese Realschule, denn Sin und Cos ist auf ganzem Programm sehr wichtig, damit die Simulation ihre richtige Gradwinkel ansetzt... >:/

--

I'm deaf
Bin gehörlos.. naund?

zum Seitenanfang zum Seitenende Profil || Suche
001
22.05.2003, 22:43
Onkel Dittmeyer



Die trigonometrischen Funktionen aus der math.h arbeiten alle mit _Bogenmaß_ (hoffe du weißt, was das ist), dein Taschenrechner arbeitet standardmäßig mit "echten" Gradwerten. Wenn du ihn auf den Modus Rad[ians] stellst, solltest du gleiche Ergebnisse erhalten. Um Grad in Rad umzurechnen machst du einfach sowas z.B.:Quellcode:double DEG_TO_RAD(float deg)
{
    return deg * PI / 180; //im Bogenmaß entspricht PI - 180°
}

--


Dieser Beitrag wurde am 22.05.2003 um 22:44 von Onkel Dittmeyer bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
22.05.2003, 22:44
CN



könnte es vielleicht sein dass die sin funktio nicht den winkel, sondern das bogenmass haben will
also zb statt 180°, PI usw.

crap
dittmeyer
du drängler

--


Dieser Beitrag wurde am 22.05.2003 um 22:45 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
22.05.2003, 22:46
ScyTheMan
Moderator


Das hatte ich doch neulich erst gefragt
http://www.thewall.de/forum/showtopic.php?threadid=32665&time=1052587689
:)

--

http://choerbaert.org
Ein Gespenst geht um im Netz - das Gespenst des Open Source
csndr

zum Seitenanfang zum Seitenende Profil || Suche
004
22.05.2003, 22:49
CN



O_o
scytheman
ich glaub das is "leicht" was andres O_o

--

zum Seitenanfang zum Seitenende Profil || Suche
005
22.05.2003, 23:00
DolHalflife



Gut, ich werde das mal ausprobieren... *hofft auf gleiche Ergebnisse wie auf PcRechner...*

Ich habe einige Links gesammelt über Sin und Cos...
http://www.specialart.ch/maturaarbeit/mathematik.html

In diese Code steht nur Sin und Cos, kein Bogenmaß ?? O_o

Bogenmaß meint ihr, dass wie auf dem Bild steht ?
http://www.elektrotechnik-fachwissen.de/pdf/gradmass-bogenmass.pdf

--

I'm deaf
Bin gehörlos.. naund?

zum Seitenanfang zum Seitenende Profil || Suche
006
22.05.2003, 23:17
CN



ja das is schon richtig

statt des winkels alpha nimmt man das bogenmass des kreissektors:

b = 2 * pi * r * alpha/360

da der radius im einheitskreis 1 is kann man den weglassen

b = 2pi * alpha/360

wenn alpha 180° is
b = 2pi * 1/2
b = pi

in der zeichnung is das grüne das bogenmass

so ungefähr..

--


Dieser Beitrag wurde am 22.05.2003 um 23:17 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
23.05.2003, 00:18
DolHalflife



Quellcode:[b]Ausgabe aus der Konsole[/b]
SIN: 0.857167   | COS: 0.515038
SIN: 0.866025   | COS: 0.5
SIN: 0.87462   | COS: 0.48481
SIN: 0.882948   | COS: 0.469472
SIN: 0.891007   | COS: 0.45399
SIN: 0.898794   | COS: 0.438371
SIN: 0.906308   | COS: 0.422618
SIN: 0.913545   | COS: 0.406737
SIN: 0.920505   | COS: 0.390731
SIN: 0.927184   | COS: 0.374607
SIN: 0.93358   | COS: 0.358368
SIN: 0.939693   | COS: 0.34202
SIN: 0.945519   | COS: 0.325568
SIN: 0.951057   | COS: 0.309017
SIN: 0.956305   | COS: 0.292372
SIN: 0.961262   | COS: 0.275637
SIN: 0.965926   | COS: 0.258819
SIN: 0.970296   | COS: 0.241922
SIN: 0.97437   | COS: 0.224951
SIN: 0.978148   | COS: 0.207912
SIN: 0.981627   | COS: 0.190809
SIN: 0.984808   | COS: 0.173648
SIN: 0.987688   | COS: 0.156434
SIN: 0.990268   | COS: 0.139173
SIN: 0.992546   | COS: 0.121869
SIN: 0.994522   | COS: 0.104528
SIN: 0.996195   | COS: 0.0871557
SIN: 0.997564   | COS: 0.0697565
SIN: 0.99863   | COS: 0.052336
SIN: 0.999391   | COS: 0.0348995
SIN: 0.999848   | COS: 0.0174524
SIN: 1   | COS: 6.12303e-017
Wirklich viele Dank für ihre Bemühung... endlich kriege ich echte Sin und Cos hin...

Noch eine Frage, wenn ihr einverstanden wärt: Ich habe einige Engine sowie Halflife angeschaut, die tragen nur Sin und Cos ein ohne voher PI/180 einzuberechnen... hat die eine bessere Code als meins ?

--

I'm deaf
Bin gehörlos.. naund?


Dieser Beitrag wurde am 23.05.2003 um 00:18 von DolHalflife bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
23.05.2003, 00:55
Retro



es kann gut sein dass diese engine ausschließlich mit dem bogenmaß arbeitet...

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
009
24.05.2003, 00:15
Leviathan



@Onkel Dittmeyer: Solche Funktionen macht man inline oder noch besser als Makro, damit es schneller wird. Und PI/180f würde ich auch noch als float-Konstante deklarieren, dann spart man sich die Division. Das ist allerdings nur interessant, wenn es in einem wirklich zeitkritischem Teil des Programms vorkommt.

Es kann sein, dass Grafikengines komplett im Bogenmaß rechnen, weil sie überhaupt nicht darüber nachdenken, in welcher Einheit die Winkel nun angegeben sind. Je nachdem, wo die Winkel herkommen, sind sie automatisch schon Bogenmaß, z.B. arbeiten auch die Arcusfunktionen aus ANSI-C im Bogenmaß.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
010
24.05.2003, 01:04
DolHalflife



Aha... und wie könnte ich vorstellen, wenn ich als Player durch 3D-Welt jage, Kamera (Perspektive), muss man in Code eintippne.. Vektor, usw... und alle verwenden nur SIN und COS (ohne PI/180)... 3D wird richtig angezeigt, aber ich könnte nicht verstehen, als wäre 3D falsch angezeigt, wenn ich es selbst codiere...

--

I'm deaf
Bin gehörlos.. naund?

zum Seitenanfang zum Seitenende Profil || Suche
011
24.05.2003, 08:28
Tron



Zitat:
Leviathan:
oder noch besser als Makro
stirb! Stirb! STIRB!

@DH:
mit dem bogenmas zu arbeiten ist ganz simpel:
winkel gehen dann statt von 0° bis 360° einfach nur von 0 bis 2*pi (~6.28318)
das ist auch schon alles.
in wieviele teile man einen vollkreis einteilt ist im prinzip egal.
z.b. ganz frueher als noch lookup-tables fuer sin/cos verwendet wurden, da flieskommaprozessoren nicht vorhanden oder zu lahm waren, wurde ein kreis gerne in 128 teile geteilt.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
012
24.05.2003, 09:42
Onkel Dittmeyer



Zitat:
@Onkel Dittmeyer: Solche Funktionen macht man inline oder noch besser als Makro, damit es schneller wird.
Hrhr ich habe gewusst dass das kommt =)
Du wirst lachen, aber ich habe es in meinen Projekten immer als inline deklariert und zuerst auch so eingefügt, aber ich wolltes einfach simpel halten...
/edit
Gibts eigentlich in OpenGL ne Rotate Funktion die mit Bogenmaß arbeitet? glRotatef(...) arbeitet ja mit Degrees :/

--


Dieser Beitrag wurde am 24.05.2003 um 09:47 von Onkel Dittmeyer bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
013
24.05.2003, 10:21
Kriz



Zitat:
Tron:
Zitat:
Leviathan:

oder noch besser als Makro

stirb! Stirb! STIRB!

*sich anschließt*

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
014
25.05.2003, 02:15
Leviathan



Was habt ihr denn gegen Makros? Na gut, die sind nicht typensicher, aber dafür auch garantiert inline und superschnell. Gegen inline widersetzt sich der MS-Compiler afaik doch mal gerne, und _forceinline ist compilerabhängig. In C waren Makros noch etwas edles, aber das hat sich mit C++ ja etwas geändert.

Vielleicht sollte man noch Neugrad anführen, bei dem in Gegensatz zu Altgrad ein Kreis nicht 360°, sondern 400 Neugrad hat. Ein rechter Winkel hat damit 100 Neugrad. Das hat sich aber nie so recht durchgesetzt, die meisten Taschenrechner können es aber noch (GRAD in der Anzeige).

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
015
25.05.2003, 03:53
Retro



makros... damit der precompiler brav bei jeder gelegenheit die komplette rechnung einsetzt? superschnell? haben wir die selbe definition von makros? ich für meinen teil meine jedenfalls dieses schöne wort define mit der # davor...

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche