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. Mars

Beiträge von Mars

  • Caesar Decoder

    • Mars
    • 13. Juli 2013 um 14:50

    Moin,

    Vom Geheimdienst inspiriert habe ich einen Caesar Decoder geschrieben.
    Er funktioniert zurzeit nur mit Deutscher Sprache und arbeitet relativ zuverlässig. (Man kann beliebige Sprachen per Wörterbuch integrieren)

    Die Funktionsweise ist relativ einfach. Da es nur 25 Möglichkeiten der Verschiebung gibt werden alle 25 Erzeugt und anschließend überprüft in welcher Version die meiste Sprache gefunden werden kann. Diese Version ist dann wahrscheinlich die Lösung. Eine Garantie für Funktionalität gibt es natürlich nicht, und wer Dialekt, oder seltsame Wörter verwendet kann den Decoder damit austricksen. (Ihm fehlt dann das entsprechende Wörterbuch).

    Viel Spaß damit, und Spioniert bitte unbescholtene Bürger aus ;)
    14.07.13: Aufgeräumte Version mit 2 Wörterbüchern. Nur wenn das kleine zu keinem Ergebnis kommt wird das Große verwendet. -> Spart einiges an Zeit.

    Skript
    [autoit]

    #include <Array.au3>

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

    Global $aTime[4]

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

    Global $aDeutschGr = StringSplit('MINISTERPRÄSIDENT,INTERNATIONALEN,BUNDESREGIERUNG,AMERIKANISCHEN,BEISPIELSWEISE,ÖFFENTLICHKEIT,ZUSAMMENARBEIT,BUNDESREPUBLIK,INFORMATIONEN,UNTERSTÜTZUNG,ARBEITSPLÄTZE,AMERIKANISCHE,UNTER ANDEREM,VERHANDLUNGEN,VERGANGENHEIT,VERSCHIEDENEN,FRANZÖSISCHEN,BÜRGERMEISTER,GESELLSCHAFT,IMMER WIEDER,MITTLERWEILE,ENTSCHEIDUNG,EUROPÄISCHEN,GLEICHZEITIG,ZUSAMMENHANG,ÖFFENTLICHEN,INSBESONDERE,ZUM BEISPIEL,UNIVERSITÄT,SCHLIEßLICH,FRANKFURTER,MITARBEITER,BEVÖLKERUNG,POLITISCHEN,VERGANGENEN,TATSÄCHLICH,STUTTGARTER,MÖGLICHKEIT,ENTWICKLUNG,SOGENANNTEN,PRÄSIDENTEN,ENTSCHIEDEN,VORSITZENDE,DEUTSCHLAND,ENTSCHEIDEN,AUSSTELLUNG,UNTERNEHMEN,MANNSCHAFT,HAUPTSTADT,WOCHENENDE,DISKUSSION,ANGESICHTS,INZWISCHEN,JEDENFALLS,FRANKREICH,MITGLIEDER,MILLIARDEN,ALLERDINGS,POLITISCHE,ÜBERNEHMEN,ENTWICKELT,PRODUKTION,EHEMALIGEN,BERICHTETE,DONNERSTAG,VERHINDERN,EIGENTLICH,GESCHICHTE,BEZEICHNET,VIELLEICHT,SICHERHEIT,MINDESTENS,RUSSISCHEN,WIRTSCHAFT,SEPTEMBER,VERGLEICH,VERTRETER,HAMBURGER,VERFAHREN,KILOMETER,GEPLANTEN,POLITIKER,BEDEUTUNG,GEMEINSAM,EINZELNEN,GEGENÜBER,ZUMINDEST,BERICHTET,ERREICHEN,REGIERUNG,INTERESSE,INSGESAMT,LEDIGLICH,DEUTSCHEN,EBENFALLS,PRÄSIDENT,WEITERHIN,NATÜRLICH,VOR ALLEM,INNERHALB,STUTTGART,EHEMALIGE,KOALITION,FRANKFURT,ZUSCHAUER,KOMMENDEN,VERFÜGUNG,BESONDERS,INDUSTRIE,SITUATION,VERWENDET,NICHT NUR,STUDENTEN,MILLIONEN,PARLAMENT,VERLASSEN,ÜBERHAUPT,PROBLEME,DURCHAUS,RICHTUNG,GENOMMEN,AUßERDEM,GLEICHEN,SOLDATEN,KOLLEGEN,GESPRÄCH,PERSONEN,DEZEMBER,ERSTMALS,GEBRACHT,SPRECHER,WEITEREN,DEUTLICH,GEWORDEN,GESTELLT,MITTWOCH,NOVEMBER,BEKOMMEN,WIRKLICH,GEKOMMEN,ERREICHT,DIENSTAG,MÜNCHNER,ERGEBNIS,BERLINER,NÄCHSTEN,ARBEITEN,PROGRAMM,SCHAFFEN,INTERNET,VERLOREN,DEUTSCHE,OFFENBAR,ERHALTEN,ZUSAMMEN,ZUNÄCHST,GEFUNDEN,VERSUCHT,MEHRHEIT,ERWARTET,ERKLÄRTE,NEW YORK,WELTWEIT,MENSCHEN,VERLETZT,HEUTIGEN,POSITION,DARUNTER,PARTEIEN,BESUCHER,IMMERHIN,PUBLIKUM,SPRECHEN,ERWARTEN,BEISPIEL,FORDERTE,GESCHÄFT,EXPERTEN,AUFGRUND,FUNKTION,GESAMTEN,VERKAUFT,MINISTER,GEWINNEN,JÄHRLICH,BEDEUTET,BEHÖRDEN,ZWISCHEN,HINGEGEN,FRÜHEREN,ZUGLEICH,FREILICH,MEISTEN,SONNTAG,ZWEITEN,STIMMEN,GEHÖREN,PROZENT,TRAINER,GRÖßTEN,EINFACH,POLITIK,FEBRUAR,AUSLAND,GESETZT,KÖNNTEN,RECHNEN,KINDERN,GERICHT,WOLLTEN,DRITTEN,MÖGLICH,DAGEGEN,ZULETZT,SOLLTEN,TOCHTER,FORDERT,FREITAG,VORJAHR,BLEIBEN,DERZEIT,STAATEN,THEATER,BESTEHT,KONNTEN,GENANNT,CHANCEN,OHNEHIN,STÄRKER,SCHNELL,KÜNFTIG,AUFTRAG,ZUKUNFT,SCHEINT,NÄMLICH,BEREICH,HAMBURG,FAMILIE,LÄNDERN,STELLEN,MEHRERE,OKTOBER,GEGEBEN,WICHTIG,STUNDEN,FÜHRUNG,ANDERES,SPIELEN,JEWEILS,EINIGEN,SCHÜLER,DARÜBER,PROBLEM,ERKLÄRT,NACHDEM,DRITTEL,KLEINEN,MONATEN,BRINGEN,BEKANNT,GESAMTE,BISLANG,MINUTEN,BETONTE,KONZEPT,SAMSTAG,WENIGEN,GEWESEN,GESEHEN,WENIGER,SONDERN,EINSATZ,ANGABEN,DADURCH,RICHTIG,STELLTE,RICHTER,GEFÜHRT,ERZÄHLT,MÜNCHEN,SOLCHEN,ENDLICH,POLIZEI,SCHRITT,BRAUCHT,SPIELER,GESTERN,SPRACHE,MEINUNG,WEITERE,EIGENEN,ANSICHT,LETZTEN,ZUFOLGE,EINZIGE,BEGINNT,GEMACHT,MÄDCHEN,RUßLAND,BEREITS,HANDELT,PROJEKT,BERICHT,WÄHREND,ANGEBOT,ANDEREN,AUFGABE,DENNOCH,GEPLANT,SPRICHT,DESHALB,ANDERER,NIEMAND,UNSERER,ITALIEN,ZAHLEN,SAISON,ANDERS,HINAUS,SCHULE,VÖLLIG,GEWALT,SUCHEN,AUGUST,UNSERE,KULTUR,SOWOHL,MEINTE,LÖSUNG,URTEIL,BRINGT,FÜHREN,SICHER,GESAGT,MEDIEN,SOMMER,DANACH,BILDER,HELFEN,FOLGEN,SCHWER,FIRMEN,HANDEL,VORBEI,SPRACH,REGION,PUNKTE,KUNDEN,KLEINE,LEICHT,LÄNDER,STUNDE,TRAGEN,GEFAHR,ZEIGTE,BEGANN,GANZEN,LANGEN,HÄUFIG,STREIT,KRITIK,TEILTE,RAHMEN,BANKEN,LANDES,SETZEN,ANTEIL,FRÜHER,ZWEITE,KIRCHE,GESETZ,AKTIEN,BAYERN,ÄNDERN,LEITER,BEREIT,LONDON,MONATE,MUTTER,STRAßE,MENSCH,BONNER,GROßER,WENIGE,LETZTE,HÄLFTE,WESTEN,HERAUS,WASSER,SPIELT,OBWOHL,ZIEHEN,MITTEL,GRÖßTE,ERNEUT,KEINER,SOFORT,BIETEN,ELTERN,LÄNGST,BREMEN,UMSATZ,ZEITEN,MOSKAU,DÜRFEN,WELCHE,MÜßTEN,MUßTEN,DÜRFTE,ZEIGEN,BESTEN,FRAGEN,SEITEN,MÖCHTE,GELTEN,VEREIN,CHANCE,WÄHLEN,MACHTE,BEGINN,JUNGEN,BÜRGER,STELLE,DIREKT,BIETET,ERSTEN,BISHER,DOLLAR,MÜSSEN,DAMALS,SELBST,WOCHEN,SEINEM,JAHRES,VIELEN,SOLLTE,JEDOCH,SOLLEN,DIESEM,SOLCHE,NEHMEN,BESSER,STEHEN,WÜRDEN,WURDEN,KONNTE,FINDEN,SEINEN,FRAUEN,GLE' & _
    'ICH,HALTEN,GEHÖRT,EINMAL,DIESEN,EINIGE,WEITER,BEIDEN,KOMMEN,HÄTTEN,SEINES,AUTOIT,KÖNNTE,EUROPA,NICHTS,MONTAG,BERLIN,ALLEIN,JANUAR,WOLLEN,HINTER,ANFANG,HATTEN,ANDERE,GROßEN,DIESES,PARTEI,MACHEN,LASSEN,GRUPPE,LIEGEN,BLEIBT,STELLT,KÖNNEN,ERFOLG,KOSTEN,GRÜNEN,FINDET,WERDEN,EBENSO,DARAUF,SPÄTER,GERADE,MÄNNER,SIEBEN,EIGENE,ARBEIT,KINDER,SEINER,DESSEN,ZURÜCK,SYSTEM,WORDEN,WISSEN,WOLLTE,DIESER,WIEDER,KEINEN,JAHREN,HEIßT,SEHEN,DARIN,MEIST,MACHT,KAMEN,ALLEN,KOMMT,DENEN,DAFÜR,DRUCK,MEINE,ZUDEM,BLICK,WÜRDE,KREIS,SOGAR,ERSTE,FRAGE,IHNEN,WEDER,LEBEN,DEREN,NEUER,SOLLE,AUGEN,GUTEN,SIEHT,IHREM,GROßE,LIEGT,KAMPF,DAVON,HÄTTE,GEBEN,STETS,OFFEN,BÜHNE,UNTER,GEGEN,SCHON,SEINE,EINES,LIEBE,KEINE,WARUM,FÄLLT,SICHT,WÄREN,DIESE,LÄUFT,BÖRSE,INDEM,ROMAN,NICHT,EINST,DARUM,REIHE,EINER,WURDE,HATTE,JAPAN,DURCH,EINEM,EINEN,HABEN,HAUSE,STEHT,DABEI,ABEND,BODEN,STADT,SOWIE,WEGEN,ALLES,ANGST,NEUES,VIELE,ETWAS,OSTEN,FOLGE,WERDE,JETZT,WAREN,JAHRE,JEDES,CHINA,IMMER,SAGTE,NEUEN,PETER,BEVOR,SEIEN,IHREN,DAMIT,IHRER,HEUTE,STAND,SONST,NACHT,MÜSSE,GRUND,NEBEN,SPIEL,NAMEN,BLIEB,SEITE,WOCHE,NIMMT,SACHE,MARKT,STÜCK,ALTEN,JUNGE,METER,MUSIK,ZUVOR,TITEL,PLATZ,FIRMA,HOHEN,MITTE,STATT,PARIS,KRIEG,KUNST,JEDER,BEIDE,TROTZ,APRIL,OPFER,THEMA,DATEN,JEDEN,FÜHRT,WENIG,LANGE,IHRES,HILFE,GENAU,MEINT,KNAPP,STAAT,RECHT,KÖNNE,PREIS,DAHER,ALLER,JEDEM,TAGEN,MUßTE,ZWÖLF,GEHEN,SECHS,ZEIGT,GANZE,DARAN,SETZT,SAGEN,ROLLE,WOLLE,STARK,GENUG,LEUTE,VATER,WEISE,OHNE,HAUS,KIND,AUTO,KÖLN,SAGT,RUND,WIRD,DARF,HÖHE,ENDE,ZEIT,HIEß,PAAR,SIND,ETWA,WEIL,EURO,FEST,LIEß,SOHN,HAND,IDEE,WILL,ALTE,JEDE,GIBT,ALLE,GMBH,Z.B.,LANG,FORM,JAHR,ZWEI,MÄRZ,ODER,GUTE,ABER,HERR,JUNI,NEUE,TAGE,DREI,BUCH,SOLL,REDE,NOCH,ÜBER,LAUT,BANK,KURZ,FILM,OBEN,FELD,BEIM,DOCH,SEIT,NAHM,MEHR,WELT,EBEN,ALSO,GILT,SICH,NEUN,LAND,ZEHN,GROß,BONN,FRAU,WERK,ZWAR,MANN,WEIß,GEBE,DAZU,KANN,KAUM,KOPF,DASS,WORT,MICH,GELD,WOHL,NÄHE,LÄßT,SIEG,JULI,RAUM,DIES,WAHL,HOCH,TEIL,FALL,SEIN,FÜNF,KLAR,HÄLT,WEIT,LAGE,DANN,IHRE,EHER,FAND,ZAHL,BALD,GEHT,SEHR,NACH,ZIEL,HIER,GING,KEIN,GANZ,ERST,MARK,HABE,EINE,VIER,LUFT,VIEL,WÄRE,FAST,DORT,WENN,FREI,CHEF,DENN,HOHE,BILD,WERT,ACHT,AUCH,BIS,ZUR,AUF,DES,MIT,FÜR,EIN,DEM,IST,UND,DIE,DER,DEN,DAS,SAH,VON,ALS,MIO,MRD,WIE,ZUM,VOR,NUR,WAR,AUS,NEU,ALT,HAT,BEI,SIE,DAß,MAN,USA,CDU,PER,DDR,BZW,OFT,IHN,MAG,IHM,WEG,UNS,INS,TOD,SPD,PRO,AMT,NIE,ART,LAG,FDP,TAG,DPA,GUT,BAU,UHR,KAM,TUN,DR.,GAR,WAS,BIN,SEI,CSU,ICH,WIR,VOM,MUß,MIR,NUN,GAB,HIN,ORT,MAL,HER,WER,MAI,IHR,JA,ZU,IN,AM,AB,EU,UM,DM,AG,DA,SO,WO,ES,DU,IM,OB,JE,AN,ER', ',', 2)
    Global $aDeutschKl = StringSplit('MILLIONEN,ZWISCHEN,PROZENT,WIEDER,KÖNNEN,DIESER,WERDEN,JAHREN,WORDEN,SEINER,SEINE,EINER,EINES,HABEN,SCHON,UNTER,EINEN,GEGEN,EINEM,KEINE,DIESE,DURCH,WURDE,IMMER,SAGTE,HATTE,NICHT,SIND,NOCH,SEIN,ODER,ABER,KANN,ÜBER,MEHR,EINE,AUCH,SOLL,JAHR,WILL,SICH,ZWEI,NACH,MARK,WIRD,WENN,HABE,DANN,IHRE,UHR,VOM,WAS,ICH,SEI,WIR,VON,ALS,EIN,HAT,AUS,DEN,DEM,DES,MIT,DAS,IST,FÜR,AUF,DAß,NUR,WAR,ZUM,VOR,MAN,BIS,ZUR,UND,BEI,SIE,DIE,DER,WIE,IN,ZU,UM,AM,SO,ER,IM,ES,AN', ',', 2)
    Global $sText = 'Hiermit erkläre ich sie zu Mann und Computer. Sie dürfen die Braut jetzt booten.'
    Global $sCaesar
    Global $sDeCesar

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

    $aTime[0] = TimerInit()
    $sCaesar = _Caesar($sText, Random(1, 25, 1))
    $aTime[0] = TimerDiff($aTime[0])
    $aTime[1] = TimerInit()
    $sDeCesar = _DeCesar($sCaesar)
    $aTime[1] = TimerDiff($aTime[1])

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

    For $i = 0 To 3 Step 1
    $aTime[$i] = Round($aTime[$i]/StringLen($sText), 3) * 1000
    Next

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

    ConsoleWrite('Original : ' & $sText & @CRLF & 'Caesar ['&$aTime[0]&'µs/Char] : ' & $sCaesar & @CRLF & 'DeCesar ['&$aTime[1]&'µs/Char]: ' & $sDeCesar & @CRLF)

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

    Func _GetText()
    Local $a = _ArrayUnique(StringSplit(StringUpper(StringReplace(ClipGet(), @CR, ',', 0, 1)),@LF, 2))
    _ArrayDelete($a, 0)
    For $i = UBound($a) - 1 To 0 Step -1
    If Not $a[$i] Then _ArrayDelete($a, $i)
    Next
    Local $b[UBound($a)][2]
    For $i = 0 To UBound($a) - 1 Step 1
    $b[$i][0] = $a[$i]
    $b[$i][1] = StringLen($a[$i])
    Next
    _ArraySort($b, 1, 0, 0, 1)
    Local $s
    For $i = 0 To UBound($b) - 1 Step 1
    $s &= $b[$i][0]
    Next
    ClipPut($s)
    EndFunc

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

    Func _DeCesar($s)
    Local $aLen[25][2], $w = StringLeft($s, 25 + Int(StringLen($s) ^ 0.5))
    For $i = 1 To 25 Step 1
    $aLen[$i - 1][0] = _WortbuchKl(_Caesar($w, $i))
    $aLen[$i - 1][1] = $i
    Next
    _ArraySort($aLen)
    If $aLen[0][0]/$aLen[1][0] > 0.8 Then ; Wenn der beste Treffer nur 20%
    For $i = 1 To 25 Step 1 ; besser ist als der 2te -> Größeres Wörterbuch
    $aLen[$i - 1][0] = _WortbuchGr(_Caesar($w, $i))
    $aLen[$i - 1][1] = $i
    Next
    _ArraySort($aLen)
    EndIf
    Return _Caesar($s, $aLen[0][1])
    EndFunc ;==>_DeCesar

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

    Func _Caesar($s, $n)
    Local Static $z = StringSplit('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '', 2)
    Local $sRet, $c
    $n -= Int($n / 26) * 26
    $s = StringUpper($s)
    For $i = 1 To StringLen($s) Step 1
    $c = Asc(StringMid($s, $i, 1))
    Switch $c
    Case 65 To 90
    $c += $n
    If $c > 90 Then $c -= 26
    EndSwitch
    $sRet &= Chr($c)
    Next
    Return $sRet
    EndFunc ;==>_Caesar

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

    Func _WortbuchGr($s)
    Local Static $u = UBound($aDeutschGr) - 1
    For $i = 0 To $u Step 1
    $s = StringReplace($s, $aDeutschGr[$i], '', 0, 1)
    Next
    Return StringLen($s)
    EndFunc ;==>_WortbuchGr

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

    Func _WortbuchKl($s)
    Local Static $u = UBound($aDeutschKl) - 1
    For $i = 0 To $u Step 1
    $s = StringReplace($s, $aDeutschKl[$i], '', 0, 1)
    Next
    Return StringLen($s)
    EndFunc ;==>_WortbuchKl

    [/autoit]

    lg
    Mars

  • GDI+ Anzeige von Bildern fehlerhaft bei wechselnder Grösse / Performance Tips gesucht

    • Mars
    • 13. Juli 2013 um 11:57

    Hab den Aufbau leider nicht ganz verstanden.
    Was immer hilft ist idr BitBlt statt GDI+. (ca. 10x schneller).
    Habe mal das Skript umgebaut auf DCs statt GFX, damit ist das Tempo ne Ecke höher (beim Zeichnen).
    GDI kommt aber mit dem Skalieren nicht richtig klar (kann man glaube ich über einen Modus beheben, habe ich aber auf die schnelle nicht gefunden udn ich muss jetzt weg).
    Optimal wäre es (für die Performance) wenn man die Bilder vorskalieren würde (mit GDI+ und Interpolationmode). Da man das Fenster nur verkleinern kann dürfte das Skalieren trotzdem funktionieren, und das Programm schiebt nicht jedes Mal 100MB durchs RAM. (Jaaa 100MB für eine 3kx1k Bitmap, im RAM ist nichts komprimiert wie bei JPG)

    Das folgende kannst du wahrscheinlich direkt in die Tonne kloppen, aber drüberschauen hilft dir villeicht dein Skript zu verbessern.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GuiConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    OnAutoItExitRegister("_Exit")

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

    Global $hDC_GUI, $hImg_Buffer, $hImg_Bild, $hDC_Buffer, $bNopaint = False
    Global $hBitmap, $hBuffer, $path, $aFileList, $hGUI, $hImage, $iCounter, $hGraphic, $iScreenHeight, $idMsg, $iScreenWidth, $aPos[2] = [0, 0], $iCounterAlt

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

    Do
    $path = FileSelectFolder("Bilder-Verzeichnis wählen", "")
    If @error Then ;==> Bilderdownload anbieten, wenn kein Verzeichnis gewählt wird
    $idMsg = MsgBox(36, "Bilder laden...?", "Kein Verzeichnis gewählt. " & _
    "Sollen einige (große) Bilder von der Seite interfacelift.com geladen werden?" & @CRLF & _
    "Die 5 höchstbewerteten Bilder mit ~3840 Pixeln Breite (ca. 21 MB)")
    If $idMsg = 6 Then
    $path = @TempDir & "\_temp"
    if Not FileExists($path) Then
    DirCreate($path)
    InetGet("http://interfacelift.com/wallpaper/7yz4ma1/02348_caltonhilledinburgh_3840x1024.jpg", $path & "\Bild1.jpg")
    InetGet("http://interfacelift.com/wallpaper/7yz4ma1/03309_damnationcreektrail_3840x2400.jpg", $path & "\Bild2.jpg")
    InetGet("http://interfacelift.com/wallpaper/7yz4ma1/02544_aniconfromanewangle_3840x1024.jpg", $path & "\Bild3.jpg")
    InetGet("http://interfacelift.com/wallpaper/7yz4ma1/02554_shaftwoods_3840x1024.jpg", $path & "\Bild4.jpg")
    InetGet("http://interfacelift.com/wallpaper/7yz4ma1/02367_easternshoresunrise_3840x1024.jpg", $path & "\Bild5.jpg")
    EndIf
    Else
    Exit
    EndIf
    EndIf
    ;$aFileList = _FileListToArray($path, "*.jpg")
    $aFileList = _FileListToArrayMultiSelect($path, "*.gif,*.ico,*.jpg,*.jpeg,*.png,*.bmp", ",", 1)
    If $aFileList[0] = 0 Then MsgBox(16, "Keine Bilder", "Das Verzeichnis enthält keine Bilder." & @CRLF & "Bitte in folgendem Fenster ein korrektes Verzeichnis auswählen oder Abbrechen wählen...", 5)
    Until $aFileList[0] <> 0

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

    $hGUI = GUICreate("Show PIC", Default, Default, Default, Default, $WS_POPUP + $WS_MINIMIZEBOX)

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

    GUISetState()

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

    _GDIPlus_Startup()

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

    $hDC_GUI = _WinAPI_GetDC($hGUI)
    $hImg_Buffer = _Image_Create(@DesktopWidth, @DesktopHeight)
    $hDC_Buffer = DllStructGetData($hImg_Buffer, 1, 1)
    ;~ $hBuffer = _GDIPlus_GraphicsCreateFromHDC($hDC_Buffer)

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

    ;~ _Benchmark() ;==> einmal alle Bilder eines Verzeichnisses anzeigen und benötigte Zeit in der Konsole ausgeben

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN") ;==> Fenster mit Maus bewegen
    GUIRegisterMsg($WM_PAINT, "_WM_PAINT") ;==> Bild neu zeichnen, wenn es (teilweise) ausserhalb des Bildschirms war
    GUIRegisterMsg($WM_MOUSEWHEEL, "_WM_MOUSEWHEEL") ;==> nächstes/vorheriges Bild
    GUIRegisterMsg($WM_ACTIVATE, "_WM_ACTIVATE") ;==> Curser Tasten (Up/Down) nur abfragen, wenn Fenster aktiv

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    HotKeySet("{UP}", "_Up")
    HotKeySet("{DOWN}", "_Down")

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

    While Sleep(10)
    If $iCounter <> $iCounterAlt Then
    ToolTip($iCounter)
    $iCounterAlt = $iCounter
    _Show()
    EndIf
    WEnd

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

    Func _Show()
    HotKeySet("{UP}") ;==> keine Tasten abfangen während das Bild angezeigt wird, dadurch werden Bilder nur fortlaufend angezeigt, solange die Taste gedrückt ist
    HotKeySet("{DOWN}") ;==> wichtig zB bei sehr großen Bildern
    Local $iWidth, $iHeight, $paint, $idExit, $idContext, $idDummy, $hRgn
    Local Static $bDurchlauf = False
    Local Static $iScreenWidthOld, $iScreenHeightOld

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

    ;~ $hImage = _GDIPlus_ImageLoadFromFile($path & "\" & $aFileList[$iCounter])
    $hImg_Bild = _Image_CreateFromFile($path & "\" & $aFileList[$iCounter])

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

    $iWidth = DllStructGetData($hImg_Bild, 1, 2)
    $iHeight = DllStructGetData($hImg_Bild, 1, 3)

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

    ;~ $iHeight = _GDIPlus_ImageGetHeight($hImage)
    ;~ $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iScreenHeight = Int(($iHeight * (@DesktopHeight / $iHeight)) - 40) ; Bild immer an Bildschirmhöhe anpassen minus Taskbar (Win 7, Taskbar unten)
    $iScreenWidth = Int($iWidth * ($iScreenHeight / $iHeight)) ; Anpassung an individuelle Konfiguration folgt

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

    ;ConsoleWrite($iScreenWidth & " X " & $iScreenHeight & @CRLF)
    ;ConsoleWrite($aFileList[$iCounter] & @CRLF)

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

    Switch $bDurchlauf ;==> werden die Grafiken direkt nach Anzeige gelöscht, hat WM_PAINT nichts zum anzeigen, daher in dieser Reihenfolge
    Case False ;==> nur beim ersten Durchlauf ausführen
    WinMove("Show PIC", "", $aPos[0], $aPos[1], $iScreenWidth, $iScreenHeight)

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

    #cs ; Wenn das Menü aktiviert ist, funktioniert das Bewegen des Fensters mit der Maus nicht mehr. Wie gehts richtig???
    $idDummy = GUICtrlCreateLabel("", 0, 0, $iScreenWidth, $iScreenHeight)
    $idContext = GUICtrlCreateContextMenu($idDummy)
    $idExit = GUICtrlCreateMenuItem("Beenden", $idContext)
    GUICtrlSetState($idExit, "_Exit")
    #ce

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

    ;~ $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    ;~ $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iScreenWidth, $iScreenHeight, $hGraphic)
    ;~ $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $bDurchlauf = True
    Case Else ;==> darf beim ersten Durchlauf nicht ausgeführt werden
    Select
    Case $iScreenWidthOld <> $iScreenWidth Or $iScreenHeightOld <> $iScreenHeight ;==> nur ausführen, wenn sich die Bildgröße ändert

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

    ;~ _GDIPlus_GraphicsDispose($hGraphic)
    ;~ _GDIPlus_GraphicsDispose($hBuffer)
    ;~ _GDIPlus_BitmapDispose($hBitmap)
    WinMove("Show PIC", "", $aPos[0], $aPos[1], $iScreenWidth, $iScreenHeight)
    $bNopaint = True

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

    _Image_Delete($hImg_Buffer)
    $hImg_Buffer = _Image_Create($iScreenWidth, $iScreenHeight)
    $hDC_Buffer = DllStructGetData($hImg_Buffer, 1, 1)
    $bNopaint = False
    ;~ $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    ;~ $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iScreenWidth, $iScreenHeight, $hGraphic)
    ;~ $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    EndSelect
    EndSwitch

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

    ;WinMove("Show PIC", "", $aPos[0], $aPos[1], $iScreenWidth, $iScreenHeight)
    ;$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    ;$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iScreenWidth, $iScreenHeight, $hGraphic)
    ;$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    _WinAPI_StretchBlt($hDC_Buffer, 0, 0, $iScreenWidth, $iScreenHeight, DllStructGetData($hImg_Bild, 1, 1), 0, 0, $iWidth, $iHeight, 0xCC0020)
    _WM_PAINT()
    ;~ _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImage, 0, 0, $iScreenWidth, $iScreenHeight)
    ;~ $paint = _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iScreenWidth, $iScreenHeight)
    ;~ If $paint = False Then Beep(1500, 50) ;nur zum debuggen

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

    _Image_Delete($hImg_Bild)
    ;~ _GDIPlus_ImageDispose($hImage)

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

    $iScreenWidthOld = $iScreenWidth
    $iScreenHeightOld = $iScreenHeight
    HotKeySet("{UP}", "_Up")
    HotKeySet("{DOWN}", "_Down")
    EndFunc ;==>_Show

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

    Func _WM_PAINT() ;==> ist das die beste/schnellste Lösung???
    If $bNopaint Then Return
    _WinAPI_BitBlt($hDC_GUI, 0, 0, $iScreenWidth, $iScreenHeight, $hDC_Buffer, 0, 0, 0xCC0020)
    ;~ _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iScreenWidth, $iScreenHeight)
    ConsoleWrite("WM_PAINT: " & $aFileList[$iCounter] & " -> " & $aPos[0] & "/" & $aPos[1] & " -> " & $iScreenHeight & " X " & $iScreenWidth & @CRLF)
    EndFunc ;==>_WM_PAINT

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

    Func _Benchmark()
    Local $begin
    $begin = TimerInit()
    For $i = 1 To $aFileList[0]
    ;0x00780000, 0xFF880000
    _WM_MOUSEWHEEL(Default, Default, 0xFF880000, Default)
    Next
    ConsoleWrite(TimerDiff($begin) / 1000 & @CRLF)
    ;MsgBox(0, "", TimerDiff($begin) / 1000)
    EndFunc ;==>_Benchmark

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

    Func _Down()
    _WM_MOUSEWHEEL(Default, Default, 0xFF880000, Default)
    EndFunc ;==>_Down

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

    Func _Up()
    _WM_MOUSEWHEEL(Default, Default, 0x00780000, Default)
    EndFunc ;==>_Up

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

    Func _WM_MOUSEWHEEL($hWnd, $iMsg, $iWParam, $iLParam)
    ;#forceref $hWnd, $iMsg, $iWParam, $iLParam
    Local $_iWParam
    ConsoleWrite($hWnd & "->" & $iMsg & "->" & $iWParam & "->" & $iLParam & "->>" & BitShift($iWParam, 16) & "->" & $iCounter & @CRLF)
    $_iWParam = BitShift($iWParam, 16) ;mögliche Werte für $iWParam 0x00780000, 0xFF880000

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

    If $_iWParam < 0 Then ; If $iWParam = 0xFF880000 Then
    $iCounter += 1
    If $iCounter > $aFileList[0] Then $iCounter = 1
    Else
    $iCounter -= 1
    If $iCounter < 1 Then $iCounter = $aFileList[0]
    EndIf

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

    ;~ _Show()
    EndFunc ;==>_WM_MOUSEWHEEL

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

    Func _FileListToArrayMultiSelect($dir, $searchlist, $Separator, $iFlag = 0)
    Local $aFileList[1] = [0], $aFileList1, $iN, $Num, $search
    $search = StringSplit($searchlist, $Separator)
    If $search[0] > 0 Then
    For $iN = 1 To $search[0]
    $aFileList1 = _FileListToArray($dir, $search[$iN], $iFlag)
    If Not @error Then
    $Num = UBound($aFileList)
    _ArrayConcatenate($aFileList, $aFileList1)
    $aFileList[0] = $aFileList[0] + $aFileList[$Num]
    _ArrayDelete($aFileList, $Num)
    EndIf
    Next
    EndIf
    Return $aFileList
    EndFunc ;==>_FileListToArrayMultiSelect

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

    Func _WM_ACTIVATE()
    Switch WinActive("Show PIC")
    Case 0
    HotKeySet("{UP}")
    HotKeySet("{DOWN}")
    Case Else
    HotKeySet("{UP}", "_Up")
    HotKeySet("{DOWN}", "_Down")
    EndSwitch
    EndFunc ;==>_WM_ACTIVATE

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) ;==> Fenster mit Maus bewegen
    If BitAND(WinGetState($hWnd), 32) Then Return $GUI_RUNDEFMSG
    DllCall("user32.dll", "long", "SendMessage", "hwnd", $hWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
    $aPos = WinGetPos("Show PIC")
    EndFunc ;==>_WM_LBUTTONDOWN

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

    Func _Exit()
    Local $delete
    _Image_Delete($hImg_Buffer)
    _WinAPI_ReleaseDC($hGUI, $hDC_GUI)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    ;~ If FileExists(@TempDir & "\_temp\") Then
    ;~ $delete = DirRemove(@TempDir & "\_temp\", 1)
    ;~ If $delete = 0 Then MsgBox(16, "Fehler", "Das temporäre Verzeichnis '" & @TempDir & "\_temp\" & "konnte nicht gelöscht werden.")
    ;~ EndIf
    Exit
    EndFunc ;==>_Exit

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

    Func _Image_Create($iW, $iH) ; Flottes DC Image basteln mit GDI+ Puffer
    Local $Ptr, $hDC, $hBmp, $tBMI, $aDIB, $vStruct
    $hDC = _WinAPI_CreateCompatibleDC(0)
    $tBMI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBMI, 'Size', DllStructGetSize($tBMI) - 4)
    DllStructSetData($tBMI, 'Width', $iW)
    DllStructSetData($tBMI, 'Height', -$iH)
    DllStructSetData($tBMI, 'Planes', 1)
    DllStructSetData($tBMI, 'BitCount', 32)
    $aDIB = DllCall('GDI32.DLL', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hBmp = $aDIB[0]
    $Ptr = $aDIB[4]
    _WinAPI_SelectObject($hDC, $hBmp)
    $vStruct = DllStructCreate('int[5]')
    DllStructSetData($vStruct, 1, $hDC, 1)
    DllStructSetData($vStruct, 1, $iW, 2)
    DllStructSetData($vStruct, 1, $iH, 3)
    DllStructSetData($vStruct, 1, $Ptr, 4)
    DllStructSetData($vStruct, 1, $hBmp, 5)
    Return $vStruct
    EndFunc ;==>_Image_Create

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

    Func _Image_CreateFromFile($s) ; DC Image aus Datei
    Local $hBmp = _GDIPlus_ImageLoadFromFile($s)
    Local $vImg = _Image_Create(_GDIPlus_ImageGetWidth($hBmp), _GDIPlus_ImageGetHeight($hBmp))
    Local $hGfx = _GDIPlus_GraphicsCreateFromHDC(DllStructGetData($vImg, 1, 1))
    _GDIPlus_GraphicsDrawImage($hGfx, $hBmp, 0, 0)
    _GDIPlus_GraphicsDispose($hGfx)
    _GDIPlus_ImageDispose($hBmp)
    Return $vImg
    EndFunc ;==>_Image_CreateFromFile

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

    Func _Image_Delete(ByRef $vStruct)
    If Not $vStruct Then Return
    _WinAPI_DeleteObject(DllStructGetData($vStruct, 1, 5))
    _WinAPI_DeleteDC(DllStructGetData($vStruct, 1, 1))
    $vStruct = 0
    EndFunc ;==>_Image_Delete

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

    Func _WinAPI_StretchBlt($hDestDC, $iXDest, $iYDest, $iWidth, $iHeight, $hSrcDC, $iXSrc, $iYSrc, $iWidthSrc, $iHeightSrc, $iROP)
    DllCall('GDI32.DLL', 'int', 'StretchBlt', 'hwnd', $hDestDC, 'int', $iXDest, 'int', $iYDest, 'int', $iWidth, 'int', $iHeight, 'hwnd', $hSrcDC, 'int', $iXSrc, 'int', $iYSrc, 'int', $iWidthSrc, 'int', $iHeightSrc, 'int', $iROP)
    EndFunc ;==>_WinAPI_StretchBlt

    [/autoit]

    lg
    Mars

  • AutoIt Versions-Archiv und Diskussionsthread (3.3.8.1 bis 3.3.10.2, Stand 30.12.13)

    • Mars
    • 11. Juli 2013 um 23:29

    Hab mal einen Geschwindigkeitsvergleich zur 8.1 gemacht:
    [Blockierte Grafik: http://i.imgur.com/YPZrb5W.png]
    Man sieht, dass man nichts sieht...
    64Bit ist im Schnitt bei der 9.6 ca. 10% schneller, bei der 8.1 ca. 15% (Vorteil der 8.1)
    die 9.6 ist auf dem Desktoprechner ne Ecke langsamer, Punkten konnte sie nur auf dem Laptop.
    Natürlich sind diese Ergebnisse nicht ganz objektiv, da ich den Test nur ein paar mal hab durchlaufen lassen, und nur 3 Computer getestet habe.

    Skript
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Compile_Both=y
    #AutoIt3Wrapper_UseX64=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <Array.au3>

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

    Global Const $iAnzFuncs = 7
    Global Const $iRunden = InputBox('Wie viele Durchgänge ?', 'Eine Ganzzahl ab 5, jede Runde dauert einige Sekunden...' & @CRLF & @CRLF & 'Version: ' & '( ' & @AutoItVersion & ' - '& 32 + 32 * @AutoItX64&' Bit )', 10)
    Global $aTest[$iAnzFuncs][2] ; [x][0] = Counter, [x][1] = Gesamtzeit in ms
    Global $nErg

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

    If Not $iRunden Then Exit

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

    For $i = 1 To $iRunden Step 1
    _Test(150)
    ToolTip($i)
    Sleep(800)
    ToolTip('')
    Sleep(200)
    Next

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

    For $i = 0 To $iAnzFuncs - 1 Step 1
    $aTest[$i][1] /= $aTest[$i][0]
    $nErg += $aTest[$i][1]
    Next
    _ArrayDisplay($aTest, @AutoItVersion & ' ' & $nErg)

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

    Func _Test($iAnzahl)
    Local $iRandom
    For $i = 1 To $iAnzahl Step 1
    $iRandom = Random(1, $iAnzFuncs, 1)
    $aTest[$iRandom - 1][0] += 1
    $aTest[$iRandom - 1][1] += Call('_' & $iRandom)
    Next
    EndFunc

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

    Func _1()
    Local $x = TimerInit()
    For $i = 1 To 51000 Step 1
    Next
    Return TimerDiff($x)
    EndFunc

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

    Func _2()
    Local $x = TimerInit()
    Local $a = 0, $b = 1, $c = 2, $d = 3
    For $i = 1 To 620 Step 1
    $a = (($b + $c)/$d)^0.5
    $b = (($c + $d)/$a)^0.5
    $c = (($d + $a)/$b)^0.5
    $d = (($a + $b)/$c)^0.5
    Next
    Return TimerDiff($x)
    EndFunc

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

    Func _3()
    Local $x = TimerInit()
    Local $a
    For $i = 1 To 2600 Step 1
    $a = Random() + Random() + Random() + Random() + Random()
    Next
    Return TimerDiff($x)
    EndFunc

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

    Func _4($a = 0)
    Local $x = TimerInit()
    If $a < 480 Then _4($a + 1)
    Return TimerDiff($x)
    EndFunc

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

    Func _5()
    Local $x = TimerInit()
    Local $z
    While $z < 300
    $z += 1
    WEnd
    Do
    $z -= 1
    Until $z < 1
    For $a = 1 To 6 Step 1
    For $b = 1 To 8 Step 1
    For $c = 1 To 6 Step 1
    For $d = 1 To 8 Step 1
    For $e = 1 To 7 Step 1
    Next
    Next
    Next
    Next
    Next
    Return TimerDiff($x)
    EndFunc

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

    Func _6()
    Local $x = TimerInit()
    Local $x1 = Random(), $x2 = Random(), $w1 = Random(), $w2 = Random(), $y1 = Random(), $y2 = Random(), $h1 = Random(), $h2 = Random(), $z
    For $i = 1 To 360 Step 1
    If IsInt($i/5) Then
    $x1 = Random()
    $x2 = Random()
    $w1 = Random()
    $w2 = Random()
    $y1 = Random()
    $y2 = Random()
    $h1 = Random()
    $h2 = Random()
    EndIf
    $z = $x1 > $x2 And $w1 > $w2 And $y1 > $y2 And $h1 > $h2
    $z = $x1 < $x2 And $w1 < $w2 And $y1 < $y2 And $h1 < $h2
    $z = $x1 <> $x2 Or $w1 <> $w2 Or $y1 <> $y2 Or $h1 <> $h2
    $z = $x1 = $x2 Or $w1 = $w2 Or $y1 = $y2 Or $h1 = $h2
    Next
    Return TimerDiff($x)
    EndFunc

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

    Func _7()
    Local $x = TimerInit()
    Local $a
    For $i = 1 To 420 Step 1
    $a = Round(Random() * 1000, Random(0, 1))
    If IsNumber($a) And IsInt($a) Then
    If IsNumber($a) And IsInt($a) Then
    If IsNumber($a) And IsInt($a) Then
    EndIf
    EndIf
    EndIf
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit]


    könnt ja auch mal ne Vergleichstabelle machen. Vllt auch mit anderen Betas, wenn ihr Lust und Zeit habt.
    lg
    Mars

  • XYZ Farbraum - Darstellungsproblem

    • Mars
    • 8. Juli 2013 um 16:32

    Ich glaub jetzt hab ichs durchblickt.
    Um eine Verlustfreie Umrechnung zu erhalten müsste es eine bijektive Abbildung zwischen dem [0,1]³RGB und [0,1]³XYZ Intervall geben, die beide Intervalle exakt abdeckt. Der XYZ Raum im Intervall [0,1]³ beinhaltet aber Werte die außerhalb des RGB Intervalls liegen. Daher ist [0,1]³XYZ > [0,1]³RGB.

  • n-Body Simulation -> 64-Bit-Assembler + MultiThread + AssembleIt2() Update Benchmark

    • Mars
    • 7. Juli 2013 um 23:41

    Was ich interessant finde ist, dass die ganzen i7er alle nicht überragend sind.
    Dabei sind die je nach Modell schweine teuer.

    Hat nicht zufällig jemand einen i7 Extreme oder sowas mit mehr als 4 Kernen, oder einen AMD mit mehr als 4 Kernen ?

  • XYZ Farbraum - Darstellungsproblem

    • Mars
    • 7. Juli 2013 um 23:30

    Das sieht schon wesentlich besser aus.
    Die ganze Änderung hängt an der Matrixmultiplikation wenn ich das richtig sehe.
    Ab einem relativ hohen Wert von Z (Slider recht weit rechts, so etwa bei 0.916) erscheint bei mir eine gelbgrüne Fläche von unten. Bei Z=0 ist oben links die Farbe Schwarz, bei 0.916 ist unten rechts die Farbe Weiß. Für höhere Z macht die Berechnung also keinen Sinn. Wie kann man alle Z bestimmen, für die die Berechnung bei 0<=x<=1 und 0<=y<=1 Sinn ergibt ?

  • n-Body Simulation -> 64-Bit-Assembler + MultiThread + AssembleIt2() Update Benchmark

    • Mars
    • 7. Juli 2013 um 20:29

    Andy: Auf meinem anderen Rechner läufts tadellos. Sogar relativ flott :)

    Code
    Benchmark n-Body-Simulation
    
    
    Number Particles:		30000
    Processor:		Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz
    Number Processors(Cores):	4
    Number Threads:		4
    Overall Time:		244.76 Seconds
    Number Loops benchmarked:	871
    
    
    Average Interacts/sec:	1.34e+010
    Maximum Interacts/sec:	1.73e+010
    
    
    Average Ticks/Interact:	13.18    CAUTION! Depends on real Clockticks!
    Minimum Ticks/Interact:	11.93    CAUTION! Depends on real Clockticks!
    
    
    Average Clockticks[Mhz]:	3401    CAUTION! Clockticks may NOT match if over/underclocked! Please insert the real Clockticks!
    Maximum Clockticks[Mhz]:	3401    CAUTION! Clockticks may NOT match if over/underclocked! Please insert the real Clockticks!
    
    
    Average Looptime:		273.65 Milliseconds
    Fastest Looptime:		208.54 Milliseconds
    Alles anzeigen

    Mal schauen was passiert wenn man ihn auf 4GHz schraubt :D (mach ich aber jetzt nicht, hab nen schlechten Kühler drauf...)

  • XYZ Farbraum - Darstellungsproblem

    • Mars
    • 6. Juli 2013 um 21:05

    :D

    Ich vermute, dass es irgendwie mit dem Definitionsbereich zu tun hat. Ich denke, dass nur dieses schiefe Viereck in der Mitte relevant ist.
    (also dass alle RGB Farben in dieses Viereck abgebildet werden).
    Sollte das zutreffen: Wie filtere ich relevante Werte heraus ?

  • XYZ Farbraum - Darstellungsproblem

    • Mars
    • 6. Juli 2013 um 20:36

    Moin,
    Das folgende Skript zeigt den XYZ Farbraum in 2 Dimensionen (x,y = 0 -> 100).
    Der Slider verstellt die Z Koordinate.

    Die Darstellung sieht für mich seltsam aus, irgendwas stimmt hier nicht und ich finde den Fehler nicht.
    Man kann in Zeile 48 und 49 durch Auskommentieren zwischen RGB und XYZ umschalten, RGB läuft (wie üblich) Problemlos.

    Skript
    [autoit]

    #include <GDIPlus.au3>

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

    Global Const $iSize = 5 ; Größe der Kacheln in Px
    Global Const $iAnz = 125 ; Anzahl der Kacheln in x, y und z Richtung

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

    Global $hGUI, $hSli, $iZ, $hGFX, $hBRU, $hBUF, $hBMP

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

    $hGUI = GUICreate('XYZ Farbraum', $iSize * $iAnz, $iSize * $iAnz + 25)

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

    $hSli = GUICtrlCreateSlider(0, $iAnz * $iSize, $iSize * $iAnz, 25)
    GUICtrlSetLimit($hSli, 1000, 0)

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

    _GDIPlus_Startup()
    $hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBMP = _GDIPlus_BitmapCreateFromGraphics($iSize * $iAnz, $iSize * $iAnz, $hGFX)
    $hBUF = _GDIPlus_ImageGetGraphicsContext($hBMP)
    $hBRU = _GDIPlus_BrushCreateSolid()

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

    GUIRegisterMsg(0xF, 'WM_PAINT')
    GUISetState(@SW_SHOW)

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

    _ApplyCol(0.9)

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

    While GUIGetMsg() <> -3
    If GUICtrlRead($hSli) <> $iZ Then
    $iZ = GUICtrlRead($hSli)
    _ApplyCol($iZ/1000)
    EndIf
    WEnd

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

    _GDIPlus_GraphicsDispose($hGFX)
    _GDIPlus_BrushDispose($hBRU)
    _GDIPlus_GraphicsDispose($hBUF)
    _GDIPlus_BitmapDispose($hBMP)
    _GDIPlus_Shutdown()

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

    Func WM_PAINT()
    _GDIPlus_GraphicsDrawImage($hGFX, $hBMP, 0, 0)
    EndFunc

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

    Func _ApplyCol($Z = 0)
    Local $t = TimerInit()
    Local $sCol, $iAnzMinus1 = $iAnz - 1, $klX, $klY
    For $x = 0 To $iAnzMinus1 Step 1
    For $y = 0 To $iAnzMinus1 Step 1
    $klX = $x / $iAnzMinus1
    $klY = $y / $iAnzMinus1
    $sCol = _XYZ_to_RGB($klX, $klY, $Z)
    ;~ $sCol = '0xFF' & Hex(Int(Round($klX * 255, 0)),2) & Hex(Int(Round($klY * 255, 0)),2) & Hex(Int(Round($Z * 255, 0)),2)
    DllCall($ghGDIPDll, 'int', 'GdipSetSolidFillColor', 'handle', $hBRU, 'dword', $sCol)
    DllCall($ghGDIPDll, 'int', 'GdipFillRectangleI', 'handle', $hBUF, 'handle', $hBRU, 'int', $x * $iSize, 'int', $y * $iSize, 'int', $iSize, 'int', $iSize)
    Next
    If IsInt($x/3) Then WM_PAINT()
    Next
    WM_PAINT()
    $t = TimerDiff($t)
    ConsoleWrite('Dauer für ' & $iAnz^2 & ' Kacheln: ' & Round($t/1000, 2) & 's' & @TAB & ' Zeit pro Kachel: ' & Round($t /$iAnz^2, 2) & 'ms' & @CRLF)
    EndFunc

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

    ; Von BugFix
    Func _XYZ_to_RGB($iX, $iY, $iZ)
    Local $iR, $iG, $iB
    $iR = ($iX * 3.2406) + ($iY * -1.5372) + ($iZ * -0.4986)
    $iG = ($iX * -0.9689) + ($iY * 1.8758) + ($iZ * 0.0415)
    $iB = ($iX * 0.0557) + ($iY * -0.2040) + ($iZ * 1.0570)
    If $iR > 0.0031308 Then
    $iR = 1.055 * ($iR ^ (1/2.4)) - 0.055
    Else
    $iR *= 12.92
    EndIf
    If $iG > 0.0031308 Then
    $iG = 1.055 * ($iG ^ (1/2.4)) - 0.055
    Else
    $iG *= 12.92
    EndIf
    If $iB > 0.0031308 Then
    $iB = 1.055 * ($iB ^ (1/2.4)) - 0.055
    Else
    $iB *= 12.92
    EndIf
    Return '0xFF' & Hex(Int($iR*255), 2) & Hex(Int($iG*255), 2) & Hex(Int($iB*255), 2)
    EndFunc ;==>_XYZ_to_RGB

    [/autoit]

    lg
    Mars

  • n-Body Simulation -> 64-Bit-Assembler + MultiThread + AssembleIt2() Update Benchmark

    • Mars
    • 6. Juli 2013 um 13:31

    Bei meinem kleinen Rechner (Intel Atom 330) läuft das Programm nicht. (Absturz nach ca. 2sek, Fenster geht zu, Windows Errormeldung)
    Auf meinem Großen konnte ich es noch nicht testen.

    lg
    Mars

  • Sally

    • Mars
    • 6. Juli 2013 um 11:29

    Das Problem am Dialekt ist, dass sich fast jeder der ihn beherrscht was darauf einbildet.
    Hab hier kein Problem mit sporadisch auftretenden Wörtern, mer bleibe amo clean wadde anner Kroam angeit.

    Mich erinnert das immer an Sally aus Police Squad :)

  • YouTube Clip | Bitte um Meinung

    • Mars
    • 4. Juli 2013 um 14:14

    Bei deinem Link erscheint bei mir im Browser Error 403 und 404.
    http://www.limesoft-solutions.com/repo/

    Zitat

    Forbidden

    You don't have permission to access /repo/ on this server.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
    Apache Server at https://autoit.de/www.limesoft-solutions.com Port 80

  • Koordinaten relativ zu einem bestimmten control

    • Mars
    • 30. Juni 2013 um 23:49

    Wenn du relative Koordinaten nutzen willst kannst du auch eine Funktion zur Ctrlerstellung definieren die intern die letzte Position speichert.
    (Nur ein Beispiel, das wird so wenig bringen)

    [autoit]

    Func _GUICtrlCreateButton($sText, $iX, $iY, $iW, $iH, $iStyle = -1, $iExStyle = 0)
    Local Static $xAbs = 0, $yAbs = 0
    $xAbs += $iX
    $yAbs += $iY
    Return GUICtrlCreateButton($sText, $xAbs, $yAbs, $iW, $iH, $iStyle, $iExStyle)
    EndFunc

    [/autoit]

    Damit könntest du jedes Mal relative Koordinaten zum letzten Button angeben. Diese Funktion lässt sich natürlich auf beliebige Ctrls erweitern.

  • Wikipedia-Run

    • Mars
    • 29. Juni 2013 um 11:49
    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>

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

    Opt('GUIOnEventMode', 1)
    $Ziel = _GetZufall()
    $oIE = _IECreateEmbedded()
    $56Form1 = GUICreate("Wikipedia-Run", 622, 445, Default, Default, $WS_OVERLAPPEDWINDOW)
    $56Label1 = GUICtrlCreateLabel("Gelange mit so wenigen Klicks wie möglich von einem Wikipedia-Artikel mit Hilfe der Links zu einem anderen Wikipedia-Artikel. Die Suchfunktion zu benutzen ist natürlich verboten.", 8, 8, 616, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    $56Label2 = GUICtrlCreateLabel("Von:", 8, 32, 26, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    $56Label3 = GUICtrlCreateLabel("Zufällig...", 40, 32, 147, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetFont(-1, 9, 800)
    $56Label4 = GUICtrlCreateLabel("Nach:", 200, 32, 33, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    $56Label5 = GUICtrlCreateLabel("", 240, 32, 165, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetFont(-1, 9, 800)
    GUICtrlSetData(-1, StringReplace($Ziel, "_", " "))
    $56Label6 = GUICtrlCreateLabel("Klicks: 0", 8, 416, 50, 17)
    GUICtrlSetResizing(-1, 64 + 2 + $GUI_DOCKSIZE)
    GUICtrlSetFont(-1, 9, 800)
    $56Button1 = GUICtrlCreateButton("Beenden", 520, 416, 91, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT + $GUI_DOCKSIZE)
    $56Obj1 = GUICtrlCreateObj($oIE, 8, 50, 606, 360)
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    WinMove($56Form1, "", (@DesktopWidth * 0.2) / 2, (@DesktopHeight * 0.2) / 2, @DesktopWidth * 0.8, @DesktopHeight * 0.8)
    GUISetState(@SW_SHOW)
    GUISetOnEvent(-3, 'EVENT', $56Form1)
    GUICtrlSetOnEvent($56Button1, 'EVENT')
    _IENavigate($oIE, "http://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite", 1)
    $PageOpen = TimerInit()
    $Focus = True
    $LastURL = _IEPropertyGet($oIE, "locationurl")
    $PageName = StringRegExp($LastURL, "wiki\/(.*?)\Z", 3)
    GUICtrlSetData($56Label3, StringReplace($PageName[0], "_", " "))
    GUICtrlSetState($56Obj1, $GUI_FOCUS)
    $Klicks = 0

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

    While Sleep(50)
    If $Focus = True Then
    If TimerDiff($PageOpen) >= 900 Then
    GUICtrlSetState($56Obj1, $GUI_FOCUS)
    $Focus = False
    EndIf
    EndIf
    $URL = _IEPropertyGet($oIE, "locationurl")
    If $URL <> $LastURL Then
    $Klicks += 1
    GUICtrlSetData($56Label6, "Klicks: " & $Klicks)
    $PageName = StringRegExp($URL, "wiki\/(.*?)\Z", 3)
    If @error Then
    MsgBox(16, "Toll gemacht... -.-", "Bitte bleibe auf den Artikelseiten von Wikipedia!")
    _IENavigate($oIE, $LastURL)
    $PageOpen = TimerInit()
    $Focus = True
    GUICtrlSetState($56Obj1, $GUI_FOCUS)
    ContinueLoop
    EndIf
    If StringLower($PageName[0]) = StringLower($Ziel) Then
    Sleep(1000)
    If 7 = MsgBox(68, "Wikipedia-Run", "Sehr gut! Du hast es nach " & $Klicks & " Klicks geschafft, das Ziel zu erreichen." & @CRLF & @CRLF & "Nochmal spielen?") Then Exit
    ;Und nochmal
    $Ziel = _GetZufall()
    GUICtrlSetData($56Label5, StringReplace($Ziel, "_", " "))
    $Klicks = -1
    GUICtrlSetData($56Label6, "Klicks: " & $Klicks)
    _IENavigate($oIE, "http://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite", 1)
    $PageOpen = TimerInit()
    $Focus = True
    $LastURL = _IEPropertyGet($oIE, "locationurl")
    $PageName = StringRegExp($LastURL, "wiki\/(.*?)\Z", 3)
    GUICtrlSetData($56Label3, StringReplace($PageName[0], "_", " "))
    GUICtrlSetState($56Obj1, $GUI_FOCUS)
    EndIf
    $LastURL = $URL
    EndIf
    WEnd

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

    Func _GetZufall()
    Local $oIE = _IECreateEmbedded(), $a = GUICreate('Suchen...', 256, 256), $b = GUICtrlCreateObj($oIE, 0, 0, 256, 256)
    GUISetState()
    _IENavigate($oIE, "http://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite", 1)
    Local $Ziel = _IEPropertyGet($oIE, "locationurl")
    GUIDelete($a)
    Return _GetName($Ziel)
    EndFunc ;==>_GetZufall

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

    Func _GetName($sURL)
    Local $a = StringSplit($sURL, '/')
    Return $a[$a[0]]
    EndFunc ;==>_GetName

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

    Func EVENT()
    Switch @GUI_CtrlId
    Case -3, $56Button1
    Exit
    EndSwitch
    EndFunc ;==>EVENT

    [/autoit]

    Ein kleiner Umbau und man kann bei beliebigen Seiten landen.
    Warum das oIE so unglaublich langsam ist weiß ich nicht...

  • Monitor Firefox Fenster

    • Mars
    • 27. Juni 2013 um 17:35

    Ich verweise hiermit auf die Forenregeln
    Das Einloggen mittels PW + Username ist mit AutoIt natürlich möglich.
    Ohne Angaben der Webseiten, oder sonstige Hintergrundinfos wird vom Worst-Case, einem Login-Manager für Internetseiten, deren Anwender davon nicht begeistert sein werden, ausgegangen. Diese Art Software wird hier nicht supportet.

    (Da du schon eine Weile dabei bist handelt es sich hoffentlich um etwas Seriöses, mehr Infos wären nicht schlecht.)

    Edit: Scheint nicht so extrem aufwendig zu sein, warum versuchst du es nicht selbst ?
    Die IE.au3 müsste geeignet sein den Internetexplorer fernzusteuern.

    lg
    M

  • Wikipedia-Run

    • Mars
    • 27. Juni 2013 um 11:57

    Günter Rombold -> Fernsehen = 6 Klicks

    sehr schönes Skript.
    Für die geringe größe nahezu unschlagbar :)

  • und wieder ein neuer

    • Mars
    • 19. Juni 2013 um 14:45

    Sie lieb und fließig und Dir wird fast in allen Belangen geholfen werden.
    Was ist eigentlich dein Ziel mit AutoIt ?
    Mit der Sprache kann man natürlich alles machen, sie ist aber (pur) für manche Sachen (vorallem rechenintensive Aufgaben) weniger gut geeignet. Wenn es ums Automatisieren geht kann man sie natürlich kaum schlagen :P

  • Alles Gute Alina (und der ganze Rest)

    • Mars
    • 19. Juni 2013 um 14:40

    viele liebe Glückwünsche aus dem sonnigen Rheingau :P

  • Der "Neue" :)

    • Mars
    • 17. Juni 2013 um 15:59

    Ich mag Zelda Fans ;)

  • n-body Simulation

    • Mars
    • 10. Juni 2013 um 21:17

    Die GDI+ Version mit aufpolierten Farben und ohne Clearscreen:

    Skript
    [autoit]

    #include <GDIPlus.au3>
    #include <Array.au3>
    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)

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

    ; p = Dichte
    ; PI = 3.1415926536
    ; r = Radius
    ; m = Masse = 4/3*PI*r³*p
    ; d(m) = Durchmesser(Masse) = 2*(3/(4*PI)*(m/p))^(1/3)
    ; G = Gravitationskonstante = 6.67384 * 10^(-11)
    ; F(r) = Anziehungskraft(Abstand) = G*m1*m2/r²

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

    Global Const $VierDrittelPi = ATan(1) * 16 / 3
    Global Const $DreiDurchVierPi = 3 / (ATan(1) * 16)
    Global Const $Gravi = 6.67384 * 10 ^ (-11)

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

    Global $Dichte = 10^10 ; Dichte der Materie (Größer -> Kleinere Partikel) in Kilogramm / m³
    Global $GesamtMasse = 10^13 ; Gesamte Masse in unserem Universum in Kilogramm
    Global $AnzahlPartikel = 20 ; Anzahl Brocken auf die die Masse aufgeteilt wird
    Global $ZentralMasse = 10^9 ; Masse im Zentrum
    Global $iW = 768, $iH = 768, $iD = ($iH ^ 2 + $iW ^ 2) ^ 0.5 ; Größe des Fensters
    Global $aPartikel[$AnzahlPartikel][7], $aBRU[$AnzahlPartikel]

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

    ; [0] - x Koord
    ; [1] - y Koord
    ; [2] - z Koord
    ; [3] - vX
    ; [4] - vY
    ; [5] - vZ
    ; [6] - Masse

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

    _GDIPlus_Startup()

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

    Global $hGUI, $hDC, $hGFX, $hIMG, $hBUF, $hBRU, $hBRU2
    $hGUI = GUICreate('Test', $iW, $iH)
    $hDC = _WinAPI_GetDC($hGUI)
    $hIMG = _Image_Create($iW, $iH)
    $hBUF = DllStructGetData($hIMG, 1, 1)
    $hGFX = _GDIPlus_GraphicsCreateFromHDC($hBUF)
    $hBRU = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $hBRU2 = _GDIPlus_BrushCreateSolid(0x01000000)
    _GDIPlus_GraphicsSetSmoothingMode($hGFX, 4)

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

    _Load()

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

    GUISetOnEvent(-3, 'EVENT', $hGUI)
    OnAutoItExitRegister('_Freigeben')
    GUIRegisterMsg(0xF, 'WM_PAINT')
    GUISetState(@SW_SHOW, $hGUI)

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

    While Sleep(10)
    _Run()
    WEnd

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

    Func _Run()
    Local Static $c = 0
    $c += 1
    _Calc()
    ;~ If IsInt($c/5) Then
    _Draw()
    WM_PAINT()
    ;~ EndIf
    ToolTip('Runde: ' & $c & @CRLF & 'Partikel: ' & $AnzahlPartikel)
    EndFunc ;==>_Run

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

    Func _Calc()
    Local $aTMP
    For $i = $AnzahlPartikel - 1 To 0 Step - 1
    ;~ Sleep(20)
    For $e = 0 To $AnzahlPartikel - 1 Step 1
    _GetVector($i, 0, 0, 0)
    If $i = $e Then ContinueLoop
    _GetVector($i, $e)
    Next
    Next
    For $i = $AnzahlPartikel - 1 To 0 Step - 1
    If $aPartikel[$i][6] = 1 Then
    _ArrayDelete($aPartikel, $i)
    _GDIPlus_BrushDispose($aBRU[$i])
    _ArrayDelete($aBRU, $i)
    $AnzahlPartikel -= 1
    ContinueLoop
    EndIf
    $aPartikel[$i][0] += $aPartikel[$i][3]
    $aPartikel[$i][1] += $aPartikel[$i][4]
    $aPartikel[$i][2] += $aPartikel[$i][5]
    Next
    EndFunc ;==>_Calc

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

    Func _Draw()
    Local $d
    ;~ _GDIPlus_GraphicsFillRect($hGFX, 0, 0, $iW, $iH, $hBRU2)
    For $i = 0 To $AnzahlPartikel - 1 Step 1
    $d = 2 * ($DreiDurchVierPi * $aPartikel[$i][6] / $Dichte)^(1/3)
    DllCall($ghGDIPDll, "int", "GdipFillEllipse", "handle", $hGFX, "handle", $aBRU[$i], "float", $aPartikel[$i][0]-$d/2 + $iW/2, "float", $aPartikel[$i][1]-$d/2 + $iH/2, "float", $d, "float", $d)
    Next
    EndFunc ;==>_Draw

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

    Func _GetVector($i, $e, $y = 1, $z = 1)
    Local $a[3], $L, $F, $d, $mGes
    If $e = 0 And $y = 0 And $z = 0 Then ; Unbewegliches Massezentrum
    $a[0] = $e - $aPartikel[$i][0]
    $a[1] = $y - $aPartikel[$i][1]
    $a[2] = $z - $aPartikel[$i][2]
    $L = ($a[0] ^ 2 + $a[1] ^ 2 + $a[2] ^ 2) ^ 0.5 ; Abstand der Partikel (Betrag des Vektors)
    $F = $Gravi * $aPartikel[$i][6] * $ZentralMasse / $L ^ 3 ; Direkt um L vermindert
    $d = ($DreiDurchVierPi * $aPartikel[$i][6] / $Dichte)^(1/3) + ($DreiDurchVierPi * $ZentralMasse / $Dichte)^(1/3); Durchmesser
    If $L > $iD/32 Then
    For $o = 0 To 2 Step 1
    $aPartikel[$i][$o + 3] += $a[$o] * $F / $aPartikel[$i][6]
    Next
    EndIf
    Else
    For $o = 0 To 2 Step 1
    $a[$o] = $aPartikel[$e][$o] - $aPartikel[$i][$o]
    Next
    $L = ($a[0] ^ 2 + $a[1] ^ 2 + $a[2] ^ 2) ^ 0.5 ; Abstand der Partikel (Betrag des Vektors)
    $F = $Gravi * $aPartikel[$i][6] * $aPartikel[$e][6] / $L ^ 3 ; Direkt um L vermindert
    $d = ($DreiDurchVierPi * $aPartikel[$i][6] / $Dichte)^(1/3) + ($DreiDurchVierPi * $aPartikel[$e][6] / $Dichte)^(1/3); Durchmesser
    If $d > $L Then
    $mGes = $aPartikel[$i][6] + $aPartikel[$e][6]
    For $o = 0 To 2 Step 1
    $aPartikel[$i][$o] = ($aPartikel[$i][$o]*$aPartikel[$i][6] + $aPartikel[$e][$o]*$aPartikel[$e][6])/$mGes
    $aPartikel[$i][$o+3] = ($aPartikel[$i][$o+3]*$aPartikel[$i][6] + $aPartikel[$e][$o+3]*$aPartikel[$e][6])/$mGes
    Next
    $aPartikel[$i][6] = $mGes
    $aPartikel[$e][6] = 1
    Else
    For $o = 0 To 2 Step 1
    $aPartikel[$i][$o + 3] += $a[$o] * $F / $aPartikel[$i][6]
    Next
    EndIf
    EndIf
    EndFunc ;==>_GetVector

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

    Func _Load()
    Local $aTMP
    For $i = 0 To $AnzahlPartikel - 1 Step 1
    $aTMP = _3DRandom(-$iD / 4, $iD / 4)
    $aPartikel[$i][0] = $aTMP[0]
    $aPartikel[$i][1] = $aTMP[1]
    $aPartikel[$i][2] = $aTMP[2]
    $aPartikel[$i][3] = Random(-1, 1)
    $aPartikel[$i][4] = Random(-1, 1)
    $aPartikel[$i][5] = Random(-1, 1)
    $aPartikel[$i][6] = $GesamtMasse / $AnzahlPartikel
    $aTMP = _3DRandom(0, 255) ; Auch für Farben wunderbar geeignet.
    $aBRU[$i] = _GDIPlus_BrushCreateSolid('0xFF' & Hex(Int(Round($aTMP[0],0)),2) & Hex(Int(Round($aTMP[1],0)),2) & Hex(Int(Round($aTMP[2],0)),2))
    Next
    Local $d = 2 * ($DreiDurchVierPi * $ZentralMasse / $Dichte)^(1/3)
    DllCall($ghGDIPDll, "int", "GdipFillEllipse", "handle", $hGFX, "handle", $hBRU, "float", $iW/2-$d/2, "float", $iH/2-$d/2, "float", $d, "float", $d)

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

    EndFunc ;==>_Load

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

    Func _3DRandom($Min, $Max)
    Local $x, $y, $z
    Do
    $x = Random($Min, $Max)
    $y = Random($Min, $Max)
    $z = Random($Min, $Max)
    Until ($x ^ 2 + $y ^ 2 + $z ^ 2) ^ 0.5 < $Max ; Liegt der Vektor in der Sphere ?
    Local $a[3] = [$x, $y, $z]
    Return $a
    EndFunc ;==>_3DRandom

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

    Func WM_PAINT()
    _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hBUF, 0, 0, 0xCC0020)
    EndFunc ;==>WM_PAINT

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

    Func EVENT()
    Switch @GUI_CtrlId
    Case -3
    Exit
    EndSwitch
    EndFunc ;==>EVENT

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

    Func _Freigeben()
    _GDIPlus_BrushDispose($hBRU2)
    For $i = 0 To $AnzahlPartikel - 1 Step 1
    _GDIPlus_BrushDispose($aBRU[$i])
    Next
    _GDIPlus_BrushDispose($hBRU)
    _GDIPlus_GraphicsDispose($hGFX)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _Image_Delete($hIMG)
    _GDIPlus_Shutdown()
    EndFunc ;==>_Freigeben

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

    Func _Image_Create($iW, $iH)
    Local $Ptr, $hDC, $hBmp, $tBMI, $aDIB, $vStruct
    $hDC = _WinAPI_CreateCompatibleDC(0)
    $tBMI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4)
    DllStructSetData($tBMI, "Width", $iW)
    DllStructSetData($tBMI, "Height", -$iH)
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32)
    $aDIB = DllCall('GDI32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hBmp = $aDIB[0]
    $Ptr = $aDIB[4]
    _WinAPI_SelectObject($hDC, $hBmp)
    $vStruct = DllStructCreate('int[5]')
    DllStructSetData($vStruct, 1, $hDC, 1)
    DllStructSetData($vStruct, 1, $iW, 2)
    DllStructSetData($vStruct, 1, $iH, 3)
    DllStructSetData($vStruct, 1, $Ptr, 4)
    DllStructSetData($vStruct, 1, $hBmp, 5)
    Return $vStruct
    EndFunc ;==>_Image_Create

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

    Func _Image_Delete(ByRef $vStruct)
    _WinAPI_DeleteObject(DllStructGetData($vStruct, 1, 5))
    _WinAPI_DeleteDC(DllStructGetData($vStruct, 1, 1))
    $vStruct = 0
    EndFunc ;==>_Image_Delete

    [/autoit]

    (Nicht dass man denkt, das könnte meine Version nicht :P)

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™