Announcement

Collapse
No announcement yet.

Winkel Distanz berechnung (eher Mathematisches Problem)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Winkel Distanz berechnung (eher Mathematisches Problem)

    Hi
    Ich brauch mal Hilfe bei einer Berechnung einer Winkeldistanz.

    Ich stehe hier und gucke Richtung 10°.
    Ich will aber mein Kumpel ansehen. Um ihn zu sehen
    muss ich nach 340° sehen.
    Ich weiss, auf welche Seite ich mich drehen muss (siehe Code),
    aber nicht um wie viel grad.
    Wie kann ich das berechnen?

    Es geht darum, ein Charakter zu drehen.
    Mit dem Code berechne ich die Richtung:
    Winkel = Zielwinkel (zum Kumpel)
    PlayerR = Mein momentaner Winkel

    Code:
    If ((Winkel - PlayerR) >= 0 Or (Winkel - PlayerR) < (-180)) And ((Winkel - PlayerR) < 180) Then
    
                    steps = -(0.1 * distance) 'drehe links herum (negative Zahl)
    
    ElseIf ((Winkel - PlayerR) < 0 And (Winkel - PlayerR) > (-180)) Or ((Winkel - PlayerR) > 180) Then
    
                    steps = (0.1 * distance) 'drehe Rechts herum (positive Zahl)
    
    End If
    Die variable steps, berechnet mit dem faktor 0.1 * distance (diese Distanz will
    ich eben berechnen können), ergibt die Geschwindigkeit der Drehung.

    Je näher ich Richtung Kumpel sehe, desto langsamer dreht der Charakter
    (gesmoothete Drehung).

    Man könnte ja einfach:

    Code:
    distance = Int(PlayerR - TargetR)
    Aber das geht nicht, dann wäre die Distanz zb wie oben im Beispiel (mit 10° und 340°) 330°, aber tatsächlich wäre sie ja 30°, denn ich drehe mich ja nie mehr als 180°.

    Hoffe jemand versteht mich ^^

    mfg
    Juhu
    lol? wow gamecard 4 president.

  • #2
    Bin dem VB nicht mächtig, deshalb verbal^^

    wenn der Betrag der Differenz (winkel du - winkel kumpel) größer als 180 ist, dann ziehe von 360 von diesen wert ab und drehe in die andere richtung...

    denke so sollte es klappen... habs nun paarmal editiert, und zusammengefasst, aber das wirkt logisch
    Zuletzt editiert von Der_Sascha; 17.04.2009, 16:30.

    Comment


    • #3
      Ich würds anders formulieren.

      1. eigenen Standpunkt als 0 Skala setzen (normieren) -> 340 - 10 = 330 (Du musst quasi 330 Grad zu Deinem Kumpel dreheen)
      2. wenn jetziger Standpunkt > 180, dann den Wert von 360 abziehen mal -1 nehmen -> (360 - 330) * -1 -> -30
      3. wenn Vorzeichen kleiner 0, dann nach rechts drehen ansonsten nach links

      wie weit Du pro Tick drehen musst ist dann ganz einfach:

      Drehung / Tick = Gesamter Drehwinkel / Gesamtzahl Ticks

      oder

      Drehung / Zeiteinheit = Gesamter Drehwinkel / Gesamte Zeit

      Comment


      • #4
        Danke für die Anregungen.

        Ein winziger Grund, warum ichs nie geschafft habe, liegt auch an einem Fehler im
        Code.

        Hab die Distanz ja so gerechnet:
        Code:
        distance = Int(PlayerR - TargetR)
        Natürlich gehts so nicht, muss ja meine Rotation - Ziel Rotation.
        Im Code oben rechnets meine Rotation - Rotation vom Zielobjekt. Klar
        gehts nicht, denn die Spielt keine Rolle

        Jetzt hab ich die Lösung:
        Code:
        dist = PlayerR - Winkel
        
                    If dist > 180 Then
                        If dist < 0 Then dist = dist * (-1)
                        dist = 360 - dist
                    End If
                    If dist < (-180) Then
                        If dist < 0 Then dist = dist * (-1)
                        dist = (-360) + dist
                    End If
        
                    If dist < 0 Then dist = dist * (-1)
        
                    If ((Winkel - PlayerR) >= 0 Or (Winkel - PlayerR) < (-180)) And ((Winkel - PlayerR) < 180) Then
                        steps = -(0.1 * dist)
                    ElseIf ((Winkel - PlayerR) < 0 And (Winkel - PlayerR) > (-180)) Or ((Winkel - PlayerR) > 180) Then
                        steps = (0.1 * dist)
                    End If
        Schnell für die, die kein VB.net verstehen (grob):
        1. distanz = Meine Rotation - Ziel Rotation
        2. Wenn distanz > 180 rechne: distanz = 360 - distanz
        3. Wenn distanz < (-180) rechne: distanz = (-360) + (distanz*(-1))
        4. Wenn distanz < 0 rechne: distanz = distanz * (-1)

        Dann geht es.
        Kann leider nicht auf 0 referenzieren/normieren. Die Winkel sind fest gegeben.
        Drehen tu ich mit der Maustaste.
        Rechte Maustaste gedrückt halten, dann faktor 0.1 * distanz
        Das ergibt dann wie viel Pixel ich die Maus pro 10 Millisekunden drehe

        Hoffe ihr verstehts.
        Danke nochmals

        mfg
        Juhu
        lol? wow gamecard 4 president.

        Comment

        Working...
        X