1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

2D Spiel - Gerade auf Linie zeichnen

Dieses Thema im Forum "Android Spiele Entwicklung" wurde erstellt von funcoder, 16.01.2010.

  1. funcoder, 16.01.2010 #1
    funcoder

    funcoder Threadstarter Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Hallo Community,

    ich hänge gerade verzweifelt an einem normalerweise simplen Problem.

    Und zwar zeichne ich via Canvas eine Linie. Gegeben sind logischerweise die Start X,Y Koordinaten sowie die End-Koordinante X,Y.

    Das Problem ist ich möchte jetz ein 90° Grad Winkel ausgehend der End Koordinaten zeichnen. Sodass ich eine rechtwinklige Linie auf der bestehende Linie habe. Bzw. dessen X,Y Koordinaten errechne.

    Ich denke das man den Satz des Pythagoras braucht aber ich habe auch gar kein Plan wie ich das dann in die entsprechenden X,Y Koordinante umrechnen soll.

    Hat hier jemand vielleicht für mich ein kleines Beispiel?

    Danke im Voraus

    C0DER

    P.S. Mathe ist, wie man sieht einfach nicht meine Stärke:o
     
  2. derHaifisch, 16.01.2010 #2
    derHaifisch

    derHaifisch Android-Lexikon

    Beiträge:
    1,640
    Erhaltene Danke:
    254
    Registriert seit:
    09.12.2009
    Evtl. hilft Dir der Suchbegriff "Polarpunktberechnung" weiter. Dort dürftest Du auf Formeln aus der Vermessungstechnik stoßen. Vielleicht kannst Du damit etwas anfangen.
     
  3. FelixL, 16.01.2010 #3
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Gibts es noch eine Bedingung für die Länge der neuen Linie oder so?
    ansonsten kannst du die Endkoordinaten minus die Anfagskoordinaten rechnen, wenn du das dann tauschst und wieder auf die Endkoordinaten draufrechnest, hast du die Enkoordinaten der 90-Grad-Linie.
    Beispiel:
    Alte Linie geht von (15/10) nach (40/50). Minus rechnen: 40-15=25,50-10=40
    tauschen und dazurechnen:
    Endkoordinaten neue Linie:(80/75)
    Wenn die Linie eine bestimmte Länge haben soll brauchst den Pytagoras:
    Das Verhältnis von x und y bleibt wie oben, 40/25
    Pytagoras wäre l²=x²+y²
    da y=x*25/40 sein soll gilt
    l²=(x²+(x*25/40)²)
    umstellen nach x:
    l²=x²+x²*25²/40²
    l²=(1+25²/40²)x²
    x=sqrt(l²/(1+25²/40²))
    und dann wieder y=x*25/40
    schon fertich ;)
    da die 25 oben für den x-Unterschied stand und 40 für den y-Unterschied wäre die ganze Formel
    x3=sqrt(l²/(1+(x2-x1)²/(y2-y1)²))+x2
    y3=sqrt(l²/(1+(x2-x1)²/(y2-y1)²))*(x2-x1)²/(y2-y1)²)+y2
    sqrt(l²/(1+(x2-x1)²/(y2-y1)²)) kann man natürlich vorher als Variable speichern,
    hoffe mal das passt so und man kann was mit anfangen ;)
    allerdings müsste man noch ne Fallunterscheidung einbauen, weil mit dieser Methode immer in die Plusrichtung gezeichnet wird. Was passiert wenn der vorherige Strich in beide Koordinaten in Richtung Minus ging, kann ich nicht sagen.
    Ich mach mir morgen vielleicht nochmal Gedanken, Freundin quängelt ;)
    Gruß Felix
     
  4. funcoder, 17.01.2010 #4
    funcoder

    funcoder Threadstarter Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Wow... super vielen Dank FelixL für deine umfangreiche Antwort.

    Die Formel wird verwendet und funktioniert auch alles.
    Allerdings habe ich noch ein Problem.

    Momentan errechne ich quasi ja immer von jedem Koordinatenpunkt einen 45 Grad Winkel,sodass ich ja dadurch einen "richtiges" Dreieck erhalten würde.

    Was ich da jetzt noch bräuchte wäre eine Formel damit ich ausgehend vom Endpunkt den 90 Grad Winkel errechnen kann. bzw. dessen Koordinaten. Wobei die Länge der neuen Linie variable sein sollte.

    Ich hab jetzt hierzu mal eine Bilddatei im Anhang die das Problem hoffentlich besser veranschaulicht.

    Vielen Dank

    MfG

    C0DER
     

    Anhänge:

    • bild.jpg
      bild.jpg
      Dateigröße:
      27.6 KB
      Aufrufe:
      498
  5. FelixL, 17.01.2010 #5
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Bin gerade etwas verwirrt, das da oben müsste einen 90-Grad-Winkel machen...hast du nur die einfache Formel ohne Länge getestet? (Das kleine l steht übrigens weiter unten für die gewünschte Länge ;))
    Wenn die obere Formel nen 45-Grad Winkel macht, hast du vielleicht Anfangs- und Endpunkt der alten Linie getauscht bzw. die neue Linie vom Anfangspunkt der alten aus gezeichnet? Sollte vom Endpunkt aus gezeichnet werden, dann müsste es gehen ;)
     
  6. Fr4gg0r, 18.01.2010 #6
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009

    Das Problem bei deiner Methode (worüber ich beim Nachdenken auch gestolpert bin) es funktioniert nicht einwandfrei für alle Fälle. (Je nachdem ob die Gerade jetzt von a nach b oder von c nach a geht ;) = Vorzeichenprobleme)
     
  7. funcoder, 18.01.2010 #7
    funcoder

    funcoder Threadstarter Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    ahh ok Danke. Ich hatte tatsächlich die Variable l vergessen.
    Also wenn ich die Variable l auf 0 lasse dann krieg ich den 45 Grad winkel. okay.
    Mein Problem ist noch der wie ich auf den Wert l komme. ich dachte eventuell dass l für x3 die summe aus x2 und x1 ist aber irgendwie funktioniert das nicht immer.
    Hier mal mein Code den ich testweise in VB geschrieben habe.
    PHP:
    x1 150
    y1 
    100

    x2 
    400
    y2 
    500

    x3 
    Sqr((100 / (+ (x2 x1) ^ / (y2 y1) ^ 2)) + x2)
    y3 Sqr((100 / (+ (x2 x1) ^ / (y2 y1) ^ 2)) * (x2 x1) ^ / (y2 y1) ^ 2) + y2

    Picture1
    .Line (x2y2)-(x1y1)// Zeichnet Linie von x2,y2 nach x1,y1
    Picture1.Line (x3y3)-(x2y2)// Zeichnet Linie von x3,y3 nach x2,y2
    Was dabei rauskommt habe ich im Anhang angefügt. Mit länge 100 (x also auch y)...

    DANKE

    C0DER
     

    Anhänge:

    • img.png
      img.png
      Dateigröße:
      298 Bytes
      Aufrufe:
      1,135
    Zuletzt bearbeitet: 18.01.2010

Diese Seite empfehlen