Einfalls- + Ausfallswinkel

  • hi @ all
    ich bin gerade an einem Spiel, wo ich den Einfals und den Ausfallswinkel darstellen muss.
    Hier liegt jedoch mein Problem...
    Wie kann ich den Einfalls und den Ausfallswinkel mit Autoit berechnen ?

    Vielen Dank schon mal für eure Antworten.

    Mfg Bio

  • wieso berechnen? Nach der Physik gilt in der Optik: Einfallswinkel = Ausfallswinkel.
    Falls du das nicht meintest beschreibe bitte dein Problem etwas genauer :)

  • Ja Depreed das ist genau das was ich meine, aber ich weiß nicht, wie ich das mit autoit machen soll...
    hat da vllcht einer ne idee ?
    mfg bio

  • @srules: sry dann hab ich mich da irgendwie vertan...

    @Deepred: Das ist genau das was ich brauche aber könntest du mir das irgendwie mal noch erklären ?

    mfg Bio

  • oder ich glaube ich habe es doch einigermasen verstanden...
    Wenn ich nochmal ne frage habe, dann poste ich sie einfach wieder hierhin... :D

    mfg Bio

  • UPS, doch noch nicht ganz...
    Mein Problem ist, wie findet autoit diese Zahlen heraus ?
    Da habe ich irgendwie ein sehr großes Problem :D :rofl:

    mfg Bio

    • Offizieller Beitrag

    UPS, doch noch nicht ganz...
    Mein Problem ist, wie findet autoit diese Zahlen heraus ?
    Da habe ich irgendwie ein sehr großes Problem :D :rofl:

    mfg Bio

    Du zeichnest doch alles selber, also hast du eine Funktion, die deine Gerade innerhalb eines von dir festgelegten Bereiches grafisch darstellt. Demzufolge hast du Richtungsvektor und damit auch den Winkel.

  • ja schon aber der Winkel verändert sich ständig und woher will ich dann wissen, was es für einer ist ?

    mfg Bio

    • Offizieller Beitrag

    ja schon aber der Winkel verändert sich ständig


    Aber doch nicht von allein! Da passiert doch nur, was du programmierst. Also sind doch Richtung und somit Winkel bekannt.
    Ich verstehe wirklich nicht dein Problem. Oder weißt du nicht, was du programmierst? ;)

  • achso, ich glaube ich weiß jetzt was du meinst... :D
    ich werde es mal so probieren...
    Dann hätte ich noch ne andere Frage :)
    Wie kann man ein Spielfeld eingrenzen, damit der Ball nicht daraus geht sondern abbrallt ?
    hoffe du verstehst meine Frage

    mfg Bio

    • Offizieller Beitrag

    Übrigens brauchst du keine Winkel berechnen. Wenn du den Anstieg der Geraden beim Berühren der Wand negierst, hast du automatisch den korrekten Winkel. Siehe mein kleines Bsp., die Linie kannst du stundenlang laufen lassen. Irgendwann ist dann das gesamte Feld bemalt. :D
    Zum Testen kannst du in der Schleife den Counter für die Seitenberührungen nach Bedarf setzen.
    Den Anstieg kann man mit der Variablen $anstieg ändern. Je größer der Wert, desto flacher der Winkel gegen die Horizontale.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hGUI, $hGraphics, $aBorder[4] = [20,380,20,280] ; left,right,top,bottom
    Local $x = 205, $y = 145, $count = 0, $vector1 = -1, $vector2 = 1
    Local $anstieg = 1.2 ; Je größer der Wert, desto flacher der Winkel gegen die Horizontale

    $hGUI = GUICreate("Zeichnen", 400, 300)
    GUISetState()
    _GDIPlus_Startup ()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    While $count < 200
    _GDIPlus_GraphicsDrawRect ($hGraphics, 20, 20, 360, 260)
    _GDIPlus_GraphicsDrawLine ($hGraphics, $x, $y, $x+$anstieg*$vector2, $y+1*$vector1)
    $x += $anstieg*$vector2
    $y += 1*$vector1
    Select
    Case $x <= $aBorder[0]
    $vector2 *= -1
    $count += 1
    WinSetTitle($hGUI, '', 'Seitenberührung: ' & $count)
    Case $x >= $aBorder[1]
    $vector2 *= -1
    $count += 1
    WinSetTitle($hGUI, '', 'Seitenberührung: ' & $count)
    Case $y <= $aBorder[2]
    $vector1 *= -1
    $count += 1
    WinSetTitle($hGUI, '', 'Seitenberührung: ' & $count)
    Case $y >= $aBorder[3]
    $vector1 *= -1
    $count += 1
    WinSetTitle($hGUI, '', 'Seitenberührung: ' & $count)
    EndSelect
    Sleep(5)
    WEnd

    Do
    Until GUIGetMsg() = -3

    _GDIPlus_GraphicsDispose ($hGraphics)
    _GDIPlus_ShutDown ()
    EndFunc ;==>_Main

    [/autoit]

    So sieht es dann bei Anstieg 1.2 nach 200 Bandenberührungen aus:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.