2D Nach Objekt "scannen" - Entfernung messen

  • C#

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Karabonga.

    2D Nach Objekt "scannen" - Entfernung messen

    Hallo liebes vb-paradise Forum,
    ich hätte da mal eine Kleine Frage, welche mich schon was länger beschäftigt.
    Wie kann ich scannen ob vor einem Punkt (in einem bestimmten Winkel) zum Beispiel ein Rechteck liegt,
    bzw wie weit dieses von dem Punkt dann entfernt ist.

    Bedeutet quasi:

    == <- Rechteck
    |
    | Entfernung z.B. 20px <- (Diese möchte ich haben)
    |
    o <- der Punkt

    dies jedoch auch in jedem beliebigen Winkel..

    kennt sich da jemand aus, oder hat einen hilfreichen Link?

    Vielen Dank im voraus
    und lg :thumbsup:
    Hallo,
    Problem dabei ist, dass ich nicht genau weiß, wo und ob der die Grade auf das Rechteck treffen würde.
    Ich habe quasi nur den einen Punkt und diverse Rechtecke zur Verfügung.
    Also muss ich dann doch auch noch irgendwie wissen, wo die auftreffen würde, damit ich ausrechnen kann, wie lang die Grade ist
    oder?

    lg

    Marcel1997 schrieb:

    einen Punkt und diverse Rechtecke
    Wie sollen die voneinander unterschieden werden?
    Poste mal eine vollständige und belastbare Aufgabenstellung.
    "Belastbar" bedeutet, dass Du einen vernünftigen Lösungsansatz nicht mit solch Worten wie "Das hab ich aber ganz anders gemeint" abschmettern kanst.
    Dazu gehört also eine vollständige Fallunterscheidung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es gibt die Strahlgleichung x = o + l * d
    Hierbei ist x ein beliebiger Punkt auf dem Strahl.
    o ist der Ursprung des Strahls.
    d ist die Richtung des Strahls.
    l ist ein beliebiger Faktor.

    1. Du baust dir diesen Strahl zusammen aus deinem Punkt p und dem Winkel a in dessen Richtung du eine Kollision mit einem Rechteck überprüfen möchtest (Winkel gemessen an einem Vektor der gerade nach oben zeigt):
    o = p
    ( -sin(a) )
    d =( ) <- Versuch der Darstellung eines Vektors
    ( cos(a) )

    Also bekommst du für deinen Strahl in Richtung des Winkels a die Strahlgleichung:
    ( -sin(a) )
    x = p + l * ( )
    ( cos(a) )

    2. Jetzt bastelst du dir für jede Kante des Rechtecks auch eine Strahlgleichung zusammen, indem du aus den beiden Eckpunkten, die die Kante bilden den Richtungsvektor bildest, diesen als Richtung d einsetzt und o einfach einer der beiden Eckpunkte ist, egal welcher.

    3. Du lässt jede Kante des Rechtecks mit dem Strahl des Punktes schneiden, indem du die Gleichungen gleich setzt. Bei Betrachtung der Komponenten bekommst du dann ein Gleichungssystem, welches du dann nach dem Faktor l von einer der beiden Strahlgleichungen auflöst. Dieses setzt du dann in die entsprechende Strahlgleichung ein und erhälst einen Punkt. Jetzt ungeprüfst du noch ob dieser Punkt in dem Rechteck liegt, und wenn er das tut, dann schneidet der Strahl diese Kante des Rechtecks.

    q.e.d. xD
    Auch Dunkelheit kann Erleuchtung bringen...