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

17.04.2017, 18:55

[Gelöst] Point in Triangle - Test (Baryzentrtische Koordinaten) funktioniert nicht

Hallo,

ich wollte überprüfen, ob ein Punkt in einem Dreieck liegt und verwende das System mit den Baryzentrischen Koordinaten. Jedoch bekomme ich immer false als Rückgabewert.

Hier der 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
bool tbPointIsInTriangle(tbVector2 vA, tbVector2 vB, tbVector2 vC, tbVector2 vP)
{
    tbVector2 v0, v1, v2;       

    v0 = vC - vA;
    v1 = vB - vA;
    v2 = vP - vA;

    float vDot00, vDot01, vDot02, vDot11, vDot12;       // Punktprodukte

    vDot00 = tbVector2Dot(v0, v0);
    vDot01 = tbVector2Dot(v0, v1);
    vDot02 = tbVector2Dot(v0, v2);
    vDot11 = tbVector2Dot(v1, v1);
    vDot12 = tbVector2Dot(v1, v2);

    float fU, fV;       // Bayzentrische Koordinaten

    float invDenom = 1 / (vDot00 * vDot11 - vDot01 * vDot01);

    fU = (vDot11 * vDot02 - vDot01 * vDot12) * invDenom;
    fV = (vDot00 * vDot12 - vDot01 * vDot02) * invDenom;

    return (fU >= 0) && (fV >= 0) && (fU + fV < 1);
}


Ich hoffe, mir kann jemand helfen, da es für die Schule ist.

Grüße
Patrick
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Patrick Z.« (20.04.2017, 06:42)


ByteJunkie

Alter Hase

Beiträge: 891

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

2

18.04.2017, 07:55

Welchen Rückgabewert liefert Deine Funktion denn? :rolleyes:
Mach was Du nicht lassen kannst und lass was Du nicht machen kannst. ;)

3

18.04.2017, 08:14

Welchen Rückgabewert liefert Deine Funktion denn? :rolleyes:

Zitat von »Patrick Z.«

Jedoch bekomme ich immer false als Rückgabewert.

Patrick: Klarer Fall für den Debugger! ;)
fka tm

ByteJunkie

Alter Hase

Beiträge: 891

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

4

18.04.2017, 08:38

Welchen Rückgabewert liefert Deine Funktion denn? :rolleyes:

Zitat von »Patrick Z.«

Jedoch bekomme ich immer false als Rückgabewert.

Patrick: Klarer Fall für den Debugger! ;)


Nicht ganz! :D Ich wollte Ihn auf Seinen Funktionskopf hinweisen. ;)
Mach was Du nicht lassen kannst und lass was Du nicht machen kannst. ;)

5

18.04.2017, 08:43

Welchen Rückgabewert liefert Deine Funktion denn? :rolleyes:

Zitat von »Patrick Z.«

Jedoch bekomme ich immer false als Rückgabewert.

Patrick: Klarer Fall für den Debugger! ;)


Nicht ganz! :D Ich wollte Ihn auf Seinen Funktionskopf hinweisen. ;)

Was soll mir das sagen?

Es ist eine Funktion, die einen Boolean zurückgeben sollte (steht auch so im Funktionskopf), und das tut sie auch.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

ByteJunkie

Alter Hase

Beiträge: 891

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

6

18.04.2017, 08:48

Sorry,

hab mir die Funktion nicht richtig angeschaut. Ich dachte du erwartest etwas anderes als true oder false. :dash:
Mach was Du nicht lassen kannst und lass was Du nicht machen kannst. ;)

7

18.04.2017, 08:52

Welchen Rückgabewert liefert Deine Funktion denn? :rolleyes:

Zitat von »Patrick Z.«

Jedoch bekomme ich immer false als Rückgabewert.

Patrick: Klarer Fall für den Debugger! ;)

Dann werde ich mich heute mal ans debuggen machen. :search:

Ich hatte gehofft, mir kann hier jemand schon den Fehler sagen, da das debuggen nicht immer ganz einfach ist.

Grüße
Patrick
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

8

18.04.2017, 09:25

Hör uff!
Ein Breakpoint gesetzt, und die Sucherei geht los die Werte prüfen, fertig...
Vorkauen ist nicht, Schule hin oder her! ;)
fka tm

9

18.04.2017, 09:36

Ich hab noch fast keine Erfahrungen mit dem Debugger, und stelle es mir schwer vor, die Variablen zu prüfen, wenn ich nicht weiß, was als Zwischenergwbnis rauskommen sollte.

Ich werde es aber versuchen
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

18.04.2017, 11:26

Ich hab noch fast keine Erfahrungen mit dem Debugger, und stelle es mir schwer vor, die Variablen zu prüfen, wenn ich nicht weiß, was als Zwischenergwbnis rauskommen sollte.

Ich werde es aber versuchen

Das musst du nun mal wissen. Wie möchtest du einen Fehler finden wenn du nicht weißt was du tust? Such dir entweder einen Rechner im Internet um deine Werte zu prüfen oder guck dir den Algorithmus noch mal genau an. Den kann man ja auch von Hand berechnen. Und dann geht es an den Debugger. Sieh es als gute Übung. Mit einem Debugger arbeiten zu können ist eine wichtige Eigenschaft.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige