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

  • DeskStream 2 Release Candidate 1.8

    • Andy
    • 6. März 2011 um 18:32

    ....ganz bestimmt! :rofl::rofl::rofl::rofl::rofl::rofl:

  • Neon Snake

    • Andy
    • 6. März 2011 um 16:07

    Nice!
    Fehlt nur noch ein Timer/Schlangenlänge/Punktezähler per

    [autoit]

    winsettitle()

    [/autoit]

    und ein Netzwerk-Mehrspielermodus auf einem großen Spielfeld und es ist perfekt 8o

  • DeskStream 2 Release Candidate 1.8

    • Andy
    • 6. März 2011 um 15:58
    Zitat von progandy

    Naja, da kann man ja die Bildschirmtastatur verwenden

    kaum versucht man, die Botkiddies erfolgreich davon zu überzeugen dass es nicht geht, kommt wieder so ein crack daher und verpetzt die versteckten Features :rolleyes:
    Naja, wenigstens hast du nicht das Tastaturkürzel verraten, daran scheitern dann wieder 98,7% :rofl:

  • DeskStream 2 Release Candidate 1.8

    • Andy
    • 6. März 2011 um 15:18
    Zitat

    Denn wer es wirklich nötig hätte, könnte aus dem bestehenden es leicht umschreiben.

    Die die es nötig haben, sind (wie auch unser ehenmaliger Verteidigungsminister) C&P-Künstler, die genau wie dieser eben NICHT "leicht umschreiben" können^^.
    Wzbw...

    BTT: Bugreports und weitere Ideen sind natürlich gerne gesehen^^

  • Array verwenden ohne zu wissen, wieviele Indexnummern benötigt werden?

    • Andy
    • 6. März 2011 um 10:48

    Hi,
    wenn du dein Array am Anfang des Scriptes mit einer unbekannten Anzahl von Werten füllen möchtest, würde ich den umgekehrten Weg gehen.
    Das Array überdimensionieren (z.B. 200000), dann in einer Schleife mit z.B. 87600 Werten füllen, und dann EINMAL ein Redim machen. Das ist wesentlich schneller, als 87600 mal zu ReDim-en.

  • String Vergleich anhand von Ähnlichkeiten

    • Andy
    • 6. März 2011 um 10:16

    Hi,
    ggf bringt dich eine Ähnlichkeitssuche weiter. Bei Strings bietet sich die Levenshtein-Distanz an, um möglichst ähnliche Strings zu finden.
    Hier im Forum wirst du sicher fündig, Bernd hat imho eine dll dazu geschrieben.
    Schau mal hier [ offen ] Strings vergleichen und hier [ gelöst ] Strings vergleichen

  • DeskStream 2 Release Candidate 1.8

    • Andy
    • 5. März 2011 um 22:25

    Gezoomt wird mit dem Mausrad im Clientfenster, dabei wird um die Position des Mauscursers herum zentriert!
    Linke und rechte Mausklicks werden aus dem Clientfenster an den Server weitergereicht.

    Auch wenn schon einige gefragt haben, NEIN, eine Tastaturübertragung egal in welche Richtung wird NICHT implementiert. Wer Interesse und reichlich Kleingeld hat, kann diese bei mir anfragen. Ich behalte mir wie üblich vor, Angebote in welcher Höhe auch immer, abzulehnen.

  • exe decompilen

    • Andy
    • 4. März 2011 um 12:13

    ja, Sourcecode steht in der *.EXE

  • Mathe. Funktionsanalyse - [Funktionen ableiten]

    • Andy
    • 4. März 2011 um 07:16
    Zitat von Jautois

    Mein Skript leitet nun Funktionen ab:

    sehr schön!
    Solltest du nur die Funktionswerte der n-ten Ableitung bei komplexeren Funktionen suchen, bieten sich auch numerische Verfahren an! Weiter so! :thumbup:

  • Mathe. Funktionsanalyse - [Funktionen ableiten]

    • Andy
    • 3. März 2011 um 21:55

    Hi Jautois,
    so ganz ist mir ehrlich gesagt noch nicht klar, wo du im Endeffekt hin willst.
    Soll das ganze eine Art "Formelparser" werden, der ggf fehlende Klammern usw. bemängelt, oder möchtest du einfach nur einen Gleichungslöser?
    Gleichungslöser billig:

    Spoiler anzeigen
    [autoit]

    #include <String.au3>

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

    Do
    $formel_org = InputBox("Funktion y=f(x)", "Bitte die Funktion und die Variable eingeben, z.b f(4)=x^3-2x+4", "f(4)=x^2-3x+5")
    Until Not @error

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

    $a = StringSplit($formel_org, "=", 3) ;splitten vor und hinter =-Zeichen
    $x = _StringBetween($a[0], "(", ")") ;variable (argument) steht in der klammer

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

    $formel = StringReplace(StringStripWS($a[1], 8), "x", "*x") ;ggf *-Zeichen einsetzen vor das x
    $formel = StringReplace($formel, "**", "*") ;ggf doppelte *-Zeichen löschen
    If StringLeft($formel, 1) = "*" Then $formel = StringTrimLeft($formel, 1);ggf führendes *-Zeichen löschen

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

    $formel = StringReplace($formel, "x", $x[0]) ;x durch variable ersetzen

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

    $ergebnis = Execute($formel) ;ausrechnen....
    If @error Then $ergebnis = "nicht feststellbar!" ;....oder auch nicht ^^
    MsgBox(0, "Ergebnis: ", $formel_org & @CRLF & $a[0] & "=" & $ergebnis);ergebnis ausgeben

    [/autoit]
  • eukalyptus ist 32

    • Andy
    • 2. März 2011 um 18:06

    Glücklichen Herzwunsch und alles Gute!
    Mach weiter so und gib uns immer wieder Scripte zum Staunen und Neidischsein^^ :thumbup:

  • Heimserver

    • Andy
    • 27. Februar 2011 um 16:29

    @ hellboy, was meinst du mit "Storage"?
    500 Gig, 5 Terabyte? Völlig egal, da HFS eine Art "Virtuelles Dateisystem" inkl Ordnern einrichtet und darüber auf die Hardware zugreift. Mit jedenfalls reicht es völlig, andererseits habe ich auf allen Rechnern Opera laufen, der hat einen eigenen Webserver (im Browser integriert), incl. sehr simplem Dateiaustausch. Möglichkeiten gibts viele, aber wie schon gesagt, um ein paar Dateien auszutauschen würde ich mir kein NAS oder einen Server in Hardware aufsetzen.
    Welchen Server willst du denn als Privatmann auch nur zu 1% auslasten, wenn du nicht permanent Filesharing betreibst oder sonstwie tonnenweise illegalen Krempel aus dem Netz lädst?

  • Heimserver

    • Andy
    • 27. Februar 2011 um 16:10

    Hi, ich habe supersimpel HFS im Einsatz, ein "Eine-Datei"-Webserver (tatsächlich nur ein Standalone-EXE-File)
    Für Datenaustausch völlig ausreichend und dank Webinterface von jedem Rechner aus anzusprechen, auf dem ein Browser läuft, incl Handys usw.

    Und ehrlich gesagt würde ich mir nicht die Mühe machen, für ein bissl Vorlagen auszutauschen ein NAS oder einen "echten" Server (in Hardware) aufzusetzen. Eine VM tuts da sicher genausogut, >=4GIG an Speicher vorrausgesetzt, da gibts Linux-Server-Systeme fix und fertig vorkonfiguriert als Image...

  • Wegsuche

    • Andy
    • 25. Februar 2011 um 20:18

    *Leiche ausgrab*

    Hi, hab mal gewühlt und eins meiner Chaos-Scripte gefunden, Jauitois fragte gerade in der SB danach....
    Nur, um das Lösungs-Prinzip zu verdeutlichen!
    Die Messageboxen innerhalb der Funktionen sind auskommentiert, schaltet die jeweils 2-3 Zeilen ein, um zu sehen, wie der Algorithmus funktioniert.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    ;Travelling Salesman Problem TSP

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

    $anzahl = 80
    Dim $a[$anzahl] ;anzahl knoten
    Global $x[$anzahl] ;x-koordinate knoten
    Global $y[$anzahl] ;y-koordinate knoten
    Global $abstand[$anzahl][$anzahl] ;abstand Punkt_x zu Punkt_y
    Global $Ameisenmatrix[$anzahl][$anzahl]
    Global $ameisenbackup[$anzahl][$anzahl]
    Dim $kuerzester[$anzahl] ;kürzeste strecke zwischen Punkt_x und allen anderen Punkten
    Dim $nachfolger[$anzahl] ;nächster punkt, der mit dem geringsten Weg zu erreichen ist
    Dim $nachfolgerbackup[$anzahl] ; -1 an alle punkte
    Dim $nachfolgerminimum[$anzahl] ; bisher kleinste strecke
    ;dim $nachfolger_mini[$anzahl]
    ;Global $l ;länge der gesamten strecke

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

    $max_x_gui = 500
    $max_y_gui = 500
    $new = 0 ;wenn 1, dann neue koordinaten, wenn 0, dann koordinaten aus datei
    $minimum = 2.3e22

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

    $hgui = GUICreate("TSP", $max_x_gui + 20, $max_y_gui + 20, 1, 1)
    GUISetState()

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

    ; Zeichnet eine Linie
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hgui)
    $hPen = _GDIPlus_PenCreate()
    $hPen2 = _GDIPlus_PenCreate(0xFFFF0000) ;rot
    $hPen3 = _GDIPlus_PenCreate(0xFF0000FF) ;blau
    If $new Then
    FileDelete("TSP.dat") ;datei enthält die koordinaten
    ;koordinaten
    For $i = 0 To $anzahl - 1
    $x[$i] = Random(1, $max_x_gui, 1)
    $y[$i] = Random(1, $max_y_gui, 1)
    ;_GDIPlus_GraphicsDrawEllipse($hGraphic, $x[$i],$y[$i],5,5, $hPen)
    _GDIPlus_GraphicsDrawString($hGraphic, $i, $x[$i], $y[$i])
    FileWriteLine("TSP.dat", $x[$i] & "," & $y[$i] & @CRLF) ;koordinaten in datei schreiben
    Next
    Else ;koordinaten aus datei lesen
    For $i = 0 To $anzahl - 1
    $line = StringSplit(FileReadLine("TSP.dat", $i + 1), ",", 3)
    $x[$i] = $line[0]
    $y[$i] = $line[1]
    ;_GDIPlus_GraphicsDrawEllipse($hGraphic, $x[$i],$y[$i],5,5, $hPen)
    _GDIPlus_GraphicsDrawString($hGraphic, $i, $x[$i], $y[$i])
    Next

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

    EndIf

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

    ;alle abstände punkt zu punkt festlegen
    For $p1 = 0 To $anzahl - 1
    ;$nachfolger[$p1]=$p1+1
    For $p2 = 0 To $anzahl - 1
    If $p2 = $p1 Then ContinueLoop
    $dx = $x[$p1] - $x[$p2] ;s=punkt z=nächster punkt
    $dy = $y[$p1] - $y[$p2]
    ;_GDIPlus_GraphicsDrawLine ($hGraphic,$x[$s],$y[$s] , $x[$z],$y[$z], $hPen)
    $abstand[$p1][$p2] = Int(Sqrt(($dx * $dx) + ($dy * $dy)))
    Next
    Next
    ;$nachfolger[$anzahl-1]=0
    ;_arraydisplay($nachfolger)

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

    For $i = 0 To $anzahl - 1
    $nachfolgerbackup[$i] = -1 ;füllen, damit beim nachfolger prüfen die 0 nicht standard ist
    Next
    $step = 1
    ;If $anzahl>100 then $step=3
    ;If $anzahl>1000 then $step=5

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

    ;verfahren Nearest-Neighbour-Heuristik
    For $e = 5 To $anzahl - 1 Step $step ;jeden punkt einmal als startpunkt wählen
    ; inkuerzestepunkteinbauen($e)
    randomneighbour($e)
    nearestneighbour($e)
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
    $lang = laenge()
    ;msgbox(0,$lang,0)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $l = ' & $l & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    If $new = 1 And $e = 0 And $anzahl < 10 Then
    $combi = _ArrayPermute($nachfolger, ",")
    _ArrayDisplay($combi)
    $pp = 2.3e12
    For $i = 1 To $combi[0]
    $q = laenge_perm($combi[$i])
    If $q < $pp Then
    ConsoleWrite($combi[$i] & " " & $q & @CRLF)
    $pp = $q ;kürzestes merken
    $k = $i ;combi merken
    EndIf
    Next

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

    MsgBox(0, $pp, "minimum brute = " & $combi[$k])
    EndIf

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

    $lang = tauschen($lang)

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

    $lang1 = $lang
    ;msgbox(0,"kantentauschen los",$lang)
    While 1 ;so lange kanten tauschen und punkte einbauen, bis kürzeste strecke erreicht ist
    $lang = kantentauschen($lang)
    If $lang < $lang1 Then
    $lang1 = $lang
    WinSetTitle($hgui, "", "TSP L=" & $lang & " e=" & $e & " mini=" & $minimum)
    ; msgbox(0,"kürzere gefunden",$lang1)
    Else
    $lang = naherpunktinkanteeinbauen($lang)
    If $lang < $lang1 Then
    $lang1 = $lang
    Else
    ExitLoop
    EndIf
    EndIf
    WEnd
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $l = ' & $lang &" "&$e&" altes mini= "&$minimum&" "&$ltest& @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    If $lang < $minimum Then
    $minimum = $lang
    laenge()
    MsgBox(0, "neues minimum", $minimum, 1)
    Eintragenmatrix(1 / $lang / $lang) ;trägt jede Kante in eine von/nach-Matrix ein
    $nachfolgerminimum = $nachfolger
    Else
    Eintragenmatrix(1 / $lang / $lang) ;trägt jede Kante in eine von/nach-Matrix ein
    EndIf
    ;MsgBox(0, $l, "kürzeste Strecke gefunden!")
    Next
    MsgBox(0, $minimum, "kürzeste Strecke gefunden!")
    _ArrayDisplay($Ameisenmatrix)
    $ameisenbackup = $Ameisenmatrix
    ;kürzester ameisenweg
    $lamg1 = 2.2e22
    ;For $start = 0 To $anzahl - 1
    ;For $i = 0 To $anzahl - 1

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

    For $v = 0 To $anzahl - 1
    $maximum = 0
    For $n = 0 To $anzahl - 1
    If $n = $v Then ContinueLoop
    $kante = $Ameisenmatrix[$v][$n]
    If $kante > $maximum Then
    $maximum = $kante
    $v_max = $v
    $n_max = $n
    ;$nachfolger[$v] = $n
    ;For $t = 0 To $anzahl - 1
    ;$Ameisenmatrix[$v][$n] = 0 ;spalte löschen
    ;Next
    ;
    ;$Ameisenmatrix[$n][$v]=0
    EndIf
    Next
    Next
    $nachfolger[$v_max] = $n_max
    $Ameisenmatrix[$v_max][$n_max] = 0
    ;Next

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

    $lang = laenge()
    ; _ArrayDisplay($nachfolger)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $lang = ' & $lang & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    If $lang < $lang1 Then
    ;MsgBox(0, $lang, "Ameisenweg kürzeste Strecke gefunden! bei startpunkt " & $i)
    $lang1 = $lang

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

    EndIf
    $Ameisenmatrix = $ameisenbackup
    ;Next

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

    MsgBox(0, $lang, "Ameisenweg kürzeste Strecke gefunden! bei startpunkt " & $i)
    $nachfolger = $nachfolgerminimum
    laenge()

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

    ;_ArrayDisplay($Ameisenmatrix)

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

    Func tauschen($lang)
    Local $p, $v, $w
    Do

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

    For $zz = 0 To 1 ;sicherheitsrunden
    ; ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $zz = ' & $zz & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $i = 0
    $flag = 0
    For $z = 0 To $anzahl - 1
    $i = $nachfolger[$i]
    $p = $i
    $v = $nachfolger[$p]
    $w = $nachfolger[$v]
    $k = $nachfolger[$w]
    $u = $nachfolger[$k]
    $t = tauschen2($p, $v, $w, $k, $lang) ;2 punkte tauschen und schauen, ob die strecke kürzer wird

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

    If $t < $lang Then ;wenn die länge nach dem tauschen kleiner ist, dann

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

    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$p], $y[$p], $x[$v], $y[$v], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v], $y[$v], $x[$w], $y[$w], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$w], $y[$w], $x[$k], $y[$k], $hPen3)

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

    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$p], $y[$p], $x[$w], $y[$w], $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v] + 1, $y[$v] + 1, $x[$w] + 1, $y[$w] + 1, $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v], $y[$v], $x[$k], $y[$k], $hPen2)
    ;~ MsgBox(0, "tauschen2", $p & " " & $w & " " & $v & " " & $k & " mit L= "&$t&@crlf& _
    ;~ "ist kleiner als " & @crlf& _
    ;~ $p & " " & $v & " " & $w & " " & $k & " mit L= "&$lang,1)
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
    ;$ltest=laenge()
    $lang = $t
    $flag = 1
    EndIf
    $p = $i
    $v = $nachfolger[$p]
    $w = $nachfolger[$v]
    $k = $nachfolger[$w]
    $u = $nachfolger[$k]

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

    $t = tauschen3links($p, $v, $w, $k, $u, $lang) ;3 punkte tauschen und schauen, ob die strecke kürzer wird
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $t = ' & $t & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    If $t < $lang Then ;wenn die länge nach dem tauschen kleiner ist, dann
    ;vorher
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$p], $y[$p], $x[$v], $y[$v], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v], $y[$v], $x[$w], $y[$w], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$w], $y[$w], $x[$k], $y[$k], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$k], $y[$k], $x[$u], $y[$u], $hPen3)
    ;nachher

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

    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$p], $y[$p], $x[$w], $y[$w], $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$w] + 1, $y[$w] + 1, $x[$k] + 1, $y[$k] + 1, $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$k], $y[$k], $x[$v], $y[$v], $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v], $y[$v], $x[$u], $y[$u], $hPen2)
    ;~ MsgBox(0, "tauschen2links", $p & " " & $w & " " & $k & " " & $v & " " & $u &" mit L= "&$t&@crlf& _
    ;~ "ist kleiner als " & @crlf& _
    ;~ $p & " " & $v & " " & $w & " " & $k & " " & $u &" mit L= "&$lang,1 )
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
    ;$ltest=laenge()

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

    $lang = $t
    $flag = 1
    EndIf
    $p = $i
    $v = $nachfolger[$p]
    $w = $nachfolger[$v]
    $k = $nachfolger[$w]
    $u = $nachfolger[$k]
    $t = tauschen3rechts($p, $v, $w, $k, $u, $lang) ;3 punkte tauschen und schauen, ob die strecke kürzer wird
    If $t < $lang Then ;wenn die länge nach dem tauschen kleiner ist, dann
    ;vorher
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$p], $y[$p], $x[$v], $y[$v], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v], $y[$v], $x[$w], $y[$w], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$w], $y[$w], $x[$k], $y[$k], $hPen3)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$k], $y[$k], $x[$u], $y[$u], $hPen3)
    ;nachher

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

    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$p], $y[$p], $x[$k], $y[$k], $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$k], $y[$k], $x[$v], $y[$v], $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$v] + 1, $y[$v] + 1, $x[$w] + 1, $y[$w] + 1, $hPen2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$w], $y[$w], $x[$u], $y[$u], $hPen2)
    ;~ MsgBox(0, "tauschen3rechts", $p & " " & $k & " " & $v & " " & $w & " " & $u &" mit L= "&$t&@crlf& _
    ;~ "ist kleiner als " & @crlf& _
    ;~ $p & " " & $v & " " & $w & " " & $k &" " & $u &" mit L= "&$lang,1)
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
    ;$ltest=laenge()
    $lang = $t
    $flag = 1
    EndIf
    Next
    Next
    Until $flag = 0
    Return $lang
    EndFunc ;==>tauschen

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

    ;erste Methode
    ;vom ersten Punkt an den jeweils nächsten Punkt mit dem kleinsten Abstand anfahren
    Func laenge()
    Local $l = 0
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
    For $s = 0 To $anzahl - 1
    Local $p = $abstand[$s][$nachfolger[$s]]
    $l += $p
    _GDIPlus_GraphicsDrawString($hGraphic, $s, $x[$s], $y[$s])
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$s], $y[$s], $x[$nachfolger[$s]], $y[$nachfolger[$s]], $hPen)
    Next
    WinSetTitle($hgui, "", "TSP L=" & $l & " e=" & $e & " mini=" & $minimum)
    Return $l
    EndFunc ;==>laenge

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

    Func laenge_perm($array) ;länge aller permutationen
    Local $l = 0
    $liste = StringSplit($array, ",", 3)
    ReDim $liste[$anzahl + 1]
    $liste[$anzahl] = $liste[0]
    For $s = 0 To $anzahl - 1
    Local $p = $abstand[$liste[$s]][$liste[$s + 1]]
    $l += $p
    Next
    Return $l
    EndFunc ;==>laenge_perm

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

    Func tauschen2($p, $v, $w, $k, $h) ;vertauscht die beiden nachfolger und berechnet die neue länge
    ;p = punktnr v=nachfolger von p w=nachfolger von v
    $l1 = $abstand[$p][$v]
    $l3 = $abstand[$w][$k]
    $l_vorher = $l1 + $l3
    $ln1 = $abstand[$p][$w]
    $ln3 = $abstand[$v][$k]
    $l_nachher = $ln1 + $ln3
    If $l_nachher < $l_vorher Then ;wenn getauschte länge kleiner, dann tauschen
    $nachfolger[$v] = $k
    $nachfolger[$w] = $v
    $nachfolger[$p] = $w
    $h = $h - $l_vorher + $l_nachher
    EndIf

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

    Return $h
    EndFunc ;==>tauschen2

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

    Func tauschen3links($p, $v, $w, $k, $u, $h) ;vertauscht die beiden nachfolger und berechnet die neue länge

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

    ;p = punktnr v=nachfolger von p w=nachfolger von v
    $l1 = $abstand[$p][$v]
    $l2 = $abstand[$v][$w]
    $l3 = $abstand[$w][$k]
    $l4 = $abstand[$k][$u]
    $l_vorher = $l1 + $l2 + $l3 + $l4
    $ln1 = $abstand[$p][$w]
    $ln2 = $abstand[$w][$k]
    $ln3 = $abstand[$k][$v]
    $ln4 = $abstand[$v][$u]
    $l_nachher = $ln1 + $ln2 + $ln3 + $ln4
    If $l_nachher < $l_vorher Then ;wenn getauschte länge kleiner, dann tauschen
    $nachfolger[$v] = $u
    $nachfolger[$k] = $v
    $nachfolger[$w] = $k
    $nachfolger[$p] = $w
    $h = $h - $l_vorher + $l_nachher
    EndIf

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

    Return $h
    EndFunc ;==>tauschen3links

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

    Func tauschen3rechts($p, $v, $w, $k, $u, $h) ;vertauscht die beiden nachfolger und berechnet die neue länge
    $l1 = $abstand[$p][$v]
    $l2 = $abstand[$v][$w]
    $l3 = $abstand[$w][$k]
    $l4 = $abstand[$k][$u]
    $l_vorher = $l1 + $l2 + $l3 + $l4
    $ln1 = $abstand[$p][$k]
    $ln2 = $abstand[$k][$v]
    $ln3 = $abstand[$v][$w]
    $ln4 = $abstand[$w][$u]
    $l_nachher = $ln1 + $ln2 + $ln3 + $ln4
    If $l_nachher < $l_vorher Then ;wenn getauschte länge kleiner, dann tauschen
    $nachfolger[$w] = $u
    $nachfolger[$v] = $w
    $nachfolger[$k] = $v
    $nachfolger[$p] = $k
    $h = $h - ($l_vorher - $l_nachher)
    EndIf
    Return $h
    EndFunc ;==>tauschen3rechts

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Ressourcen freigeben
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

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

    Func schnittpunkt($p1, $p2, $p3, $p4) ;schneiden sich die strecken, wird 1 zurückgegeben
    ; if $m1=$m2 then return 0 ;parallel

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

    EndFunc ;==>schnittpunkt

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

    Func kantentauschen($h) ;vertauscht die start- und endpunkte zweier kanten und berechnet die neue länge
    Local $aswap[$anzahl] ;hilfsarray zum tauschen der reihenfolge
    ; _arraydisplay($nachfolger)
    $v = 0

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

    For $kante1 = 0 To $anzahl - 3
    ; ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $kante1 = ' & $kante1 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $p = $v
    $v = $nachfolger[$p]
    $w = $v
    ;msgbox(0,"aussenschleife",$p&" "&$v)
    For $kante2 = $kante1 + 2 To $anzahl - 1
    $w = $nachfolger[$w]
    $k = $nachfolger[$w]

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

    $l_nachher = $abstand[$v][$k] + $abstand[$p][$w]
    $l_vorher = $abstand[$p][$v] + $abstand[$w][$k]

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

    ;if $p=9 and $v=14 Then msgbox(0,$w&" "&$k,$l_vorher&" "&$l_nachher)
    If $l_nachher < $l_vorher Then ;wenn getauschte länge kleiner, dann tauschen
    $aswap[0] = $v
    For $i = 1 To $anzahl ;alle nachfolger speichern in array von v bis w
    $aswap[$i] = $nachfolger[$aswap[$i - 1]]
    If $aswap[$i] = $w Then ExitLoop
    Next
    $nachfolger[$v] = $k
    For $m = $i To 1 Step -1
    $nachfolger[$aswap[$m]] = $aswap[$m - 1]
    Next
    $nachfolger[$p] = $w
    ; _arraydisplay($nachfolger)
    $v1 = $v ;v und w umbenennen
    $v = $w
    $w = $v1
    ;laenge()
    $h = $h - ($l_vorher - $l_nachher)
    EndIf

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

    Next
    Next

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

    Return $h ;neue länge zurückgeben
    EndFunc ;==>kantentauschen

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

    Func naherpunktinkanteeinbauen($h)
    ;return $h
    $v = 0

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

    For $kante1 = 0 To $anzahl - 3
    ; ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $kante1 = ' & $kante1 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $p = $v
    $v = $nachfolger[$p]
    $w = $v
    ;msgbox(0,"aussenschleife",$p&" "&$v)
    For $kante2 = $kante1 + 2 To $anzahl - 2
    $w = $nachfolger[$w]
    $k = $nachfolger[$w]
    $u = $nachfolger[$k] ;wenn ein punkt näher an der kante liegt, dann diesen punkt in die kante einbauen
    If $abstand[$p][$k] + $abstand[$k][$v] + $abstand[$w][$u] < $abstand[$p][$v] + $abstand[$w][$k] + $abstand[$k][$u] Then
    laenge()
    _GDIPlus_GraphicsDrawEllipse($hGraphic, $x[$k], $y[$k], 20, 20, $hPen2)

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

    ;msgbox(0,"naher punkt= "&$k,$p&"--->"&$v)
    $nachfolger[$p] = $k
    $nachfolger[$k] = $v
    $nachfolger[$w] = $u
    $p = $k
    $h = laenge()
    ;msgbox(0,"punkt eingebaut","nf von "&$k&" = "&$nachfolger[$k])
    EndIf

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

    Next
    Next

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

    Return $h
    EndFunc ;==>naherpunktinkanteeinbauen

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

    Func eintragenmatrix($o)
    $von = 0
    For $i = 0 To $anzahl - 1
    $nach = $nachfolger[$von]
    ;if $von<$nach then
    $Ameisenmatrix[$von][$nach] += $o
    ;Else
    ;$Ameisenmatrix[$nach][$von] += $o
    ;endif
    ;$Ameisenmatrix[$nach][$von] += 1
    ;msgbox(0,"von "&$von,"nach "&$nach)
    ;_arraydisplay($Ameisenmatrix)
    $von = $nachfolger[$von]
    ;$Ameisenmatrix[$nach][$]+=1 ;ggf weglassen
    Next
    ; _ArrayDisplay($Ameisenmatrix)
    EndFunc ;==>eintragenmatrix

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

    Func nearestneighbour($e)
    Dim $kuerzester[$anzahl] ;kürzeste strecke zwischen Punkt_x und allen anderen Punkten
    Dim $nachfolger[$anzahl] ;nächster punkt, der mit dem geringsten Weg zu erreichen ist
    $nachfolger = $nachfolgerbackup
    ;Global $l ;länge der gesamten strecke
    $nachfolger[$e] = $e
    $s = $e

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

    ;Array auffüllen und mit der "gierigen" Methode (der näheste mögliche punkt) das nachfolger-array aufbauen
    For $t = 0 To $anzahl - 1 ;punkte nacheinander abarbeiten
    $s = $nachfolger[$s]
    ;MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$s' & @lf & @lf & 'Return:' & @lf & $s) ;### Debug MSGBOX
    $nachfolger[$s] = $e ;erster punkt= letzter punkt
    ; _arraydisplay($nachfolger)
    $kuerzester[$s] = Int(Sqrt($max_x_gui ^ 2 + $max_y_gui ^ 2)) ;maximal mögliche Strecke = diagonale der gui
    For $z = 0 To $anzahl - 1 ;abstände vom punkt zu allen möglichen anderen punkten bestimmen
    If $z = $e Then ContinueLoop ;punkt kann nicht den abstand zu sich selbst bestimmen
    If $abstand[$s][$z] <= $kuerzester[$s] Then ;falls es einen kleineren abstand zw 2 punkten gibt, dann
    For $r = 0 To $anzahl - 1 ;alle bisherigen nachfolger prüfen
    If $nachfolger[$r] = $z Then ContinueLoop 2
    Next
    $kuerzester[$s] = $abstand[$s][$z] ;diesen abstand merken
    $nachfolger[$s] = $z ;punkt, welcher am nächsten zum untersuchten punkt liegt
    EndIf
    Next
    Next
    EndFunc ;==>nearestneighbour

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

    Func randomneighbour($e) ;mit einem punkt starten, zufällig den nächsten bestimmen, die kürzeste strecke bestimmen, den nächsten zufälligen punkt einbauen usw
    $restanzahl = $anzahl
    Dim $rest[$anzahl] ;array für die punkte, die noch nicht abgearbeitet sind
    For $i = 0 To $anzahl - 1 ;restarray füllen mit allen punkten
    $rest[$i] = $i
    Next
    _ArrayDelete($rest, $e) ;$e aus dem array löschen
    ;_ArrayDisplay($rest)
    $t = $e
    While 1 ;solange, bis keine zahl übrig bleibt
    $restanzahl = UBound($rest) - 1 ;restliche anzahl
    If $restanzahl = 0 Then ExitLoop ;keine zahl mehr übrig
    $naechster = Random(0, $restanzahl, 1) ;nächste zahl
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $naechster = ' & $naechster & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $nachfolger[$t] = $rest[$naechster] ;aus dem restarray herausholen
    $t = $rest[$naechster]
    ; _arraydisplay($nachfolger)
    For $i = 0 To $restanzahl
    If $rest[$i] = $t Then
    _ArrayDelete($rest, $i)
    ExitLoop
    EndIf
    Next
    ;_arraydisplay($rest)

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

    WEnd
    $nachfolger[$t] = $rest[0]
    $nachfolger[$rest[0]] = $e
    ;msgbox(0,0,0)
    ;_arraydisplay($nachfolger)
    EndFunc ;==>randomneighbour

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

    Func inkuerzestepunkteinbauen($e)
    ;while 1 ;so lange, bis alle punkte verbaut sind
    If $e < 6 Then ;5 punkte ermitteln und verbinden
    ;$restanzahl=$e
    Dim $rest[$anzahl] ;array für die punkte, die noch nicht abgearbeitet sind
    For $i = 0 To $anzahl - 1 ;restarray füllen mit allen punkten
    $rest[$i] = $i
    Next
    _ArrayDelete($rest, $e) ;$e aus dem array löschen
    ;_ArrayDisplay($rest)
    $t = $e
    While 1 ;solange, bis keine zahl übrig bleibt
    $restanzahl = UBound($rest) - 1 ;restliche anzahl
    If $restanzahl = 0 Then ExitLoop ;keine zahl mehr übrig
    $naechster = Random(0, $restanzahl, 1) ;nächste zahl
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $naechster = ' & $naechster & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $nachfolger[$t] = $rest[$naechster] ;aus dem restarray herausholen
    $t = $rest[$naechster]
    ; _arraydisplay($nachfolger)
    For $i = 0 To $restanzahl
    If $rest[$i] = $t Then
    _ArrayDelete($rest, $i)
    ExitLoop
    EndIf
    Next
    ;_arraydisplay($rest)

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

    WEnd
    $nachfolger[$t] = $rest[0]
    $nachfolger[$rest[0]] = $e
    EndIf
    $lang1 = laenge()
    $lang = tauschen($lang1)

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

    MsgBox(0, 0, 0)
    ;_arraydisplay($nachfolger)
    EndFunc ;==>inkuerzestepunkteinbauen

    [/autoit]


    Habe noch einige mehr Optimierungsfunktionen (die letzte Version hat >50kB) , aber ggf gibts ja doch noch nen µ-It^^

    Übrigens habe ich mit diesem Script einige der Karten von HIER durchlaufen lassen....
    Wer übrigens etwas seltsam guckt, weil er nicht versteht, was das mit "Ameisen" zu tun hat....GidF.de :rofl:

  • Netzwerk Tunnel

    • Andy
    • 25. Februar 2011 um 19:55
    Zitat

    /edit: mann bin ich dumm VPN braucht auch offene ports -.-

    Ich glaube nicht, dass du "dumm" bist, nur weil du einige Sachen nicht weisst....Dumm ist einer, der davon weiss und es trotzdem nicht anwendet:D

    Zitat

    was macht dann eigentlich die named pipe funktion die oben genannt wurde ?

    schau mal, was

    [autoit]

    _NamedPipes_ConnectNamedPipe()

    [/autoit]

    macht....
    Alles derselbe Schmodder! Irgendwo sitzt ein Anbieter und bietet Dienste an, und diese Dienste müssen (in diesem Fall dem Router) mitgeteilt, d.h. freigegeben werden!

  • 7zip UND rar entpacken.

    • Andy
    • 25. Februar 2011 um 14:47

    Schau mal, was

    [autoit]

    FileRead()

    [/autoit]

    macht...

  • Webcam Livestream

    • Andy
    • 25. Februar 2011 um 14:09
    Zitat

    2 Sekunden Video aufnehmen (in einen Buffer) versenden.

    geht nur dann, wenn du reichlich Bandbreite zur Verfügung hast, um auch mal lost frames (wären dann 2 Sekunden^^) aufzufangen bzw auszugleichen.
    Wenn man vom einfachsten Videostream ~ 3 MBit mit MPEG2 ausgeht, wird es auf einer 10MBit-Leitung schon eng. Datenmüll empfangen, Paket nochmal anfordern und nochmal gesendet bekommen frisst bei nur einem einzigen Fehler sofort den gesamten Puffer von 2 Sekunden auf!
    Video-Streamen würde ich daher mit einem dafür ausgelegten Programm, den Datenstrom in kleine Bröckchen zu packen und "zu Fuss" per AutoIt zu verschicken halte ich für suboptimal.

    Im DeskStream haben Sprenger120 und ich uns am streamen eines Desktops versucht, für "normale" Fensteranwendungen gibts da keinerlei Probleme mit der Geschwindigkeit im Fullscreen, aber bei Video (große aufeinanderfolgende, stark unterschiedliche Bilddaten) wirds kritisch. Und zwar haben wir dort nur die Differenzen zum vorhergehenden Frame gepackt, komprimiert und versendet. Frame für Frame....

    Im 100MBit-internen Netz werden auch Videos bei erträglichen Frameraten mit Grössen von 500x400 Pixel übertragen, ohne Ton natürlich.
    Im 10MBit-Netz (etwa Internetgeschwindigkeit) sind bei Videogrössen ab 300x200 Pixeln noch 25FPS machbar, bei doppelt so grossen Videos sinkt entsprechend die Framerate
    Aber das halte ich für die Gegebenheiten, 350 Zeilen Code für Client und Server, schon völlig in Ordnung! Aber kein Vergleich zu einer professionellen Videostreaming-Software, welche natürlich auch mit völlig anderm Hintergrund arbeitet. Stream <> Stream^^

  • Schnellster Perlin-Noise Generator

    • Andy
    • 24. Februar 2011 um 21:29
    Zitat

    Im Prinzip würde ich das viel lieber nur mit GDI-Funcs bauen.

    So scheiden sich die Geister^^, ich würde viel lieber den Hintern hochbekommen und fit für den OpenGL-Kram werden...
    Dann ist es niucht mehr weit zu OpenCl, da sehe ich echtes Potenzial. Die Grafikkarten heutzutage sind derart brutal schnell durch massives Parallelisieren (wenn es der Algorithmus her gibt), da gewinnt ein Desktop-Prozessor nicht mal nen Blumenpott....

    Zitat

    Ich wollte das so aufbauen: *snip*

    Im Endeffekt braucht man die Kacheln nicht, in der kleinsten Version ist eine Kachel = ein Pixel! Wenn es ganz hart wird, ist jede Kachel 2x2 Pixel gross und man lässt anschliessend einen Filter drüberlaufen^^
    Eigentlich hängt es "nur" an der Höhenkarte, ob eine mehr oder weniger realistische Landschaft erzeugt wird, den "Höhen" dann Farben zuzuordnen ist dann wieder eine andere Sache.
    Die Beleuchtung bzw Schatten sind viel komplizierter, spätestens dann kommt man um einen Raytracer nicht mehr drumrum.
    Der "wandert" dann Pixel für Pixel vom aktuellen Pixel aus in Richtung "Sonne" und schaut auf diesem Weg (Linie) nach, ob das Pixel auf der Linie "höher" ist als die aktuelle Höhe des Pixels auf der Linie (urghs^^, muss mal ne Zeichnung machen^^)

  • GOTO Befehl ... Warum Böse?

    • Andy
    • 24. Februar 2011 um 21:11

    zunächst OT :D

    Zitat von Oscar

    Man programmiert viel hardwarenäher und die Sprünge sind meist nicht sehr "weit".

    Hehe, genau! Far Jumps und near Jumps, die übrigens heute noch ihre Berechtigung haben!

    Zitat von peethebee

    An eine beliebige Stelle springen zu können, hat z.B. auch große Nachteile bei der automatischen Optimierung des Assembler-Codes, den ein Compiler erzeugt

    Das ist eine der grossen Vorteile der Optimierungen "richtig" schneller Compiler, die erzeugen nämlich (abhängig von der Hardware) keine "direkten" Sprünge an eine Adresse, sondern springen z.B. XXX Bytes im Code zurück und "zwingen" so die branch-prediction-Unit im Prozessor, da (je nach Prozessor) der eine oder andere Fall als "wahrscheinlicher" angesehen und somit schneller ausgeführt wird. Aber dieser Code ist überhaupt nicht mehr nachzuvollziehen, wird daher noch gerne und oft von Virenprogrammierern verwendet, genau wie mittlerweile von sämtlichen Compilerherstellern verpönter selbstmodifizierender Code.
    Übrigens fasse ich

    Zitat

    Assembler-Code braucht deshalb für die meisten Programmierer noch mehr Kommentare (Andy macht sie glaube ich zeilenweise )

    als Kompliment auf :thumbup:, aber unter uns Klosterschwestern, ich spreche JEDEM Programmierer ab, nach Jahren seinen Code ohne Kommentare schneller verstehen zu können als mit Kommentaren, unabhängig von der Programmiersprache :D
    *whispermode ON* ....habe hier viele Kilobytes Assemblercode ohne einen einzigen Kommentar, aber der wird wohl nie "veröffentlicht" ;) ...*whispermode OFF*
    Wobei natürlich infolge fortschreitendem Alter und somit immer heftigeren Alzheimer-Anfällen die Kommentare die "Krücke" sind, welche auch beim körperlichen Verfall ab und zu hilfreich ist :whistling:

    Nun BTT :D
    GOTO, ick liebe Dir! :rock:
    Hach war das schön, da hat einer deinen Programmcode geklaut und du hast es gemerkt und musstest nur 1-2 GOTOS umbiegen, um den kompletten Code unbrauchbar zu machen X(

    Zitat von Oscar

    Man musste Zeilennummern anspringen. Wenn man nachträglich einen Befehl einfügte, musste man von Hand alle GOTOs entsprechend anpassen. Grausam!

    Du NOOB! :D Zeilennummern im ersten Programmierdurchgang in 10er Schritten, wenn dann was eingefügt werden musste hat man in die 5er Zeilennummern eingefügt, und ganz zum Schluss hat man dann die Einer-(Zeilennummern) ausgefüllt. :rofl:
    Und wenn dann immer noch einige Zeilen gefehlt haben, konnte man dank GOTO über den kompletten restlichen Code zweihundert Zeilen nach vorne springen und dort weitermachen :rock:

    Jetzt ohne Witz, die ersten kommerziellen BASIC-Programme waren die, welche bestehende BASIC-Programme an 10er-Zeilennummern ausgerichtet hatten, und natürlich sämtliche GOTOs anpassten!

    A propos Spaghetticode, für den braucht man kein GOTO, das schaff ich auch ohne :D (und SEHR viele andere auch)....


    Zitat von progandy

    Ich möchte wissen, wer so einen Schwachsinn erfunden hat.

    Die Typen sitzen heute auf 60m langen Yachten in der Südsee und lassen sich den Wanst kraulen :D
    Aber mal im Ernst, setz dich an einen 80x25 Zeichen Monochrom-Monitor, angeschlossen an einen 8-Bit-Rechner mit einer Handvoll Bytes Arbeitsspeicher. Die Programme werden auf Magnetbändern gespeichert und du verdienst als 08/15 Programmierer JEDEN TAG 1000€ Netto damit, Programme für eine Versicherung, Bank usw zu schreiben. Und du bist heilfroh, endlich mit einem GOTO zu Zeilennummern in deinem Programm zu springen, statt für Sprünge die Bytes der Opcodes zu zählen ;)

  • Schnellster Perlin-Noise Generator

    • Andy
    • 23. Februar 2011 um 21:26

    Ich merk schon, hier geht was^^
    Eine 3d-(Render)-Engine zu schreiben ist wahrscheinlich garnicht das grosse Problem, in einigen 4k-Demos wurde das in 200-300 Byte realisiert...Ich hatte einen einfachen Raytracer mal in AutoIt geschrieben, der war, ausser dass er sehr kompakt war, schnarchlangsam^^. Und die 3d-"Modelle" waren auch nicht von der Stange....

    In Assembler fehlt mir da zzt bissl der Antrieb und viel mehr noch der Background. Da haben es die OpenGL (und Konsorten)-Jungs und Mädels natürlich viel besser, Funktion aufrufen, fertig! Die eigentliche Arbeit macht dann die Grafikkarte.

    Zitat

    Ich arbeite lieber direkt in einer Bitmap, das hat sich als schneller herausgestellt.

    hehe, so siehts aus, da hat man eine einfache Reihe hintereinanderliegender dwords und kann(muss) sich was einfallen lassen^^

    Ich habe mein Landschaft-Script mal testweise dahingehend abgeändert, dass die "senkrechten Linien" nur noch aus den 3 "obersten" aufeinandergestapelten Pixeln bestehen, nicht mehr aus dem kompletten "Pfeiler".
    Also einfach so

    [autoit]

    _GDIPlus_GraphicsDrawLine($hGraphic, $iwidth + $w, 150 + $h / 4-$high+3, $iwidth + $w, 150 + $h / 4 - $high, $hPen)

    [/autoit]


    Das hat eigentlich einwandfrei funktioniert, allerdings natürlich nur, wenn keine "steilen" Übergänge entstehen.

    In asm sollte es kein Thema sein, aus der Perlin-Höhenkarte das komplette 3D-Bild in einigen Millisekunden zu erstellen. Die üblichen 3d-Funktionen wie bspw. rotieren, zoomen usw. wären dazu noch einigermassen billig, aber für Beleuchtung, Schatten, Nebel usw. wirds dann schon aufwendiger. Da haben dann die c++-er wesentlich bessere Karten, denn dafür gibts schon fix-und fertige Funktionen!

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™