Dynamischen Kreis zeichnen bzw mit MouseMove abfahren?

  • anke an die schnelle Hilfe aus meinem ersten Post, dadurch ist das Projekt bendet und mein neues wieder aktuell x3

    Thematik: Ich möchte die Maus in einem Kreis bewegen. Dieser muss dynamisch anpasbar sein, d.h. ich geb ihm den Radius vor.

    Problem: Bisher hab ich leider nur einen Kreis mit einem Radius von 10 Pixel gut hinbekommen. Jede größe darüber benötigt mehr Punkte, wodurch mein aktueller Code im endeffekt auf eine Raute hinaus läuft.
    Das heisst, ich bräuchte nun eine kleine Hilfe, wie ich dynamisch die anzahl der MouseMove's bestimmen kann, gemessen an dem Radius des Kreises.

    Ich denke das 1 MouseMove- Punkt pro 1 Pixel in einem 90° Winkel einen recht guten Kreis darstellen sollte. D.h. bei einem Kreis mit 500 Pixel Radius wären das 500 Punkte pro 90°, heisst 2000 Punkte bei einem Vollkreis, was ich ungern per Hand machen möchte xD

    Bisher scheitere ich leide rimmer wieder an einer prozentualen Aufteilung bzw Berechnung der Punkte, ich hoffe ihr könnt mir da weiterhelfen =)

    Spoiler anzeigen
    [autoit]

    $x = @DesktopWidth/2
    $y = @DesktopHeight/2
    For $lauf = 0 To ($y-50) Step +10
    ; von der Bildschirm mitte bis 50 Pixel vom oberen Rand
    MouseMove($x, $y+$lauf, 5)
    MouseMove($x+$lauf, $y, 5)
    MouseMove($x, $y-$lauf, 5)
    MouseMove($x-$lauf, $y, 5)
    MouseMove($x, $y+$lauf, 5)
    Next

    [/autoit]

    Einmal editiert, zuletzt von GodLesZ (29. Februar 2008 um 17:51)

  • Da du hier direkt X und Y-Werte benötigst wäre eine Parameterdarstellung wohl die beste Wahl.
    So ungefähr?:

    Spoiler anzeigen
    [autoit]


    _MouseCircle(200, 1)

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

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

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

    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]
  • HAbe sowas auch mal gemacht, versuch mal dieses Script:

    [autoit]

    $pi = 3.14159
    $x = @DesktopWidth/2
    $y = @DesktopHeight/2
    $Radius = $y-20
    $Winkel = 0
    While $Winkel <= 360
    $dX = Round(Cos($Winkel*$pi/180)*$Radius)
    $dY = Round(Sin($Winkel*$pi/180)*$Radius)
    MouseMove ($x+$dX, $y+$dY)
    $Winkel += 90/$Radius
    WEnd

    [/autoit]

    Den Radius mußt Du natürlich irgendwie dynamisch ändern lassen.

    Viel Freude damit ;)

    Gruß,

    TrueMu

    Edit: Bruchteile von Sekunden zu langsam ;) Aber mal sehen welcher Ansatz im besser paßt

  • Oderwie von hier das 1.Bsp:

    Spoiler anzeigen
    [autoit]

    $x = @DesktopWidth/2
    $y = @DesktopHeight/2
    $radius = 100
    For $i = 1 To 5
    circleSimple($x,$y,$radius)
    Next
    Func circleSimple($xCenter, $yCenter, $radius)
    Local $x, $y, $r2;
    Local $ya[$radius*2+1]
    $r2 = $radius * $radius;
    for $x = -$radius To $radius Step 1
    $key = ($x+$radius)
    $ya[$key] = (sqrt($r2 - $x*$x) + 0.5)
    Next
    for $x = -$radius To $radius Step 1
    $y = $ya[$x+$radius]
    MouseMove($xCenter + $x, $yCenter + $y,1);
    Next
    for $x = $radius To -$radius Step -1
    $y = $ya[$x+$radius]
    MouseMove($xCenter + $x, $yCenter - $y,1);
    Next
    EndFunc

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

    Exit

    [/autoit]
  • Oha, thx an ale
    Muss mir die erstmal anschaun, umsetzen un dann schaun aber ich denke es wird mir sehr helfen, danke =)