sin/cos

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • hi ich habe mal wieder ein problem
    und zwar will ich mit dem gamemaker eine realistische collision machen
    also ich habe eine kugel
    und die stoßt auf eine andere kugel

    und soll die geschwindigkeit die sie hat möglichst realistisch übertragen
    also habe ich mir gedacht, ich könnte den sin() und cos() benutzen

    also als beispiel
    die geschwindigkeit der einen kugel ist 16
    der winkel in die die kugel fliegt ist 15° (auch direction genannt^^)
    nun soll er mit hilfe des sinus und cosinus den hspeed und vspeed aus der gesamtgeschwindigkeit und dem wikel berechnen

    mit dem taschenrechner funktioniert soweit alles

    nacher möchte ich dann noch durch den einschlagswinkel auf die andere kugel aus den hspeed und vspeed und den einschlagswinkel eine geschwindigkeit berechnen, die auf die andere kugel übertragen werden soll...
    naja das ist schon ein kleines problem für mich^^
    weil ich aus dem hspeed und vspeed je andere ergebnisse bekomme und ich nicht weiß warum sie unterschiedlich sind

    nun zum ECHTEN problem^^
    außerdem macht der gamemaker noch irgendwelche probleme
    ich benutze sin() und cos()
    (ich weiß nicht ob das überhaupt die richtige funktion ist)
    aber jedenfalls zeigt er mir manchmal negative werte und immer ganz andere werte als mein taschenrechner
    ich habe das gefühl das es überhaupt die falsche funktion ist

    z.b. zeigt mein taschenrechner
    sin(15°) = 0.258819045

    und der gamemaker
    sin(15°)=0.65
    und bei sin(25°) zeigt der GM -0.13
    ?( ?( ?( ?( ?( ?(
    also mein taschenrechner steht auf DEG und nicht auf RAD
    und das sollte so auch richtig sein

    ich brauche die sinus und cosinus funktion die ca. so benutzt wird


    PS: das mit degtorad() oder so funktioniert auch nicht mit genauen werten
    ich weiß nichtmal was degtorad() ist^^ aber irgendwo bei der suche heir hab ich mal das gefunden
    aber hab keine ahnung^^






    Ähm...
    ich glaube ich hab das problem gelößt^^
    sinus wird glaube ich in diesem fall so benutzt
    lengthdir_x(1,90-15)
    und cosinus so lengthdir_x(1,15)
    oder?
    ich hoffe trotzdem das ihr mir helfen könnt
    Die Schönheit liegt im Auge des Betrachters :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Andyworld ()

  • danke das problem wäre wohl geklärt
    aber nun gibt es noch das problem mit den kugeln

    wenn die kugel z.b. mit speed=10
    an der anderen kugel ganz unten streift
    dann fliegt die andere kugel wie geplant fast senkrecht nach oben
    nur das probelm sit das sie dann mit speed=10 hochfliegt obwohl sie nur gestriffen wurde
    also sollte speed=0.5 oder so sein (beispiel)

    wie kann ich jetzt machen das die geschwindigkeit von einer kugel auf die andere kugel übertragen wird (sollte von direction von kugel1 und aufschlagwinkel zu kugel2 ABHÄNGIG sein)
    Die Schönheit liegt im Auge des Betrachters :D
  • ja ich meine auch die geschwindigkeit^^
    aber wnen ich speed=speed/2 mache
    dann fliegt die andere kugel mit speed=5 weiter
    und bei deinem versuch ist es egal ob es ein volltreffer sit oder nur gestriffen
    er fliegt immer mit 5 weiter
    und das will ich nicht^^

    hier ist mal ne gm6 wenn euch das lieber ist
    da werdet ihr sehen das etwas an der physik nicht stimmt^^
    Download

    PS. ein perfektes beispiel ist ein billiard game
    wenn man billiard spielt und die kugel von vorne so treffen will der er zur seite fliegt muss man natürlich am rand treffen
    aber dadurch wird die geschwindigkeit natürlich langsamer als wnen man einen volltreffer in der mitte hat

    also bei einem volltreffer genau in der mitte soll die ganze geschwindigkeit übertragen werden
    und bei einem treffer der immer weiter am rand geht sollte es dementsprechend weniger speed übertragen und den rest selber behalten

    Die Schönheit liegt im Auge des Betrachters :D
  • wie wärs damit?

    create event:

    collision_count = 0
    mass = 1

    step_event:
    if(collision_count > 0) collision_count -= 1

    Kollisionsevent beider Objekte:
    if(collision_count = 0)
    {
    v1 = speed
    v2 = other.speed
    t1 = direction
    t2 = other.direction
    m1 = mass
    m2 = other.mass
    phi = point_direction(other.x,other.y,x,y)
    e = .8
    v1xr = v1*cos(degtorad(t1-phi))
    v1yr = v1*sin(degtorad(t1-phi))
    v2xr = v2*cos(degtorad(t2-phi))
    v2yr = v2*sin(degtorad(t2-phi))
    v1fxr = ((m1-m2*e)*v1xr+(m2+m2*e)*v2xr)/(m1+m2)
    v2fxr = v1fxr + e*(v1xr-v2xr)
    v1fyr = v1yr
    v2fyr = v2yr
    v1fx = cos(degtorad(phi))*v1fxr+cos(degtorad(phi+90))*v1fyr
    v1fy = sin(degtorad(phi))*v1fxr+sin(degtorad(phi+90))*v1fyr
    v2fx = cos(degtorad(phi))*v2fxr+cos(degtorad(phi+90))*v2fyr
    v2fy = sin(degtorad(phi))*v2fxr+sin(degtorad(phi+90))*v2fyr
    hspeed = v1fx
    vspeed = -v1fy
    other.hspeed = v2fx
    other.vspeed = -v2fy
    collision_count = 1
    other.collision_count = 1
    }


    das script habe ich auch für mein billardgame benutzt, ich hoffe es hilft ein wenig weiter
    hallo erstmal....