1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Andy

Beiträge von Andy

  • Arduino als Fernbedienungsersatz

    • Andy
    • 5. April 2016 um 19:14

    Ich würde einem Anfänger immer eines dieser Kits empfehlen!
    http://www.funduinoshop.com/Arduino-Kits

    Alles was man braucht, ist dabei. In einem "orginalen" Kit ist ein Buch dabei dessen einzelne Projekte detailliert beschrieben sind, und idR sind diese Projekte auch komplett in der Programmierumgebung (IDE) integriert!
    Ansonsten kann man die online-Dokumentation hier einsehen http://www.arduino-anleitung.de
    Also Arduino mit USB-Kabel an den PC anschließen, IDE runterladen, "Blink"-Sketch (Sketch nennt man die Programme) in IDE laden, auf Arduino übertragen und tadaa, die LED auf dem Arduino blinkt....

    Erfolgserlebnis in 1 Minute!
    In den Anfängerkits sind haufenweise Bauteile, deren Funktion im beiliegenden Buch auch schön erläutert werden. Steckbrett reicht anfangs, und gerade später mit den "großen" Projekten wird es unentbehrlich...
    Auf einem fertigen (UNO R3)-Board kann man auch nix falsch machen, gerade im Gegenteil, Motorsteuerung ?! Motorsteuerungs-Shield draufstecken, Motor anschließen, Motorsteuerungs-Sketch "includen", Run klicken, Motor läuft!
    Natürlich kostet der/die Shields Geld, aber dafür hat man sich das gebastel und die damit verbundene Fehlersuche gespart. Auch das Frustpotenzial wenn etwas nicht funktioniert, ist beim Board geringer, falsch gesteckte Kabel kann ein Kind prüfen, falsch zusammengelötete Bauteile nichtmal ein Profi, ohne den Krempel wieder auseinanderzunehmen...

    Man kann sich den Arduino auch zusammenlöten, aber für jemanden mit wenig bis garkeiner Erfahrung würde ich davon abraten.

  • Variablen und Pointer

    • Andy
    • 4. April 2016 um 05:52

    Wenn "Pointer" gewünscht sind, wäre (glaube ich) das einfachste ein "Pointer auf den Pointer".
    Was aber natürlich wie bereits gesagt auch von 2 Arrays abgebildet werden kann. Das eine Array verwaltet die Indizes des anderen.

    Ob das so überhaupt so gedacht und sinnvoll ist, oder ob nicht andere Verfahren besser wären, erschließt sich mir nach 16 Posts immer noch nicht ;(
    Es wird sehr schwierig zu helfen, wenn nicht mal lauffähige Scripte mit "vorher" und "nachher" oder dem gewünschten Weg oder zumindest eine verständliche Erklärung des gewünschten Ergebnisses zur Verfügung stehen.

    Mit Sicherheit ist das auch einer der Gründe, wieso sich bisher kaum die (Array- und Listen- ) Spezialisten zu Wort gemeldet haben!

    Um den Startpost nochmal aufzufassen:

    AutoIt
    Global $Variable = 10
    
    
    MsgBox(0, "var=10", _tmp()) ; sollte 10 ergeben oder halt mit nem Funktionsaufruf wie _GetPointerValue
    $Variable = 12
    MsgBox(0, "var=12", _tmp()) ; sollte jetzt 12 ergeben
    
    
    
    
    Func _tmp()
        Return $Variable
    EndFunc                     ;==>_tmp
    Alles anzeigen

    Die "Variable" $tmp wird nun durch _tmp() ausgedrückt...Ich vermute, das war es, was du auch in der in deinem BeispielScript machen wolltest.
    Natürlich funktioniert es auch, die Variablen mit _tmp(Index) aus einem Array zuzuweisen. Index ist hier der "Pointer".

  • Variablen und Pointer

    • Andy
    • 3. April 2016 um 19:34
    Zitat von teamnoobPDB

    Mag ja sein aber ein Index in einem Array kann sich ändern/verkürzen und dann müsste ich alle nachfolgenden Indizes ändern...

    Wo hast du denn diese Weisheiten her? Seit wann "kann sich ein Index ändern"? Ein Index in einem Array ist nur ein Zeiger auf einen Wert, also genau der "Pointer", den du brauchst. Ein Index ist auch nicht zu verkürzen/ändern, außer du machst das explizit!
    Und selbst, wenn du bspw. per ArrayInsert() einen Wert im Array einfügen würdest, werden die nachfolgenden Indizes auf die ursprünglichen Werte angepasst.
    Und wenn du Indizes ändern willst/musst und ein Arraysystem nicht so funktioniert wie du das willst, dann ist deine Struktur falsch implementiert. Verwende Listen/verkettete Listen oder eine der zahllosen anderen Varianten, Daten über "Pointer" (Zeiger/Indizes) anzusprechen. S. hier: Alternativen zum Array

  • Variablen und Pointer

    • Andy
    • 3. April 2016 um 14:46

    Script ist jetzt da, aber was soll passieren, wenn man auf den Button drückt?
    Und mach dir klar, was ein "Pointer" ist! Ein Pointer ist nichts weiter als ein Index in einem Array...

    Ich verstehe nicht, was du machst....
    In der Schleife fragst du das Array ab, aber beim Klick auf den Button bearbeitest du einen String?!

    addDataToCtrl() wird nur ein Mal aufgerufen?!

    So?

    AutoIt
    Global $aCtrl[0][2]
    Global $sDaten = "Daten"
    
    
    Opt("GUIOnEventMode", 1)
    
    
    
    
    $hGUI = GUICreate("", 300, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()
    
    
    $hButton = GUICtrlCreateButton("Test", 10, 10)
    GUICtrlSetOnEvent(-1, "Button")
    addDataToCtrl($hButton, $sDaten)
    $hLabel = GUICtrlCreateLabel("Daten", 100, 100,200,200)
    
    
    
    
    While 1
    	Sleep(500)
    	;Das kommt dann in eine funktion denn es wird etwas umfangreicher
    	For $i = 0 To UBound($aCtrl) - 1
    		GUICtrlSetData($hLabel, $aCtrl[$i][1])
    	Next
    WEnd
    
    
    Func _Exit()
    	Exit
    EndFunc
    
    
    Func Button()
    	$sDaten &= "+Daten"
    	GUICtrlSetData(@GUI_CTRLID,$sdaten)
    	GUICtrlSetpos(@GUI_CTRLID,-1,-1,7*stringlen($sdaten),-1)
    	addDataToCtrl($hButton, $sDaten)
    EndFunc
    
    
    Func addDataToCtrl($hCtrl, $vData)
    	_ArrayAddx($aCtrl, $hCtrl & "|" & $vData )
    EndFunc
    Alles anzeigen
  • Variablen und Pointer

    • Andy
    • 3. April 2016 um 09:24

    Hi,
    nachdem ich diesen Thread schon mehrfach durchgelesen habe, kann ich mir (hoffentlich) vorstellen, um was es dem TE geht:
    Beim Start des Programms wird ein Array erstellt, dieses bekommt die Daten "irgendwoher", ich sage jetzt mal "Textdatei".
    Das Programm läuft und nun werden die im Array stehenden Daten ver/be-arbeitet. Zwischenzeitlich aktualisiert sich die Textdatei.
    Mal angenommen, die Textdatei besteht aus 100000 (hunderttausend) Einträgen, und es wird aber immer nur einer "aktualisiert", dann müsste jedes Mal vor dem Ver/be-arbeiten der Arrayitems das komplette Array aktualisiert werden...
    Soweit meine Vermutung!
    Und jetzt, WO IST DABEI DAS PROBLEM? Genau DAFÜR wurden Computer gebaut und entwickelt, um diese aufwendigen Arbeiten zu erledigen...
    Wenn der Aktualisierungsvorgang zu lange dauert, dann ist das ein anderes Thema!

    Wo ist das Script?!
    Wieder mal X-Y-Problem?! (siehe Sig)

  • Eigene Funktionen eines Tools in UDF ausgliedern?

    • Andy
    • 1. April 2016 um 07:26

    Hi zusammen,
    einige haben es mitbekommen, ein AutoIt-Team (UEZ,Xorinator,Lottich und ich) waren am Osterwochenende auf der Revision 2016.
    Ich behaupte jetzt einfach mal, daß dort einige der kreativsten "Programmierer" im Grafikbereich anwesend waren.
    Schaut man sich die Entwicklung in den letzten Jahren an, drängen sich mir zumindest frappierende Vergleich zu anderen "Technik"-Bereichen auf.
    Genauso, wie es heutzutage kaum noch Automechaniker gibt, sondern Teiletauscher, gibt es auch kaum noch Programmierer, sondern Funktions-Copypaster!

    Die Frage dabei ist, was das im Bereich der Programmierung bedeutet!? Wenn Kreativität dadurch eingeschränkt wird, dass man sich "künstlich" an von irgendwem postulierten Vorgaben orientieren MUSS, dann ist das Ergebnis bestenfalls mittelmäßig! Und das ist in den allermeisten Programmen das Problem...
    Ein "Künstler" kommt nur dann zu einem sehr guten Ergebnis, wenn er seine volle Kreativität am Produkt kompromisslos ausleben kann. Jetzt kann man natürlich sagen, nicht jeder ist ein Künstler und KANN somit überhaupt nicht kreativ arbeiten! Stimmt, und genau DAS ist das Problem beim Programmieren!
    Ohne Kreativität kein optimales Ergebnis!

    Mal etwas krass gesagt, ein als compilierte EXE vorliegendes Programm ist das Ergebnis, und eben genau NICHT der zugrundeliegende Code. Und genau diese EXE wird verkauft und von Kunden/Anwendern benutzt! Diese interessiert es ehrlich gesagt kein Stück, ob sich der "Programmierer" im Code selbstverwirklicht, oder aber an eng gesteckte Software-Erstellungs-Konventionen gehalten hat!
    Mir jedenfalls ist es als Anwender/Nutzer lieber, ich habe gegenüber einem Wettbewerbsprodukt möglichst viele Vorteile. Ob der "Programmierer", wenn er sich an strikte Vorgaben hält, dieses Ergebnis vorlegen kann, ist fraglich.
    Und da bin ich immer mehr der Meinung, daß, wenn man sich viel zu vielen Einschränkungen im Schaffensprozess hingeben muss, das Ergebnis auch bestenfalls eingeschränkt ist...

    Zusammengefasst: Mir ist das kreative/bessere Programm lieber als der "schön geschriebene" Code!
    Das eine schließt das andere zwar nicht aus, allerdings schaffen es die meisten nicht. Aus o.g. Gründen!

  • "Gegenstände" im bild zählen

    • Andy
    • 31. März 2016 um 20:23
    Zitat von GerhardSchr

    wenn bei einer fläche von z.B. einem A4 Blatt voller Körner (überlappungsfrei) ca. 10 falsch gezählt werden ist das ok

    Na also, da hätte wir ja schon mal wenigstens eine Hausnummer, wo es hingehen soll....
    Poste mal einige (ca. 10) Bilder in möglichst guter Auflösung mit der "von Hand" ausgezählten Anzahl Körner. Dann haben wir Vorlagen, mit denen man Arbeiten kann!

  • Revision 2016 - "The return of EvilBot"

    • Andy
    • 29. März 2016 um 22:04

    Hab Fomel editiert im obigen Post, muss ja alles physikalisch korrekt sein! :theke:

  • Revision 2016 - "The return of EvilBot"

    • Andy
    • 29. März 2016 um 21:44
    Zitat von autoBert

    Je weiter weg vom warmen Grill desto mehr frier!

    So wird der "Energiepotentialausgleich" völlig korrekt beschrieben! Und da machen die Lehrer in der Schule einen solchen Aufriss... :klatschen:
    Näherungs-Formel dazu:
    Wohlfühlfaktor[Bierdurst] = (Grilltemperatur [K] - Außentemperatur[K] ) * Grillfläche[m²] *Grilldauer[h] * Anzahl_bereits_getrunkener_Biers[Biers /h] / ( Abstand_vom Grill[m] * Abstand_zum_Bierkasten[m] * Anzahl_übergezogener_Klamotten[Daunenjacken] ^-1 * Temperatur_Bier[k] )
    IdR integriert man noch über die Biers von null bis 20 (1 Kasten), allerdings steigen dann auch zwangsläufig die "Schwankungen" :rofl:

    Zitat von autoBert

    Ludwigshafen wird dann natürlich eingemeindet, sind doch auch Menschen. Die können doch schließlich nichts dafür, daß sie vom anderen Ufer sind

    Die sind nicht nur vom anderen Ufer, die sind auch noch "vunn de ebsch Seid"...ganz arme Leute :rolleyes:

  • Excel Tabelle Namen und Zahlen auslesen, in variable speichern

    • Andy
    • 29. März 2016 um 21:22

    Für OpenOffice gibt sogar eine Funktionssammlung in unserem Forum:
    Funktionssammlung OpenOffice Calc

  • Revision 2016 - "The return of EvilBot"

    • Andy
    • 29. März 2016 um 21:13
    Zitat von Xorianator

    Wärmender Grill? Davon hätte ich auch gerne was gemerkt

    Naja, als wir den Grill ausgeschaltet hatten, wurde es schlagartig kalt, und zwar empfindlich kalt.... Da hab ich das Ding einfach wieder angemacht 8o
    Konnte ja keiner was dafür, dass du auf der falschen Seite des Tisches gesessen hast :P
    Wir hatten ja schliesslich auch mehrere Würstchen und auch mehrere Steaks gegessen! Lottich hat sich sogar für das letzte Steak geopfert....dafür saß er auch nicht ganz so kalt nah am Grill^^

    Btw. hab ich noch eine "EVILBOT"-Tüte gefunden...Hab also auch noch zwei dieser Puzzle-Päckchen. Wenn du mal in der Nähe bist, kannste die gerne abholen :rofl: Dann kannst du doppelt Kreativ sein!

  • "Gegenstände" im bild zählen

    • Andy
    • 29. März 2016 um 00:10

    Hi,
    ich würde zunächst die Bilder per Sobel-Kantenfilter bearbeiten, Damit erhält man die Umrisse der Körner und ggf die "Trennlinie", welche beim geschlossenen Korn eine Linie, und beim geöffneten Korn eine größere Fläche ist.
    Weiterhin würde ich die Farben reduzieren/verstärken, um ggf Farbunterschiede von geöffneten/geschlossenen Körnern zu finden. In Verbindung mit der Kantendetektion sind imho schon recht gute Ergebnisse zu erzielen, das "Zählen" reduziert sich dann auf das zusammenzählen von Farbflächen.
    Von welchen Toleranzen/Toleranzfeldern ist beim Zählen auszugehen?

  • Performance bei der Funktion _GUICtrlListView_AddArray

    • Andy
    • 28. März 2016 um 23:39

    @Kanashius,
    _guictrllistview_beginupdate und _guictrllistviewendupdate sind in der Funktion _GUICtrlListView_AddArray enthalten!

    @horphi, Cursor auf den Funktionsnamen, ctrl+j springt in die UDF, untersuche die Funktion(en) und vor allem die drei Schleifen mit den Timerbefehlen und finde den "Übeltäter". Ich vermute die DllStructSetData als Zeitfresser, am SendMessage() wird man nicht viel machen können...

  • Revision 2016 - "The return of EvilBot"

    • Andy
    • 28. März 2016 um 22:49

    Ja, der vorangegangene Grillabend mit den lecker Würstchen und Steaks und nicht zu vergessen den malz- und hefehaltigen Getränken war ein gelungener "Starter" für den Event. Die Gespräche über unser aller AutoIt ließen den Abend/Nacht vor dem wärmenden Grill 8) wie im Flug vergehen.
    Mir hat's jedenfalls viel Spass gemacht!

    Bei der Revision fand ich die Athmosphäre wie immer packend, obwohl man in diesem Jahr sehr gemerkt hatte, dass der "Nachwuchs" fehlte.
    Die "Stars" sind mittlerweile in die Jahre gekommen, äquivalenten Nachwuchs sah man kaum. Die Qualität der Beiträge war für mich so wie in den vorhergehenden Jahren auch, unterschiedlich!
    Ob man Beiträge "schlecht" bewertet ist mal ein guter Einsprungspunkt für eine Diskussion!!!

    Wirklich schlecht fand ich nur gegen Ende die immense Lautstärke, dieses "Mittel" einzusetzen, damit die Beiträge der (sowieso imho konkurrenzlosen) Cracks NOCH MEHR hervorgehoben werden, ist gelinde gesagt lächerlich....wer so etwas nötig hat, soll sich ein anderes Hobby suchen. Definitiv wurde das nicht "zufällig" so gemacht. Ich war kurz davor, die Halle zu verlassen, denn die im Auto liegengebliebenen Ohrenstöpsel hatte ich bis dahin nicht mal ansatzweise gebraucht.

    Hardwaregebastel war zwar auch vertreten, aber wesentlich weniger wie in den Jahren davor, das fachgesimpel mit Händen und Füßen hat mir etwas gefehlt^^
    Und um den Kollegen Xorinator etwas zu korrigieren, DER TEE WAR SAUHEISS!!! Der Kaffe war klasse und umsonst wie immer, es gab zusammen mit dem Eintritts-Revision-2016-Armbändchen noch ein EVILBOT-Tütchen für jeden mit einer Wasserflasche, Mini-Steckspiel, Kugelschreiber, Kaugummi, Traubenzucker, Ansteckbutton und Schlüsselband.
    Auf dem Eingangstresen lagen haufenweise Flyer/Kärtchen diverser Gruppen, welche das Revision-Motto "VOTE EVILBOT" aufgegriffen hatten und unter dem Schlagwort "VOTE ROBBOT", "VOTE SOUNDBOT", "VOTE BITBOT", "VOTE CRINKLERBOT" uswusf. ihre Gruppen vorstellten. Ich, im Vollbesitz meiner geistigen Kräfte, hatte natürlich sofort die berauschende Idee, unser Forum weltweit bekanntzumachen unter dem Logo "VOTE AUTOITBOT"! :Face: Umpft....

    Vergessen und schmerzlich vermisst hatte ich unser Acer Aspire Switch 10, damit hätte ich nicht mit dem Handy rumfummeln müssen um mich hier in der SB zu melden. Weiterhin läuft AutoIt auf diesem Gerät und es hätten sich bestimmt einige Kontakte ergeben.
    UEZ, wir brauchen dringend das besprochene, in Flammen stehende und sich drehende AutoIt-Logo!!!

    Wir seh'n uns auf der Revision 2017! Drei, vier Tage Spass haben, cooles Team dabei, "hacken", Party machen! Seid mit dabei!

  • Winkelfunktionen - Richtungspfeile am Rand

    • Andy
    • 26. März 2016 um 09:05

    Hi,
    ich vermute mal, so soll es letztendlich funktionieren. Mausposition abfragen und den Pfeil zeichnen.
    Das Puffergedöns um den Pfeil wieder zu "löschen" und die Abfrage, ob die Mausposition innerhalb des Fensters ist, überlasse ich mal dem TE.

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    $hgui = GUICreate("")
    GUISetState(@SW_SHOW)
    
    
    
    
    
    
    
    
    $center = 200                         ;mitte Fenster
    $Radius1 = 140                        ;inneres quadrat
    $Radius2 = 190                        ;äußeres quadrat
    $pi = ATan(1) * 4                     ;pi...was sonst
    $degToRad = $pi / 180                 ;deg to rad
    
    
    
    
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hgui)
    $hPen = _GDIPlus_PenCreate(0xFFFF0000, 5)
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius2, $center - $Radius2, $center + $Radius2, $center - $Radius2, $hPen) ;quadrat1
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius2, $center - $Radius2, $center + $Radius2, $center + $Radius2, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius2, $center + $Radius2, $center - $Radius2, $center + $Radius2, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius2, $center + $Radius2, $center - $Radius2, $center - $Radius2, $hPen) ;quadrat
    $hPen = _GDIPlus_PenCreate(0xFF00FF00)
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius1, $center - $Radius1, $center + $Radius1, $center - $Radius1, $hPen) ;quadrat2
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius1, $center - $Radius1, $center + $Radius1, $center + $Radius1, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius1, $center + $Radius1, $center - $Radius1, $center + $Radius1, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius1, $center + $Radius1, $center - $Radius1, $center - $Radius1, $hPen) ;quadrat
    
    
    
    
    $hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)
    $hEndCap = _GDIPlus_ArrowCapCreate(15, 5)
    _GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
    
    
    
    
    $opt = Opt("MouseCoordMode")
    
    
    Opt("MouseCoordMode", 2)
    
    
    Do                                    ;Pfeil folgt Mauscursor
    
    
        $maus_x = -(MouseGetPos(0) - $center)
        $maus_y = (MouseGetPos(1) - $center)
    
    
        $alpha = (atan2($maus_y, $maus_x)) / $degToRad + 180
    
    
        $q = Int(($alpha + 45) / 90)      ;quadrant ermitteln
        If $alpha >= 315 Then $q = 0
    
    
        $tan = Tan($alpha * $degToRad)    ;tangens berechnen
    
    
        $q0 = ($q = 0)
        $q1 = ($q = 1)
        $q2 = ($q = 2)
        $q3 = ($q = 3)
        $q1q3 = ($q1 Or $q3)
        $q0q2 = ($q0 Or $q2)
    
    
        If $q0q2 Then                     ;je quadrant anpassen
            $xfaktor = $q0q2 * (-2 * $q2 + 1) ;-1, 1 oder 0
            $yfaktor = $q1q3 * (-2 * $q3 + 1) ;-1, 1 oder 0
            $t1 = ($xfaktor - $tan * $yfaktor)
            $t2 = ($yfaktor - $tan * $xfaktor)
            $x1 = $Radius1 * $t1          ;inneres quadrat startpunkt
            $y1 = $Radius1 * $t2
            $x2 = $Radius2 * $t1          ;äußeres quadrat endpunkt
            $y2 = $Radius2 * $t2
        Else
            $yfaktor = $q1q3 * (-2 * $q1 + 1);-1, 1 oder 0
            $xfaktor = $q0q2 * (-2 * $q3 + 1);-1, 1 oder 0
            $t1 = ($xfaktor - $tan * $yfaktor)
            $t2 = ($yfaktor - $tan * $xfaktor)
            $x1 = $Radius1 / $t1          ;inneres quadrat startpunkt
            $y1 = $Radius1 / $t2
            $x2 = $Radius2 / $t1          ;äußeres quadrat endpunkt
            $y2 = $Radius2 / $t2
        EndIf
    
    
        _GDIPlus_GraphicsDrawLine($hGraphic, $center + $x1, $center + $y1, $center + $x2, $center + $y2, $hPen) ;quadrat
    
    
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    
    
    
    ; Ressourcen freigeben
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    
    
    
    
    Func atan2($y, $x)
        Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y))))
    EndFunc                               ;==>atan2
    Alles anzeigen
  • Winkelfunktionen - Richtungspfeile am Rand

    • Andy
    • 25. März 2016 um 21:59

    So habe ich mir das vorgestellt...

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    $hgui = GUICreate("")
    GUISetState(@SW_SHOW)
    
    
    
    
    
    
    
    
    $center = 200                                                      ;mitte
    $Radius1 = 140                                                     ;inneres quadrat
    $Radius2 = 190                                                     ;äußeres quadrat
    $pi = ATan(1) * 4                                                  ;pi...was sonst
    $degToRad = $pi / 180                                              ;deg to rad
    
    
    
    
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hgui)
    $hPen = _GDIPlus_PenCreate(0xFFFF0000, 5)
    _GDIPlus_GraphicsDrawLine($hGraphic, $center-$radius2,$center-$radius2, $center+$radius2, $center-$radius2, $hPen) ;quadrat1
    _GDIPlus_GraphicsDrawLine($hGraphic, $center+$radius2, $center-$radius2, $center+$radius2, $center+$radius2, $hPen)     ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center+$radius2, $center+$radius2, $center-$radius2, $center+$radius2, $hPen)     ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center-$radius2, $center+$radius2, $center-$radius2, $center-$radius2, $hPen)       ;quadrat
    $hPen = _GDIPlus_PenCreate(0xFF00FF00)
    _GDIPlus_GraphicsDrawLine($hGraphic, $center-$radius1, $center-$radius1, $center+$radius1, $center-$radius1, $hPen)       ;quadrat2
    _GDIPlus_GraphicsDrawLine($hGraphic, $center+$radius1, $center-$radius1, $center+$radius1, $center+$radius1, $hPen)     ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center+$radius1, $center+$radius1, $center-$radius1, $center+$radius1, $hPen)     ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center-$radius1, $center+$radius1, $center-$radius1, $center-$radius1, $hPen)       ;quadrat
    
    
    
    
    $hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)
    $hEndCap = _GDIPlus_ArrowCapCreate(15, 5)
    _GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
    
    
    For $alpha = 0 To 360 Step 5
        $q = Int($alpha / 45)                                          ;quadrant
    
    
        If $q = 0 Or $q = 3 Or $q = 4 Or $q = 7 Then                   ;je quadrant anpassen
            $xfaktor = ($q = 0 Or $q = 3 Or $q = 4 Or $q = 7) * (-2 * ($q = 3 Or $q = 4) + 1);-1, 1 oder 0
            $yfaktor = ($q = 1 Or $q = 2 Or $q = 5 Or $q = 6) * (-2 * ($q = 5 Or $q = 6) + 1);-1, 1 oder 0
            $x1 = $Radius1 * ($xfaktor - Tan($alpha * $degToRad) * $yfaktor) ;inneres quadrat startpunkt
            $y1 = $Radius1 * ($yfaktor - Tan($alpha * $degToRad) * $xfaktor)
            $x2 = $Radius2 * ($xfaktor - Tan($alpha * $degToRad) * $yfaktor);äußeres quadrat endpunkt
            $y2 = $Radius2 * ($yfaktor - Tan($alpha * $degToRad) * $xfaktor)
        Else
            $yfaktor = ($q = 1 Or $q = 2 Or $q = 5 Or $q = 6) * (-2 * ($q = 1 Or $q = 2) + 1);-1, 1 oder 0
            $xfaktor = ($q = 0 Or $q = 3 Or $q = 4 Or $q = 7) * (-2 * ($q = 5 Or $q = 6) + 1);-1, 1 oder 0
            $x1 = $Radius1 / ($xfaktor - Tan($alpha * $degToRad) * $yfaktor)
            $y1 = $Radius1 / ($yfaktor - Tan($alpha * $degToRad) * $xfaktor)
            $x2 = $Radius2 / ($xfaktor - Tan($alpha * $degToRad) * $yfaktor)
            $y2 = $Radius2 / ($yfaktor - Tan($alpha * $degToRad) * $xfaktor)
        EndIf
    
    
        Sleep(50)
    
    
        _GDIPlus_GraphicsDrawLine($hGraphic, $center + $x1, $center + $y1, $center + $x2, $center + $y2, $hPen) ;quadrat
    
    
    Next
    
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    
    ; Ressourcen freigeben
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Alles anzeigen


    Man kann natürlich massiv zusammenfassen, um auch die Ausführungsgeschwindigkeit zu erhöhen (darauf kommts bei Spielen meistens an).
    Letztendlich bleibt pro Pfeil 1x der Tangens zu berechnen und bissl Bitgeschiebe durch OR und die Multiplikation/Division...
    Wenn in einer (Compiler-) Hochsprache der Tangens zu lange dauert (FPTAN Latency ca. 250-300 Takte, Throughput ca. 170 Takte) legt man sich eine LookUpTabelle mit den Tangenswerten von 0-359° in ein Array und greift über den Index zu (maximal 5-10 Takte aus dem Speicher / Prozessorcache)

    Nach einigen Optimierungen und Vereinfachungen sieht das doch schon ganz schön schnell aus.
    Jetzt werden auch nur 4 Quadranten benutzt...

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    $hgui = GUICreate("")
    GUISetState(@SW_SHOW)
    
    
    
    
    
    
    
    
    $center = 200                        ;mitte
    $Radius1 = 140                       ;inneres quadrat
    $Radius2 = 190                       ;äußeres quadrat
    $pi = ATan(1) * 4                    ;pi...was sonst
    $degToRad = $pi / 180                ;deg to rad
    
    
    
    
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hgui)
    $hPen = _GDIPlus_PenCreate(0xFFFF0000, 5)
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius2, $center - $Radius2, $center + $Radius2, $center - $Radius2, $hPen) ;quadrat1
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius2, $center - $Radius2, $center + $Radius2, $center + $Radius2, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius2, $center + $Radius2, $center - $Radius2, $center + $Radius2, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius2, $center + $Radius2, $center - $Radius2, $center - $Radius2, $hPen) ;quadrat
    $hPen = _GDIPlus_PenCreate(0xFF00FF00)
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius1, $center - $Radius1, $center + $Radius1, $center - $Radius1, $hPen) ;quadrat2
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius1, $center - $Radius1, $center + $Radius1, $center + $Radius1, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center + $Radius1, $center + $Radius1, $center - $Radius1, $center + $Radius1, $hPen) ;quadrat
    _GDIPlus_GraphicsDrawLine($hGraphic, $center - $Radius1, $center + $Radius1, $center - $Radius1, $center - $Radius1, $hPen) ;quadrat
    
    
    
    
    $hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)
    $hEndCap = _GDIPlus_ArrowCapCreate(15, 5)
    _GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
    
    
    For $alpha = 0 To 360 Step 5         ;alle winkel
        $q = Int(($alpha + 45) / 90)     ;quadrant ermitteln
        If $alpha >= 315 Then $q = 0
    
    
        $tan = Tan($alpha * $degToRad)   ;tangens berechnen
    
    
        $q0 = ($q = 0)
        $q1 = ($q = 1)
        $q2 = ($q = 2)
        $q3 = ($q = 3)
        $q1q3 = ($q1 Or $q3)
        $q0q2 = ($q0 Or $q2)
    
    
        If $q0q2 Then                    ;je quadrant anpassen
            $xfaktor = $q0q2 * (-2 * $q2 + 1) ;-1, 1 oder 0
            $yfaktor = $q1q3 * (-2 * $q3 + 1) ;-1, 1 oder 0
            $t1 = ($xfaktor - $tan * $yfaktor)
            $t2 = ($yfaktor - $tan * $xfaktor)
            $x1 = $Radius1 * $t1         ;inneres quadrat startpunkt
            $y1 = $Radius1 * $t2
            $x2 = $Radius2 * $t1         ;äußeres quadrat endpunkt
            $y2 = $Radius2 * $t2
        Else
            $yfaktor = $q1q3 * (-2 * $q1 + 1);-1, 1 oder 0
            $xfaktor = $q0q2 * (-2 * $q3 + 1);-1, 1 oder 0
            $t1 = ($xfaktor - $tan * $yfaktor)
            $t2 = ($yfaktor - $tan * $xfaktor)
            $x1 = $Radius1 / $t1         ;inneres quadrat startpunkt
            $y1 = $Radius1 / $t2
            $x2 = $Radius2 / $t1         ;äußeres quadrat endpunkt
            $y2 = $Radius2 / $t2
        EndIf
    
    
        Sleep(50)
    
    
        _GDIPlus_GraphicsDrawLine($hGraphic, $center + $x1, $center + $y1, $center + $x2, $center + $y2, $hPen) ;quadrat
    
    
    Next
    
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    
    ; Ressourcen freigeben
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Alles anzeigen
  • Winkelfunktionen - Richtungspfeile am Rand

    • Andy
    • 25. März 2016 um 19:19
    Zitat von Texos

    Er soll nicht auf dem Radius liegen sondern an den Kanten des Quadrats.

    Ja, das habe ich kapiert
    Wie du an die Koordinaten auf der Quadratkante kommst, habe ich dir ja gezeigt. Und die "Pfeillänge" ist ja auch kein Problem. Der Endpunkt ist bekannt und die Pfeillänge wird durch die Koordinate beschrieben, die der Schnittpunkt eines Kreises mit kleinerem Radius und der "Pfeillinie" ergibt.
    Kreisfunktion x²+y²=r² und Geradengleichung y=m*x+b mit Steigung m = (y2-y1)/(x2-x1)

  • Winkelfunktionen - Richtungspfeile am Rand

    • Andy
    • 25. März 2016 um 11:11

    Ich bin mir nicht ganz sicher, ob ich begriffen habe, um was es eigentlich geht?!
    Das wird am X-Y-Problem liegen...wie so oft || (siehe Link in meiner Signatur)

    WO IST DAS PROBLEM? Den Pfeil zu zeichnen, die Richtung zu ermitteln, die Position der Linie zu zeichnen uswusf. ?
    Wenn dein Richtungsanzeiger bis zum Rand des äußeren Quadrates reichen soll, wieso nutzt du nicht einfach nur das Dreieck, dessen Winkel bekannt ist und dessen Kathethe/Gegenkathete IMMER der Radius des Kreises ist?
    Du musst auch nur den Winkel 0 bis 45° betrachten, alle anderen "Richtungsanzeiger" lassen sich durch Spiegeln an der X- und Y-Achse ermitteln.
    Für a=30° und R=200 werden die Koordinaten auf dem äußeren Quadrat gesucht, dabei ist die X-Koordinate bekannt, nämlich R:
    tan(a)= Y / R
    0,577 * 200 = Y
    115 = Y

    Für 180-a ist Y=115
    Für 180+a ist Y=-115
    Für 360-a ist Y=-115

    Jetzt die Frage an die Geometriker...wie sind X und Y bei 90-a, 90+a, 270-a und 270+a....*hust* wer dafür einen Taschenrechner braucht, der sollte besser sein Talent in anderen Bereichen ausbauen :Face:

  • Telnet-Status abrufen

    • Andy
    • 24. März 2016 um 06:39
    Zitat von mirko2002

    Oder geht das damit auch? Laut Hilfe sieht's aber nicht danach aus.

    Natürlich geht das auch...
    Wäre reichlich Schwachsinnig, im Zeitalter von DNS/DHCP mit IP-Adressen rumzuhantieren!
    Schau mal nach TCPNameToIP

  • FTP Upload funktioniert nicht - _FTP_FilePut

    • Andy
    • 23. März 2016 um 17:57

    Hi,
    Du hast keinerlei Flags, weder im _FTP_Open() noch im _FTP_FilePut() gesetzt, wieso nicht?
    INTERNET_FLAG_RELOAD ist immer einen Versuch wert, da die Datei nicht im Cache landet sondern gelesen/geschrieben wird.
    FTP Server-Modus activ/passiv? Bei _FTP_Open() das passende Flag setzen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™