Koordinatensystem

  • VB.NET

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von Parmaster.

    Koordinatensystem

    Hallo!

    Ich habe die Aufgabe, ein kleines Konsolenprogramm zu machen, bei dem der Benutzer zwei Koordinaten eingibt, und das Programm dann sagen soll, ob sich die Koordinaten im ersten Rechteck, im zweiten Rechteck, in beiden gleichzeitig oder in keinem davon befindet.
    Die Rechtecke stehen noch nicht fest, können also beliebig geändert werden.

    Hier ist mal die Aufgabenstellung:
    Für einen Punkt P mit den Koordinaten P = (x, y) sollen Sie bestimmen, ob dieser Punkt innerhalb der beiden Rechtecke liegt oder nicht! Zudem soll angegeben werden, in welchem Rechteck der Punkt P liegt!Die Ränder gehören zu den Rechtecken.Für den Fall, dass der Benutzer beim ersten Koordinatenpunkt nichts eingibt (also nur die Enter-Taste betätigt), soll der Punkt P = (1, 1) als Standard verwendet werden!


    Die Koordinaten gehen z.B. bei X von -10 bis +10, genauso wie bei Y. Und wie bereits gesagt, die beiden Rechtecke stehen jetzt noch nicht fest.

    Ich will jetzt dazu keinen Code oder eine Musterlösung, sondern nur Tipps wie man das am geschicktesten machen könnte.
    Mir geht es z.B. darum, ob ihr das ganze mit verschachtelten If-Konstrukte machen würdet (so habe ich es bis jetzt), wo ihr die Abfrage macht ob es in keinem der beiden Rechtecke liegt, usw. usw.

    Also ich hab es bis jetzt soweit, dass das Programm erkennt ob es im 1. Rechteck, im 2. Rechteck oder in beiden liegt (alles mit If-Abfragen). Weiter bin ich noch nicht, da ich erst mal hören wollt wie ihr das machen würdet.
    Falls dein "Rechteck" in einem Rectangle ist, genügt ein:

    VB.NET-Quellcode

    1. Dim R As Rectangle
    2. If R.Contains(X, Y) Then ' Testet ob der Punkt von X,Y innerhalb des Rectangles ist - geht auch mit Point
    3. ' jo.. punkt ist im Rec drinnen..
    4. End If


    oder du musst halt ein Rectangle mit deinen Rechteck-Daten machen.
    (Falls ich das jetzt nicht falsch verstanden habe)

    (Ehe ich das erklärt habe, denke ich, war es doch für mich(!) einfacher einfach den Code zu posten, auch wenn du den nicht wolltest :)
    Du kannst unabhängig vom Assemblytyp auf alle Framework-Klassen zugreifen (ausgenommen platformspezifische Dinge wie WindowsStore/WindowsPhone-Apps), also ja.
    Es ist wirklich nicht schwer. Die beiden Rechtecke stellst du durch zwei Instanzen der Rectangle-Struktur da (die bestehen einfach aus X-, Y-, Width- und Height-Angaben, die ein Rechteck beschreiben). Diese Struktur besitzt dann die Contains-Funktion, mit der du eine Point-Instanz oder auch gleich zwei Koordinaten darauf prüfen kannst, ob sie in dem Rechteck liegen.
    Du findest die benötigten Typen im System.Drawing-Namespace. Den musst du evtl. noch bei den Verweisen hinzufügen(Framework) und dann den Namespace importieren.
    Also das betrifft Point und Rectangle. Die Handhabung sollte nicht allzu schwer sein.
    Nöö. Wenn schon, dann solltest du vielleicht Literatur für den Aufbau der Grundlagen dazuziehen.
    Aber da ich gerade in Stimmung bin: Projekt -> Verweis hinzufügen -> links Framework auswählen -> runterscrollen und System.Drawing ankreuzen. -> Bestätigen(Fenster schliesst sich) -> Oben am Anfang der Datei Imports System.Drawing hineinkritzeln(oder halt anhängen) -> Im Code kannst du nun Folgendes machen:

    VB.NET-Quellcode

    1. Dim Pnt As New Point(1, 1)
    2. Dim Rec1 As New Rectangle(... 'Einfach die geforderten Argumente angeben
    3. '...
    Auch wenn ich nicht danach gefragt habe, bin ich jetzt doch neugierig geworden.

    Könntest du mir bitte mal ein Beispiel zeigen wie man ein Rechteck definiert und mit zwei übergebenen Koordinaten überprüft?

    Also ungefähr so?

    VB.NET-Quellcode

    1. Dim Rec1 As New Rectangle(param1, param2, ...)
    2. Dim pnt As New Point(Koordniate1, Koordniate2)
    3. If Rec1.Contains(pnt) Then WriteLine("Befindet sich im Rechteck")
    Ja genau. Ein Rechteck wird, wie gesagt, durch die Koordinaten der linken oberen Ecke (X und Y) und die Größe (Width und Height) definiert. New Rectangle(10, 10, 100, 50) erstellt demnach z.B. ein Rechteck, dass seine linke obere Ecke im Punkt 10,10 hat und 50 hoch und 100 breit ist.
    Habs grad nachgelesen und das gefunden was du auch grad geschrieben hast, also das mit den 4 Parametern. Mir stellt sich nur grad die Frage, das wenn der Anfangspunkt links oben ist, wie das dann gemeint ist mit der Höhe.

    Also mal angenommen ich hab ein Rechteck von

    Quellcode

    1. x_links = 5
    2. x_rechts = 35
    3. y_unten = 5
    4. y_oben = 40


    Wie wären da die Parameter?

    VB.NET-Quellcode

    1. New Rectangle(5, 5, 30, 35)
    Ah ok, dann weiß ich ja jetzt ungefähr wie es geht, den Rest werde ich dann auch noch hinbekommen. Vielen Dank für Eure Hilfe! :thumbsup:

    Nur das hier verwirrt mich immer noch:

    Quellcode

    1. Parameter
    2. x Typ: System.Int32
    3. Die x-Koordinate der linken oberen Ecke des Rechtecks.
    4. y Typ: System.Int32
    5. Die y-Koordinate der linken oberen Ecke des Rechtecks.


    Oder ist das nur falsch beschrieben? Weil nach denen ist mein linker oberer Punkt nicht 5,5 sondern 5,40.
    Hab doch noch eine Frage zur Logik, und zwar:ich prüfe die Koordninaten ob es 1., 2. oder in 3. Rechteck (ich definiere einfach das 3. Rechteck als das, wo sich beide Rechtecke überschneiden), und falls in einem von diesen drei vorkommt, geb ich den Text aus. Aber es kann ja auch vorkommen das es in keinem vorkommt, kann ich das dann so machen?

    VB.NET-Quellcode

    1. if rec1.contains(pnt) then "ist in rechteck1"
    2. elseif rec2.contains(pnt) then "ist in rechteck 2"
    3. elseif rec3.contains(pnt) then "ist in beiden rechtecken"
    4. else "ist in keinem rechteck" end if