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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

07.05.2012, 23:18

Die Lösung aus dem Wiki liefert immer das richtige Ergebnis, wenn eines existiert. Im Falle dass die Linien parallel sind, gibt es natürlich keinen Schnittpunkt bzw. unendlich viele (wenn die Linien gleich sind). Wenn du die Formel anschaust, äußert sich das dadurch, dass der Nenner zu Null wird.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

12

08.05.2012, 16:09

Wie lautet denn das richtige Ergebnis wenn die Strecken Parallel oder gleich sind?
In dem einen Fall gibt es keine Ergebnis und im anderen gibt es unendlich viele.

edit: arg, ich vergess immer auf die nächste Seite zu gehen -.-
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

13

08.05.2012, 16:41

Also wenn sie parallel sind, kann es ja noch sein, dass sie auf der gleichen Geraden liegen und sich da überlappen...
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

14

08.05.2012, 16:54

Du suchst nach einem Punkt. Wenn sie sich überlappen bekommst du aber eine Strecke und auf dieser Strecke gibt es unendlich viele Punkte. Wer soll bestimmen welcher dieser Punkte genutzt wird?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

15

08.05.2012, 16:59

Es geht nur darum ob und nicht wo...
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

16

08.05.2012, 17:02

Wenn sie Parallel sind prüfst du alle Start- und Endpunkte ob sie auf der anderen Strecke liegen. Ich kenn zwar deinen Verwendungszweck nicht, aber ist es nicht sehr unwahrscheinlich, dass das passiert?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

17

08.05.2012, 17:12

Also ich sag mal sie Reihenfolge, wie ich es durchführen müsste und ihr sagt, ob das so stimmt.
Ich hab jetzt mal schnell so die reihen folge geschrieben, is bissl unordentlich.
Da müsstet ihr mal gucken, ob sie stimmt oder wo noch ein Fehler ist.

Is alles nit so schön, es geht aber erstmal um das grobe!

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
bool StreckenSchneidenSich (const Ogre::Vector3 A, const Ogre::Vector3 B, const Ogre::Vector3 AB, const Ogre::Vector3 C, const Ogre::Vector3 D)
{       
    // verbindungsvektor von C und D
    Ogre::Vector3 CD = D-C;

    // testen ob einer der Graphen parallel zur y achse ist
    bool ABP = B.x-A.x == 0.0 ? true : false;
    bool CDP = D.x-C.x == 0.0 ? true : false;

    // die jeweiligen m Werte ausrechnen
    float ABm = (B.y-A.y) / (B.x-A.x);
    float CDm = (D.y-C.y) / (D.x-C.x);

    float x = 0;
    float y = 0;

    // wenn keiner parallel zur y achse ist
    if(!ABP && !CDP)
    {
        // die jeweiligen b Werte ausrechnen
        float ABb = A.y - ABm*A.x;
        float CDb = C.y - CDm*C.x;

        // Fals sie gleichen steigungswinkel aber andere yachsenabschnitte haben
        if(ABm == CDm && ABb != CDb)
            return false;
        else if (ABm == CDm && ABb == CDb) 
        {
            // Wenn sie gleiche steigungswinkel und gleiche yachsenabschnitte haben
            // Alle punkte testen
            if(((A.z-C.z)/CD.z <= 1.0 && (A.z-C.z)/CD.z >= 0.0 && (A.x-C.x)/CD.x <= 1.0 && (A.x-C.x)/CD.x >= 0.0) || 
               ((B.z-C.z)/CD.z <= 1.0 && (B.z-C.z)/CD.z >= 0.0 && (B.x-C.x)/CD.x <= 1.0 && (B.x-C.x)/CD.x >= 0.0) ||
               ((C.z-A.z)/AB.z <= 1.0 && (C.z-A.z)/AB.z >= 0.0 && (C.x-A.x)/AB.x <= 1.0 && (C.x-A.x)/AB.x >= 0.0) || 
               ((D.z-A.z)/AB.z <= 1.0 && (D.z-A.z)/AB.z >= 0.0 && (D.x-A.x)/AB.x <= 1.0 && (D.x-A.x)/AB.x >= 0.0))
                return true;
            else return false;  
        }
        else
        {
            // wenn Ab parallel is
            if(ABP)
            {
                x = A.x;
                y = ABm*x+ABb;
            }
            else if(CDP) // wenn CD parallel ist
            {
                x = C.x;
                y = CDm*x+CDb;
            }
            else
            {
                // wenn keiner parallel ist, Schnittpunkt berechnen
                x = (CDb-ABb)/(ABb-CDb);
                y = ABm*x + ABb;
            }

            // testen, ob schnittpunkt innerhalb der beiden Strecken liegt.
            if((x-A.x)/AB.x <= 1.0 && (x-C.x)/CD.x <= 1.0 && (x-A.x)/AB.x >= 0.0 && (x-C.x)/CD.x >= 0.0 &&
               (y-A.y)/AB.y <= 1.0 && (y-C.y)/CD.y <= 1.0 && (y-A.y)/AB.y >= 0.0 && (y-C.y)/CD.y >= 0.0)
               return true;
            else
                return false;
        }
    }
    else if(ABP && CDP && C.x != A.x) // wenn beide parallel zur yachse sind, aaber an einer anderen Stelle
        return false;
}; 
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

18

08.05.2012, 17:13

Bei meinem Spiel kann das nur am anfang passieren,m ist da aber sehr wichtig!
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

08.05.2012, 17:38

Niemals zwei floats mit == oder != vergleichen!
Das geht fast immer in die Hose.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

20

08.05.2012, 17:46

Anstelle von

C-/C++-Quelltext

1
2
3
if(*bedingung*)
return true;
else return false;

kannst du auch gleich

C-/C++-Quelltext

1
return bedingung;

schreiben.

Was passiert wenn das letzte if false ist?
Hast du deine Warnungen ausgeschaltet?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige