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

1

06.02.2006, 20:59

s 101, 2.2.8 3. aufgabe

Ich komme dem fehler nicht ganz auf die schliche. code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <TriBase.h>

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    tbInit();

    tbVector3 Vector[5000];
    
    int VorEbene = 0, AufEbene = 0, HinterEbene = 0;

    for (int x = 0; x < 5000; x++)
    {
        Vector[x]= tbVector3Random();
    }

    tbPlane Ebene= tbPlaneFromPoints(Vector[tbIntRandom(0, 5000)], Vector[tbIntRandom(0 , 5000)], Vector[tbIntRandom(0, 5000)]);

    for (x = 0; x < 5000; x++)
    {
        if (tbPointPlaneDistance(Vector[x], Ebene) > 0)
        {
            VorEbene++;
        }
        if (tbPointPlaneDistance(Vector[x], Ebene) < 0)
        {
            HinterEbene++;
        }
        if (tbPointPlaneDistance(Vector[x], Ebene) == 0)
        {
            AufEbene++;
        }
    }
    
    tbWriteToLog("Vor Ebene: %d, Hinter Ebene: %d und genau auf der Ebene: %d", VorEbene, HinterEbene, AufEbene);

    tbExit();
    return 0;
}


Logischerweise sollten ja 3 der Punkte auf der Ebene Ligen, dem ist aber nicht so. wo liegt der Fehler? Kommt das von der ganz leichten ungenauikeit? damit wäre es ja nicht == 0. Und algemein, was gibt es an dem code auszusetzen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.02.2006, 21:21

Re: s 101, 2.2.8 3. aufgabe

Zitat von »"Basil"«

Kommt das von der ganz leichten ungenauikeit? damit wäre es ja nicht == 0.

Richtig, es handelt sich um Fließkommazahlen, und die sind nicht unendlich genau. Darum solltest Du z.B. alles zwischen -0.0001 und +0.0001 als Null betrachten. Dementsprechend musst Du natürlich "> 0" in "> 0.0001" und "< 0" in "< -0.0001" ändern.

Zitat von »"Basil"«

Und algemein, was gibt es an dem code auszusetzen?

Du hast dreimal exakt denselben Funktionsaufruf in der Schleife. Das ist unnötig langsam, und wenn Du mal was änderst, musst Du es gleich dreimal ändern. Warum nicht einfach ein einziges Mal berechnen und in einer Variablen zwischenspeichern?

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

3

06.02.2006, 21:25

David Scherfgen
thx die selbe Frage hab ich mir auch gestellt, als ich die Aufgabe gelöst habe :)
Ich würde die Welt gern verbessern, doch Gott gibt mir den Sourcecode nicht! :-(

4

06.02.2006, 22:33

Vielen dank für die bestätigung und Antwort! :)

Und ja, da habt ihr selbstverständlich recht! Auf den Geschwindikeit Aspekt sollte ich noch ein bissl mehr achten!

Werbeanzeige