Maus kreisen lassen

  • Hallo,

    ich würde gerne die Maus um eine Position kreisen lassen.
    Mit Mouse Move kann ich ja die Maus positionieren.
    sagen wir Mittelpunkt des kreises soll 600, 600 sein.
    Radius 200

    Wie würdet ihr sowas machen ?

  • Eine Möglichkeit:

    [autoit]


    HotKeySet ("{Esc}", "_Exit")

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

    $kx = @DesktopWidth / 2
    $ky = @DesktopHeight / 2
    $r = 200
    $i = 0
    $deg = ACos(-1) / 180
    MouseMove($kx + Cos($i * $deg) * $r, $ky + Sin($i * $deg) * $r, 10)

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

    Do
    MouseMove($kx + Cos($i * $deg) * $r, $ky + Sin($i * $deg) * $r)
    $i += 2
    $i = Mod($i, 360)
    Until Not Sleep(10)

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (30. Dezember 2010 um 13:03)

  • HI

    dies ist die Kreisgleichung:

    Mittelpunkt = (mx I my)
    Radius = r

    (x - mx)² + (y - my)² = r²

    Dann nimmste einfach die eine Sekante und verschiebst die immer ein Pixel nach oben und löst nach x bzw y auf und schwupp haste Punkte die aufm Kreis liegen, das ganze verpackste in ner Schleife und machst MouseMove immer zum nächsten Punkt aufm Kreis.

    mfg Redclaw

    edit: Zu spät aber das von UEZ is auch leichter

  • Hatten wir hier schonmal und da wollte ich meine Lösung von damals auch nochmal anbringen (prinzipiell nicht groß anders als bei UEZ):

    Spoiler anzeigen
    [autoit]

    _MouseCircle(200, 1)

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

    Func _MouseCircle($Radius, $Speed = 10)
    Local Const $M = MouseGetPos(), $Pi = ACos(-1)
    Local $Phi, $X, $Y

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

    MouseMove($M[0] + $Radius, $M[1], 0)

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

    For $Phi = 0 To 2 * $Pi Step 0.04
    $X = $M[0] + $Radius * Cos($Phi)
    $Y = $M[1] + $Radius * Sin($Phi)
    MouseMove($X, $Y, $Speed)
    Next
    EndFunc

    [/autoit]

    @Redclaw
    Mach mal bitte.
    Das hast du schon gerade in dem anderen Thread angebracht.
    Würde mich interessieren wie das dann am Ende aussieht.

  • HI

    @AspirinJunkie

    Is net schön aber es geht ja auch nur darum dass man sieht wie man die Punkte des Kreises herausbekommt, das Prog hab ich eben schnell mal zusammen geschrieben, ist also net gerade ordentlich ^^

    [autoit]


    #include <GDIPlus.au3>
    Dim $mx = @DesktopWidth / 2, $my = @DesktopHeight / 2, $r = 50
    Dim $i = $my - $r, $count = 0
    Dim $x[(2 * $r + 1) * 100]
    Dim $y[(2 * $r + 1) * 100]
    Dim $p = $mx * 2
    Do
    $a = ($r * $r) - (($i - $my) * ($i - $my))
    $q = ($mx * $mx) - $a
    $x[$count] = Round(-($p / 2) + Sqrt((($p / 2) * ($p / 2)) - $q))
    $y[$count] = $i
    $count = $count + 1
    $i = $i + 0.01

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

    Until $i > $my + $r

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

    _GDIPlus_Startup()

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

    $hnd = GUICreate("", @DesktopWidth, @DesktopHeight)
    GUISetState(@SW_SHOW)

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

    $ghnd = _GDIPlus_GraphicsCreateFromHWND($hnd)

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

    For $i = 0 To UBound($x) - 1
    _GDIPlus_GraphicsDrawRect($ghnd, Abs($x[$i]), $y[$i], 1, 1)
    Next

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

    For $i = 0 To UBound($x) - 1
    _GDIPlus_GraphicsDrawRect($ghnd,abs($x[$i])+2*(Abs($x[$i]+$mx)), $y[$i], 1, 1)
    Next

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

    While 1
    Sleep(1)
    WEnd

    [/autoit]

    Mir is klar dass man das alles viel schöner und sauberer machen kann aber ich glaub es ging eig auch nur um die Mathematik dahinter oder ?

    mfg Redclaw

    PS: dann lass die Maus mal kreiseln bis ihr schlecht wird Anton ^^

    edit: mir fällt gerade ein jetzt hab ichs ja doch umständlich gemacht ^^ zumindest den 2ten Teil so jetzt is besser.

    Einmal editiert, zuletzt von Redclaw (30. Dezember 2010 um 18:36)