Abstand bzw. Collision

  • Hallo bei einem Spiel, dass ich programmiere, habe ich folgendes Problem, und komme einfach nicht aus eine Gute/Schöne lösung.
    Ich habe folgendes Problem:


    ich habe eine Strecke S von Punkt A nach Punkt B in 2D.


    S stellt eine Wand dar.


    ich will wissen, ob mein Charakter (beschrieben durch Punkt C) einen gewissen Abstand zur Wand hat.
    Ich will ja nicht, dass man durch die wand laufen kann.


    mein erster ansatz war, den abstand per cosinussatz zu berechnen. problem: funktioniert nur in dem bereich wo das dreieck spitze Winkel hat (die Höhe ist innerhalb der fläche):

    mein zweiter Ansatz war, um die linie ein Rechteck aufzubauen und zu prüfen ob der punkt innerhalb oder ausserhalb ist.
    problem: wie prüfe ich das ?
    return (y>unten && y<oben && x>links &&x<rechts);
    funktioniert nicht, da das Rechteck auch schief im raum sein kann und somit kein oben und unten da ist.


    ob die "Boundingbox" ein Rechteck, oder sowas ist, ist mir egal, solange die Lösung "schön" ist ;)


    danke für die hilfe, schon mal im vorraus!

  • Der abstand zwischen 2 Punkten lässt sich ja ganz einfach bestimmen. Warum also nicht aus der Strecke A -> B eine Gerade machen und den Punkt auf der Gerade mit dem kleinsten Abstand zum Punkt C finden. Damit haste dann den Abstand.
    Sicher nicht die effektivste Methode. Funktioniert aber.

    Zitat

    Dr. Gregory House: You've gotta get down here. They've got a satellite aimed directly into Cuddy's vagina. I told them that chances of invasion are slim to none but...

  • Danke, für die Antwort, aber auch das hat mir leider nicht geholfen..
    ich habe kein tilebasiertes spiel.
    und Vektorrechnung hab ich schon oft genug gehört (Schule wie FH)
    ich weiß jedoch nicht wie ich sie hier einsetzten soll..
    ich glaub auch das es warscheinlich irgend eine billige Vektorverrechnung gibt...
    aber ich ab nach gefühlten 1000 Seiten skizzen volscribbln, in dem ich alle möglichen längen und so verglichen hab, . .... ...
    keine ahnung..

  • c++ mit libcinder
    ich hätt da noch nichts gefunden.
    also Ja er gibt ein ci::Rec2 mit insects() bzw ein isIn()
    aber das recteck ist Ortogonal, ich wills aber für eins, dass schief im raum ist ..