Hi
Domain coloring: http://en.wikipedia.org/wiki/Domain_coloring
Beispiel Wikipedia: http://en.wikipedia.org/wiki/File:Comp…in-z-,1024-.jpg
Die Codes zur Berechnung hab ich ua von hier http://mathematica.stackexchange.com/questions/7275…n-coloring-plot
Beispiele:
autoit.de/wcf/attachment/17817/ autoit.de/wcf/attachment/17822/ autoit.de/wcf/attachment/17827/ autoit.de/wcf/attachment/17832/ autoit.de/wcf/attachment/17837/ autoit.de/wcf/attachment/17842/
Das Script läuft nur im 32Bit-Modus.
Die ASM-Codes sind noch nicht ganz optimiert, aber es funktioniert schon ganz gut.
Wer die ASM.au3 verwenden will, benötigt noch AssembleIt.au3, FASM.au3 und MemoryDll.au3 (im Forum zu finden)
Um ein neues Bild zu generieren, einfach in das Fenster klicken.
(Die Parameter werden zufällig gewählt.
Evtl.mach ich auch noch eine Version, wo der User diese eingeben kann...)
Hier das fertige Script:
Spoiler anzeigen
;#include "ASM.au3"
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1)
Global $t_ASM_CalcRangeValues = DllStructCreate("byte[106]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_CalcRangeValues, 1, "0x8B7C24048B7424108B44240889068B44240C894604660F107E08660F107618BA000000008B5C24080FAFDAB90000000089D801C86BC010660F106E18660F6EE9F30FE6ED660F6EE2F30FE6E4660FC6EC44660F5CEE660F59EF660F112C07413B0E72CD423B560472BBC3") ;write opcodes into memory
Global $t_ASM_Calc_Color = DllStructCreate("byte[609]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_Color, 1, "0x9BDBE38B7C24048B7424088B4C240C8B5424109BD97A489BDBE266C7424A6307D96A4ADD42184989CB6BDB10DD441E08DD041ED9F3DD4250DEE9D9E49BDFE09B9E7311D9E59BDFE09B9E7204D8C1EBEADDD8D9EED8F1DD4238DEC9DD1AD9E8660F103C1E660F59FF660F70F7EE660F58FE660F51FF660F117A08DD4208D8CAD9FED9E1DD5208DD4220DD041ED8CCD9FEDD441E08D8CDD9FEDEC9D9E1D9E49BDFE09B9E7412D9F1D9C0D9FCDCE9D9C9D9F0D9E8DEC1D9FDDDD9DD4228DD4230D9E8D8E4D8E3D8C8D8C2D9FAD9E8D8E5D8C4D8C1D8CADDDBDDD8DDD8DC52409BDFE09E7606DDD8D9E8EB0DD9E49BDFE09B9E7304DDD8D9EEDD5A10DC52409BDFE09B9E7606DDD8D9E8EB0DD9E49BDFE09B9E7304DDD8D9EE660F103ADD02D9FCDD1ADED9DDD8660F1032660F5CFEB801000000660F6EC0F30FE6C0660F106A08660F106210660F28D0660F5CD7660F59D5660F28D8660F5CDA660F59DC660F28CD660F59CF660F28D0660F5CD1660F59D4660F5CC5660F59C4F20FE6F6660F7EF083F800770E660F28FC660F28F3660F28E8EB5883F801770E660F28FA660F28F4660F28E8EB4583F802770E660F28F8660F28F4660F28EBEB3283F803770E660F28F8660F28F2660F28ECEB1F83F804770E660F28FB660F28F0660F28ECEB0C660F28FC660F28F0660F28EAB8FF000000660F6EC0660F6EC8F30FE6C0660F59F8660F59F0660F59E8660F6FD9660F72F318F20FE6FF660FDBF9660F6FD7660F72F210660FEBDAF20FE6F6660FDBF1660F6FD6660F72F208660FEBDAF20FE6ED660FDBE9660FEBDD89CB6BDB04660F7E1C1F83F9000F85CCFDFFFF9BDBE2D96A48C3") ;write opcodes into memory
Global $t_ASM_Calc_CLog = DllStructCreate("byte[75]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CLog, 1, "0x9BDBE38B7C24048B4C24088B74240C4989CB6BDB10D9EDDD041FD8C8DD441F08D8C8DEC1D9FAD9F1DD441F08DD041FD9F3DC169BDFE09E7605DD4608DEE9DD5C1F08DD1C1F83F90075C5C3") ;write opcodes into memory
Global $t_ASM_Calc_CSQRT = DllStructCreate("byte[115]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CSQRT, 1, "0x8B7C24048B4C24088B74240C660F1006660F104E10660F57D24989CB6BDB10660F103C1F660F28F7660F59F6660F70EEEE660F58F5660F51F6660F70F644660F70EF44660F59E8660F58F5660F59F1660F51F6660FC2FA01660F50F7F7C6020000007404660F59F0660F11341F83F90075A7C3") ;write opcodes into memory
Global $t_ASM_Calc_CSin = DllStructCreate("byte[117]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CSin, 1, "0x8B7C24048B4C24088B74240C4989CB6BDB10DD441F08D9EADEC9D9C0D9FCDCE9D9C9D9F0D9E8DEC1D9FDDDD9D9EEDD441F08DEE9D9EADEC9D9C0D9FCDCE9D9C9D9F0D9E8DEC1D9FDDDD9D9C1D9C1DEE9DD06DEC9DD041FD9FFDEC9DD5C1F08DEC1DD06DEC9DD041FD9FEDEC9DD1C1F83F9007598C3") ;write opcodes into memory
Global $t_ASM_Calc_CCos = DllStructCreate("byte[117]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CCos, 1, "0x8B7C24048B4C24088B74240C4989CB6BDB10DD441F08D9EADEC9D9C0D9FCDCE9D9C9D9F0D9E8DEC1D9FDDDD9D9EEDD441F08DEE9D9EADEC9D9C0D9FCDCE9D9C9D9F0D9E8DEC1D9FDDDD9D9C1D9C1DEE9DD06DEC9DD041FD9FEDEC9DD5C1F08DEC1DD06DEC9DD041FD9FFDEC9DD1C1F83F9007598C3") ;write opcodes into memory
Global $t_ASM_Calc_CTan = DllStructCreate("byte[134]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CTan, 1, "0x8B7C24048B4C24088B74240C8B542410660F1006B801000000660F6EC8F30FE6C9660F70C9444989CB6BDB10660F103C1A660F28F7660F59F6660F70EEEE660F58F5660F70F644660F28E9660F5EEE660F10341E660F70E74E660F59FE660F59F4660F70E74E660F5CFC660F70E64E660F5CF4660F14FE660F59FD660F113C1F83F90075A1C3") ;write opcodes into memory
Global $t_ASM_Calc_CExp = DllStructCreate("byte[70]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CExp, 1, "0x8B7C24048B4C24084989CB6BDB10DD041FD9EADEC9D9C0D9FCDCE9D9C9D9F0D9E8DEC1D9FDDDD9D9C0DD441F08D9FFDEC9DD1C1FDD441F08D9FEDEC9DD5C1F0883F90075C3C3") ;write opcodes into memory
Global $t_ASM_Calc_CPow = DllStructCreate("byte[42]") ;reserve Memory for opcodes
DllStructSetData($t_ASM_Calc_CPow, 1, "0x8B7C24048B4C24088B74240C660F10064989CB6BDB10660F100C1F660F59C8660F110C1F83F90075E7C3") ;write opcodes into memory
Global Const $cPI = ATan(1) * 4
Global Const $c2PI = $cPI * 2
Global Const $cPI2 = $cPI / 2
Global Const $cDegToRad = $cPI / 180
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $iWidth = 600
Global $iHeight = 600
Global $hGui = GUICreate("Click to create new image", $iWidth, $iHeight)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_New")
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
Global $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
Global $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
_GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer, 2)
_GDIPlus_GraphicsClear($hGfxBuffer, 0xFF000000)
GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUIRegisterMsg($WM_ERASEBKGND, "WM_PAINT")
GUISetState(@SW_SHOW, $hGui)
[/autoit] [autoit][/autoit] [autoit]Global $hImage
Global $aInfo
_New()
While Sleep(10)
WEnd
Func _New()
_GDIPlus_ImageDispose($hImage)
Local $iAlgo1 = Random(0, 10, 1)
Local $iAlgo2 = Random(0, 10, 1)
Local $iAlgo3 = Random(0, 10, 1)
Local $iR = Random(1, 24, 1)
Local $fColorOff = Random(0, 360)
Local $fVal1 = Random(0, 3)
Local $fVal2 = Random(0, 0.1)
$hImage = _CreateImage($iWidth, $iHeight, $iAlgo1, $iAlgo2, $iAlgo3, $iR, $iR, 0.5, 0.5, $fColorOff, $fVal1, $fVal2)
_GDIPlus_GraphicsDrawImageRect($hGfxBuffer, $hImage, 0, 0, $iWidth, $iHeight)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
EndFunc ;==>_New
Func _CreateImage($iW, $iH, $iAlgo1 = 0, $iAlgo2 = 0, $iAlgo3 = 0, $fRangeX = 6, $fRangeY = 6, $fXOff = 0.5, $fYOff = 0.5, $fColorOff = 0, $fVal1 = 0.3, $fVal2 = 0.01)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iW, "int", $iH, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
If @error Or Not IsArray($aResult) Then Return SetError(1, 1, False)
Local $hBitmap = $aResult[6]
Local $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iW, $iH, $GDIP_ILMWRITE, $GDIP_PXF32ARGB)
Local $iStride = DllStructGetData($tData, "Stride")
Local $iBmpW = DllStructGetData($tData, "Width")
Local $iBmpH = DllStructGetData($tData, "Height")
Local $pScan0 = DllStructGetData($tData, "Scan0")
Local $tComplex = DllStructCreate("double[" & $iBmpW * $iBmpH * 2 & "];")
Local $pComplex = DllStructGetPtr($tComplex)
Local $iW1 = $iW - 1
Local $iH1 = $iH - 1
Local $fRngX = $fRangeX / $iW1
Local $fRngY = $fRangeY / $iH1
$fXOff *= $iW1
$fYOff *= $iH1
Local $tVar = DllStructCreate("uint W; uint H; double RangeX; double RangeY; double XOff; double YOff;")
DllStructSetData($tVar, "RangeX", $fRngX)
DllStructSetData($tVar, "RangeY", $fRngY)
DllStructSetData($tVar, "XOff", $fXOff)
DllStructSetData($tVar, "YOff", $fYOff)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_CalcRangeValues), "ptr", $pComplex, "uint", $iW, "uint", $iH, "ptr", DllStructGetPtr($tVar))
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_CalcRangeValues", "ptr", $pComplex, "uint", $iW, "uint", $iH, "ptr", DllStructGetPtr($tVar))
$tVar = 0
Switch $iAlgo1
Case 1
_Algo_Sqrt($pComplex, $iBmpW * $iBmpH)
Case 2
_Algo_Log($pComplex, $iBmpW * $iBmpH)
Case 3
_Algo_Sin($pComplex, $iBmpW * $iBmpH)
Case 4
_Algo_Cos($pComplex, $iBmpW * $iBmpH)
Case 5
_Algo_Tan($pComplex, $iBmpW * $iBmpH)
Case 6
_Algo_Exp($pComplex, $iBmpW * $iBmpH)
Case 7
_Algo_Pow($pComplex, $iBmpW * $iBmpH, 2)
EndSwitch
Switch $iAlgo2
Case 1
_Algo_Sqrt($pComplex, $iBmpW * $iBmpH)
Case 2
_Algo_Log($pComplex, $iBmpW * $iBmpH)
Case 3
_Algo_Sin($pComplex, $iBmpW * $iBmpH)
Case 4
_Algo_Cos($pComplex, $iBmpW * $iBmpH)
Case 5
_Algo_Tan($pComplex, $iBmpW * $iBmpH)
Case 6
_Algo_Exp($pComplex, $iBmpW * $iBmpH)
Case 7
_Algo_Pow($pComplex, $iBmpW * $iBmpH, 2)
EndSwitch
Switch $iAlgo3
Case 1
_Algo_Sqrt($pComplex, $iBmpW * $iBmpH)
Case 2
_Algo_Log($pComplex, $iBmpW * $iBmpH)
Case 3
_Algo_Sin($pComplex, $iBmpW * $iBmpH)
Case 4
_Algo_Cos($pComplex, $iBmpW * $iBmpH)
Case 5
_Algo_Tan($pComplex, $iBmpW * $iBmpH)
Case 6
_Algo_Exp($pComplex, $iBmpW * $iBmpH)
Case 7
_Algo_Pow($pComplex, $iBmpW * $iBmpH, 2)
EndSwitch
$tVar = DllStructCreate("double Hue; double Sat; double Val; double 2PI; double Exp; double 001; double Div2; double 6; double 1; uint CW; double ColorOff;")
DllStructSetData($tVar, "2PI", $c2PI)
DllStructSetData($tVar, "Exp", $fVal1)
DllStructSetData($tVar, "001", $fVal2)
DllStructSetData($tVar, "Div2", 0.5)
DllStructSetData($tVar, "6", 6)
DllStructSetData($tVar, "1", 1)
DllStructSetData($tVar, "ColorOff", Mod($fColorOff, 360) * $cDegToRad)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_Color), "ptr", $pScan0, "ptr", $pComplex, "uint", $iBmpW * $iBmpH, "ptr", DllStructGetPtr($tVar))
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_Color", "ptr", $pScan0, "ptr", $pComplex, "uint", $iBmpW * $iBmpH, "ptr", DllStructGetPtr($tVar))
_GDIPlus_BitmapUnlockBits($hBitmap, $tData)
[/autoit] [autoit][/autoit] [autoit]Return $hBitmap
EndFunc ;==>_CreateImage
Func _Algo_Log($pComplex, $iPixel)
Local $tVar = DllStructCreate("double PI; double 2PI;")
DllStructSetData($tVar, "PI", $cPI)
DllStructSetData($tVar, "2PI", $c2PI)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CLog), "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar), "int", 0)
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CLog", "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar))
EndFunc ;==>_Algo_Log
Func _Algo_Sqrt($pComplex, $iPixel)
Local $tVar = DllStructCreate("double[4];")
DllStructSetData($tVar, 1, 1, 1)
DllStructSetData($tVar, 1, -1, 2)
DllStructSetData($tVar, 1, 0.5, 3)
DllStructSetData($tVar, 1, 0.5, 4)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CSQRT), "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar), "int", 0)
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CSQRT", "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar))
EndFunc ;==>_Algo_Sqrt
Func _Algo_Sin($pComplex, $iPixel)
Local $tVar = DllStructCreate("double;")
DllStructSetData($tVar, 1, 0.5)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CSin), "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar), "int", 0)
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CSin", "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar))
EndFunc ;==>_Algo_Sin
Func _Algo_Cos($pComplex, $iPixel)
Local $tVar = DllStructCreate("double;")
DllStructSetData($tVar, 1, 0.5)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CCos), "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar), "int", 0)
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CCos", "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar))
EndFunc ;==>_Algo_Cos
Func _Algo_Tan($pComplex, $iPixel)
Local $iSize = $iPixel * 2 * 8
Local $tComplex_Sin = DllStructCreate("byte[" & $iSize & "];")
Local $tComplex_Cos = DllStructCreate("byte[" & $iSize & "];")
Local $tComplex = DllStructCreate("byte[" & $iSize & "];", $pComplex)
Local $bData = DllStructGetData($tComplex, 1)
DllStructSetData($tComplex_Sin, 1, $bData)
DllStructSetData($tComplex_Cos, 1, $bData)
_Algo_Sin(DllStructGetPtr($tComplex_Sin), $iPixel)
_Algo_Cos(DllStructGetPtr($tComplex_Cos), $iPixel)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CTan), "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tComplex_Sin), "ptr", DllStructGetPtr($tComplex_Cos))
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CTan", "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tComplex_Sin), "ptr", DllStructGetPtr($tComplex_Cos))
EndFunc ;==>_Algo_Tan
Func _Algo_Exp($pComplex, $iPixel)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CExp), "ptr", $pComplex, "uint", $iPixel, "int", 0, "int", 0)
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CExp", "ptr", $pComplex, "uint", $iPixel)
EndFunc ;==>_Algo_Exp
Func _Algo_Pow($pComplex, $iPixel, $fExp)
_Algo_Log($pComplex, $iPixel)
Local $tVar = DllStructCreate("double[2];")
DllStructSetData($tVar, 1, $fExp, 1)
DllStructSetData($tVar, 1, $fExp, 2)
DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($t_ASM_Calc_CPow), "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar), "int", 0)
;$_ASSEMBLEIT_FLAG = 0
;_AssembleIt("none", "_ASM_Calc_CPow", "ptr", $pComplex, "uint", $iPixel, "ptr", DllStructGetPtr($tVar))
_Algo_Exp($pComplex, $iPixel)
EndFunc ;==>_Algo_Pow
Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINT
Func _Exit()
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_GraphicsDispose($hGfxBuffer)
_GDIPlus_BitmapDispose($hBmpBuffer)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
der Assembler code: (wird nicht benötigt)
Spoiler anzeigen
#include "AssembleIt.au3"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _ASM_CalcRangeValues()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov esi, [esp+16]") ;pVar
_("mov eax, [esp+8]") ;Width
_("mov [esi], eax") ; = width
_("mov eax, [esp+12]") ;Height
_("mov [esi+4], eax") ; = height
_("movupd xmm7, [esi+8]") ;xmm7 = RangeX, RangeY
_("movupd xmm6, [esi+24]") ;xmm6 = XOff, YOff
_("mov edx, 0") ;Y-Schleifenzähler = 0
_("_LoopY:")
_("mov ebx, [esp+8]") ;
_("imul ebx, edx") ;ebx = y * width
_("mov ecx, 0") ;X-Schleifenzähler = 0
_("_LoopX:")
_("mov eax, ebx")
_("add eax, ecx") ;eax = ebx + x
_("imul eax, 16") ;pComplex position
_("movupd xmm5, [esi+24]")
_("movd xmm5, ecx")
_("cvtdq2pd xmm5, xmm5") ;convert to double
_("movd xmm4, edx")
_("cvtdq2pd xmm4, xmm4") ;convert to double
_("shufpd xmm5, xmm4, 0x44");xmm5 => [Y, X]
[/autoit] [autoit][/autoit] [autoit]_("subpd xmm5, xmm6") ;X-XOff; Y-YOff
_("mulpd xmm5, xmm7") ;(X-XOff)*rangeX
_("movupd [edi+eax], xmm5")
[/autoit] [autoit][/autoit] [autoit]_("inc ecx")
_("cmp ecx, [esi]") ;ecx < width ?
_("jb _LoopX")
_("inc edx")
_("cmp edx, [esi+4]") ;edx < height ?
_("jb _LoopY")
_("ret ") ;return
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _ASM_Calc_CSQRT()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("mov esi, [esp+12]") ;pVar
_("movupd xmm0, [esi]")
_("movupd xmm1, [esi+16]")
_("XORPD xmm2, xmm2")
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
_("movupd xmm7, [edi+ebx]")
[/autoit] [autoit][/autoit] [autoit];xmm6 => [Sqrt($fRe * $fRe + $fIm * $fIm), Sqrt($fRe * $fRe + $fIm * $fIm)]
_("movapd xmm6, xmm7")
_("mulpd xmm6, xmm6")
_("pshufd xmm5, xmm6, 0xEE")
_("addpd xmm6, xmm5")
_("sqrtpd xmm6, xmm6")
_("pshufd xmm6, xmm6, 0x44")
;xmm6 => [ Sqrt(0.5 * ($fTmp - $fRe)), Sqrt(0.5 * ($fTmp + $fRe))]
_("pshufd xmm5, xmm7, 0x44") ;RE in beide xmm5
_("mulpd xmm5, xmm0") ;RE Hi * -1
_("addpd xmm6, xmm5") ;xmm6 +- re
_("mulpd xmm6, xmm1") ;* 0.5
_("sqrtpd xmm6, xmm6")
_("CMPLTPD xmm7, xmm2")
_("movmskpd esi, xmm7")
_("test esi, 2")
_("jz _Write")
_("mulpd xmm6, xmm0")
_("_Write:")
_("movupd [edi+ebx], xmm6")
_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _ASM_Calc_CLog()
_("use32") ;32Bit!
_("FINIT")
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("mov esi, [esp+12]") ;pVar
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
_("FLDLN2") ;[Log2]
_("fld qword [edi+ebx]") ; [Re] [Log2]
_("fmul st0, st0") ; [Re*Re] [Log2]
_("fld qword [edi+ebx+8]") ; [Im] [Re*Re] [Log2]
_("fmul st0, st0") ;[Im*Im] [Re*Re] [Log2]
_("faddp") ; [Sum] [Log2]
_("fsqrt") ; [Sqrt] [Log2]
_("fyl2x") ; [Log]
_("fld qword [edi+ebx+8]") ;[Im] [Log]
_("fld qword [edi+ebx]") ;[Re] [Im] [Log]
_("fpatan") ; Atan2 Im/Re [Atan] [Log]
_("FCOM qword [esi]") ;Atan > PI
_("fstsw ax")
_("sahf")
_("jbe _Continue")
_("fld qword [esi+8]") ;[2Pi] [Atan] [Log]
_("fsubp st1, st0") ;[Atan] [Log]
_("_Continue:")
_("fstp qword [edi+ebx+8]") ; [Log]
_("fstp qword [edi+ebx]")
_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _ASM_Calc_CSin()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("mov esi, [esp+12]") ;pVar
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
;Exp(Im):
_("fld qword [edi+ebx+8]") ; [Im]
_("fldl2e") ; [log2] [Exp]
_("fmulp") ; [Z]
_("fld st0") ; [Z] [Z]
_("frndint") ; [Round Z] [Z]
_("fsub st1, st0") ; [Z - RoundZ = a] [Z]
_("fxch") ; [Z] [a]
_("f2xm1") ; [2^a]
_("fld1") ; [1] [Z] [a]
_("faddp st1, st0") ; [Z+1] [a]
_("fscale")
_("fstp st1") ; [Exp(Im)]
;Exp(-Im):
_("fldz") ;[0] [Exp(Im)]
_("fld qword [edi+ebx+8]") ; [Im] [0] [Exp(Im)]
_("fsubp") ; [-Im] [Exp(Im)]
_("fldl2e") ; [log2] [-Im] [Exp(Im)]
_("fmulp") ; [Z] [Exp(Im)]
_("fld st0") ; [Z] [Z] [Exp(Im)]
_("frndint") ; [Round Z] [Z] [Exp(Im)]
_("fsub st1, st0") ; [Z - RoundZ = a] [Z] [Exp(Im)]
_("fxch") ; [Z] [a] [Exp(Im)]
_("f2xm1") ; [2^a] [Exp(Im)]
_("fld1") ; [1] [Z] [a] [Exp(Im)]
_("faddp st1, st0") ; [Z+1] [a] [Exp(Im)]
_("fscale")
_("fstp st1") ; [Exp(-Im)] [Exp(Im)]
_("fld st1") ; [Exp(Im)] [Exp(-Im)] [Exp(Im)]
_("fld st1") ; [Exp(-Im)] [Exp(Im)] [Exp(-Im)] [Exp(Im)]
_("fsubp") ; [Exp(Im) + Exp(-Im)] [Exp(-Im)] [Exp(Im)]
_("fld qword [esi]"); [0.5] [Exp(Im) + Exp(-Im)] [Exp(-Im)] [Exp(Im)]
_("fmulp")
_("fld qword [edi+ebx]") ; [Re]...
_("fcos") ; [Cos] [E - E] [E-] [E+]
_("fmulp") ; [Im] [E-] [E+]
_("fstp qword [edi+ebx+8]") ; [E-] [E+]
_("faddp") ; [E + E]
_("fld qword [esi]"); [0.5] [E + E]
_("fmulp")
_("fld qword [edi+ebx]") ; [Re]...
_("fsin") ; [Sin] [E - E]
_("fmulp") ; [Im]
_("fstp qword [edi+ebx]")
_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
EndFunc
Func _ASM_Calc_CCos()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("mov esi, [esp+12]") ;pVar
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
;Exp(Im):
_("fld qword [edi+ebx+8]") ; [Im]
_("fldl2e") ; [log2] [Exp]
_("fmulp") ; [Z]
_("fld st0") ; [Z] [Z]
_("frndint") ; [Round Z] [Z]
_("fsub st1, st0") ; [Z - RoundZ = a] [Z]
_("fxch") ; [Z] [a]
_("f2xm1") ; [2^a]
_("fld1") ; [1] [Z] [a]
_("faddp st1, st0") ; [Z+1] [a]
_("fscale")
_("fstp st1") ; [Exp(Im)]
;Exp(-Im):
_("fldz") ;[0] [Exp(Im)]
_("fld qword [edi+ebx+8]") ; [Im] [0] [Exp(Im)]
_("fsubp") ; [-Im] [Exp(Im)]
_("fldl2e") ; [log2] [-Im] [Exp(Im)]
_("fmulp") ; [Z] [Exp(Im)]
_("fld st0") ; [Z] [Z] [Exp(Im)]
_("frndint") ; [Round Z] [Z] [Exp(Im)]
_("fsub st1, st0") ; [Z - RoundZ = a] [Z] [Exp(Im)]
_("fxch") ; [Z] [a] [Exp(Im)]
_("f2xm1") ; [2^a] [Exp(Im)]
_("fld1") ; [1] [Z] [a] [Exp(Im)]
_("faddp st1, st0") ; [Z+1] [a] [Exp(Im)]
_("fscale")
_("fstp st1") ; [Exp(-Im)] [Exp(Im)]
_("fld st1") ; [Exp(Im)] [Exp(-Im)] [Exp(Im)]
_("fld st1") ; [Exp(-Im)] [Exp(Im)] [Exp(-Im)] [Exp(Im)]
_("fsubp") ; [Exp(Im) + Exp(-Im)] [Exp(-Im)] [Exp(Im)]
_("fld qword [esi]"); [0.5] [Exp(Im) + Exp(-Im)] [Exp(-Im)] [Exp(Im)]
_("fmulp")
_("fld qword [edi+ebx]") ; [Re]...
_("fsin") ; [Sin] [E - E] [E-] [E+]
_("fmulp") ; [Im] [E-] [E+]
_("fstp qword [edi+ebx+8]") ; [E-] [E+]
_("faddp") ; [E + E]
_("fld qword [esi]"); [0.5] [E + E]
_("fmulp")
_("fld qword [edi+ebx]") ; [Re]...
_("fcos") ; [Cos] [E - E]
_("fmulp") ; [Im]
_("fstp qword [edi+ebx]")
_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
EndFunc
Func _ASM_Calc_CTan()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("mov esi, [esp+12]") ;pComplex_Sin
_("mov edx, [esp+16]") ;pComplex_Cos
_("movupd xmm0, [esi]") ; xmm0 = Exp, Exp
_("mov eax, 1")
_("movd xmm1, eax")
_("cvtdq2pd xmm1, xmm1") ;xmm1 = 1.0
_("pshufd xmm1, xmm1, 0x44")
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
_("movupd xmm7, [edx+ebx]") ;xmm7 = Cos_Re, Cos_Im
[/autoit] [autoit][/autoit] [autoit];xmm6 => [$CRe * CRe + CIm * CIm, $CRe * CRe + CIm * CIm]
_("movapd xmm6, xmm7")
_("mulpd xmm6, xmm6")
_("pshufd xmm5, xmm6, 0xEE")
_("addpd xmm6, xmm5")
_("pshufd xmm6, xmm6, 0x44")
_("movapd xmm5, xmm1")
_("divpd xmm5, xmm6") ; xmm5 = 1.0 / (CRe * CRe + CIm * CIm), 1.0 / (CRe * CRe + CIm * CIm)
_("movupd xmm6, [esi+ebx]") ;xmm6 = Sin_Re, Sin_Im
_("pshufd xmm4, xmm7, 0x4E") ;xmm4 = Cos_Im, Cos_Re
_("mulpd xmm7, xmm6") ; xmm7 = SRe * CRe, SIm * CIm
_("mulpd xmm6, xmm4") ; xmm6 = SRe * CIm, SIm * CRe
_("pshufd xmm4, xmm7, 0x4E") ; xmm4 = SIm * CIm, SRe * CRe
_("subpd xmm7, xmm4") ; xmm7 = SRe * CRe - SIm * CIm
_("pshufd xmm4, xmm6, 0x4E") ; xmm4 = SIm * CRe, SRe * CIm
_("subpd xmm6, xmm4") ; xmm6 = SRe * CIm - SIm * CRe
_("UNPCKLPD xmm7, xmm6") ;xmm7 = SRe * CRe - SIm * CIm, SRe * CIm - SIm * CRe
_("mulpd xmm7, xmm5")
_("movupd [edi+ebx], xmm7")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
EndFunc
Func _ASM_Calc_CPow()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("mov esi, [esp+12]") ;pExp
_("movupd xmm0, [esi]") ; xmm0 = Exp, Exp
[/autoit] [autoit][/autoit] [autoit]_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
_("movupd xmm1, [edi+ebx]") ; xmm1 = Re, Im
_("mulpd xmm1, xmm0")
_("movupd [edi+ebx], xmm1")
_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
EndFunc
Func _ASM_Calc_CExp()
_("use32") ;32Bit!
_("mov edi, [esp+4]") ;pComplex
_("mov ecx, [esp+8]") ;PixelCount
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
;Exp(Im):
_("fld qword [edi+ebx]") ; [Re]
_("fldl2e") ; [log2] [Exp]
_("fmulp") ; [Z]
_("fld st0") ; [Z] [Z]
_("frndint") ; [Round Z] [Z]
_("fsub st1, st0") ; [Z - RoundZ = a] [Z]
_("fxch") ; [Z] [a]
_("f2xm1") ; [2^a]
_("fld1") ; [1] [Z] [a]
_("faddp st1, st0") ; [Z+1] [a]
_("fscale")
_("fstp st1") ; [Exp(Re)]
_("fld st0") ; [Exp] [Exp]
_("fld qword [edi+ebx+8]") ; [Im] [Exp] [Exp]
_("fcos") ; [Cos(Im)] [Exp] [Exp]
_("fmulp") ; [Re] [Exp]
_("fstp qword [edi+ebx]") ; [Exp]
_("fld qword [edi+ebx+8]") ; [Im] [Exp]
_("fsin") ; [Sin(Im)] [Exp]
_("fmulp") ; [Im]
_("fstp qword [edi+ebx+8]")
_("cmp ecx, 0")
_("jnz _Loop")
_("ret ") ;return
EndFunc
Func _ASM_Calc_Color()
_("use32") ;32Bit!
_("FINIT")
_("mov edi, [esp+4]") ;pScan0
_("mov esi, [esp+8]") ;pComplex
_("mov ecx, [esp+12]") ;iPixels
_("mov edx, [esp+16]") ;pVar
_("fstcw [edx+72]") ; Save control word
_("fclex") ; Clear exceptions
_("mov word [edx+74], 0x0763") ; Rounding control word
_("fldcw [edx+74]") ; Set new rounding control
_("fld qword [edx+24]") ;2PI in ST(0)
_("_Loop:")
_("dec ecx")
_("mov ebx, ecx")
_("imul ebx, 16") ;pComplex position
;Calc Hue
_("fld qword [esi+ebx+8]") ;Im in St(0) [Im] [2PI]
_("fld qword [esi+ebx]") ;Re in St(0) [Re] [Im] [2PI]
_("fpatan") ; Atan2 Im/Re [Atan] [2PI]
_("fld qword [edx+80]") ; [ColorOff] [Atan] [2PI]
_("fsubp") ; [Atan] [2PI]
_("_LoopHue:")
_("FTST")
_("fstsw ax")
_("fwait")
_("sahf")
_("jae _CalcSat")
_("FXAM")
_("fstsw ax")
_("fwait")
_("sahf")
_("jc _Inf")
_("fadd st0, st1")
_("jmp _LoopHue")
_("_Inf:")
_("fstp st0")
_("fldz")
;Calc Saturation
_("_CalcSat:")
_("fdiv st0, st1")
_("fld qword [edx+56]") ;load 6.0 [6.0] [Hue] [2PI]
_("fmulp")
_("FSTP qword [edx]") ;store Hue [2PI]
_("fld1") ;[1] [2PI]
;$fSat = Abs(Sin($c2PI * Sqrt($fRe * $fRe + $fIm * $fIm)))
_("movupd xmm7, [esi+ebx]")
_("mulpd xmm7, xmm7")
_("pshufd xmm6, xmm7, 0xEE")
_("addpd xmm7, xmm6")
_("sqrtpd xmm7, xmm7")
_("movupd [edx+8], xmm7")
_("fld qword [edx+8]") ; [SQRT] [1] [2PI]
_("fmul st0, st2")
_("fsin")
_("fabs")
_("fst qword [edx+8]") ;Store Staturation [Sat] [1] [2PI]
;Calc Value
_("_CalcVal:")
;$fVal = Abs(Sin($c2PI * $fIm) * Sin($c2PI * $fRe)) ^ 0.3
_("fld qword [edx+32]") ;Exp in ST(0) [Exp] [Sat] [1] [2PI]
_("fld qword [esi+ebx]") ;load Re [Re] [Exp] [Sat] [1] [2PI]
_("fmul st0, st4")
_("fsin")
_("fld qword [esi+ebx+8]") ;load Im [Im] [Sin_Re] [Exp] [Sat] [1] [2PI]
_("fmul st0, st5")
_("fsin")
_("fmulp") ; [Sin_Im * Sin_Re] [Exp] [Sat] [1] [2PI]
_("fabs")
_("ftst") ; st0 = 0.0
_("fstsw ax")
_("fwait")
_("sahf")
_("jz _NoPow")
;Power: exp(exponent * ln(base))
_("fyl2x")
_("fld st0")
_("frndint")
_("fsub st1, st0")
_("fxch st1")
_("f2xm1")
_("fld1")
_("faddp st1, st0")
_("fscale")
_("_NoPow:")
_("fstp st1") ;Store Value [Val] [Sat] [1] [2PI]
;$fVal = 0.5 * ((1 - $fSat) + $fVal + Sqrt((1 - $fSat - $fVal) ^ 2 + 0.01))
_("fld qword [edx+40]") ;0.01 in ST(0) [0.01] [Val] [Sat] [1] [2PI]
_("fld qword [edx+48]") ;0.5 in ST(0) [0.5] [0.01] [Val] [Sat] [1] [2PI]
_("fld1") ;1 in ST(0) [1] [0.5] [0.01] [Val] [Sat] [1] [2PI]
_("fsub st0, st4")
_("fsub st0, st3")
_("fmul st0, st0")
_("fadd st0, st2")
_("fsqrt") ;[Sqrt((1 - $fSat - $fVal) ^ 2 + 0.01)] [0.5] [0.01] [Val] [Sat] [1] [2PI]
_("fld1") ;1 in ST(0) [1] [Sqrt((1 - $fSat - $fVal) ^ 2 + 0.01)] [0.5] [0.01] [Val] [Sat] [1] [2PI]
_("fsub st0, st5")
_("fadd st0, st4")
_("fadd st0, st1")
_("fmul st0, st2")
_("fstp st3") ;Store Value [Sqrt((1 - $fSat - $fVal) ^ 2 + 0.01)] [0.5] [0.01] [Val] [Sat] [1] [2PI]
_("fstp st0")
_("fstp st0")
_("_ValCmpOne:")
_("FCOM qword [edx+64]") ;Val > 1
_("fstsw ax")
_("sahf")
_("jbe _ValCmpZero")
_("fstp st0")
_("fld1") ;Val = 1
_("jmp _SatCmpOne")
_("_ValCmpZero:")
_("FTST")
_("fstsw ax")
_("fwait")
_("sahf")
_("jae _SatCmpOne")
_("fstp st0")
_("FLDZ") ;Val = 0
_("_SatCmpOne:")
_("fstp qword [edx+16]") ;Store Value [Sat] [1] [2PI]
_("FCOM qword [edx+64]") ;Sat > 1
_("fstsw ax")
_("fwait")
_("sahf")
_("jbe _SatCmpZero")
_("fstp st0")
_("fld1") ;Sat = 1
_("jmp _CalcRGB")
_("_SatCmpZero:")
_("FTST")
_("fstsw ax")
_("fwait")
_("sahf")
_("jae _CalcRGB")
_("fstp st0")
_("FLDZ") ;Sat = 0
_("_CalcRGB:")
_("movupd xmm7, [edx]") ;load Hue
_("fld qword[edx]") ;load Hue [Hue] [Sat] [Val] [1] [2PI]
_("FRNDINT")
_("fstp qword [edx]") ;[Sat] [Val] [1] [2PI]
_("FCOMPP") ;[Val] [1] [2PI]
_("fstp st0")
_("movupd xmm6, [edx]") ;load Floor(Hue)
_("subpd xmm7, xmm6") ;xmm7 = Hue - Floor(Hue)
_("mov eax, 1")
_("movd xmm0, eax")
_("cvtdq2pd xmm0, xmm0") ;xmm6 = 1
_("movupd xmm5, [edx+8]") ;load Sat
_("movupd xmm4, [edx+16]") ;load Val
_("movapd xmm2, xmm0")
_("subpd xmm2, xmm7") ;1 - Floor
_("mulpd xmm2, xmm5") ; * Sat
_("movapd xmm3, xmm0")
_("subpd xmm3, xmm2")
_("mulpd xmm3, xmm4") ;xmm3 = fT
_("movapd xmm1, xmm5")
_("mulpd xmm1, xmm7") ;Sat * Floor
_("movapd xmm2, xmm0")
_("subpd xmm2, xmm1")
_("mulpd xmm2, xmm4") ;xmm2 = fQ
_("subpd xmm0, xmm5")
_("mulpd xmm0, xmm4") ;xmm0 = fP
;xmm7 = Trunc(Hue)
;xmm6 = Floor(Hue)
;xmm5 = Sat
;xmm4 = Val
;xmm3 = fT
;xmm2 = fQ
;xmm1 = not used
;xmm0 = fP
_("cvtpd2dq xmm6, xmm6")
_("movd eax, xmm6")
;xmm7 = red
;xmm6 = green
;xmm5 = blue
;xmm4 = Val
;xmm3 = fT
;xmm2 = fQ
;xmm1 =
;xmm0 = fP
_("_Cmp0:") ;Val fT, fP
_("cmp eax, 0")
_("ja _Cmp1")
_("movapd xmm7, xmm4")
_("movapd xmm6, xmm3")
_("movapd xmm5, xmm0")
_("jmp _Cmp6")
_("_Cmp1:") ;fQ, Val, fP
_("cmp eax, 1")
_("ja _Cmp2")
_("movapd xmm7, xmm2")
_("movapd xmm6, xmm4")
_("movapd xmm5, xmm0")
_("jmp _Cmp6")
_("_Cmp2:") ;fP, fVal, fT
_("cmp eax, 2")
_("ja _Cmp3")
_("movapd xmm7, xmm0")
_("movapd xmm6, xmm4")
_("movapd xmm5, xmm3")
_("jmp _Cmp6")
_("_Cmp3:") ;fP, fQ, fVal
_("cmp eax, 3")
_("ja _Cmp4")
_("movapd xmm7, xmm0")
_("movapd xmm6, xmm2")
_("movapd xmm5, xmm4")
_("jmp _Cmp6")
_("_Cmp4:") ;fT, fP, fVal
_("cmp eax, 4")
_("ja _Cmp5")
_("movapd xmm7, xmm3")
_("movapd xmm6, xmm0")
_("movapd xmm5, xmm4")
_("jmp _Cmp6")
_("_Cmp5:") ;fVal, fP, fQ
_("movapd xmm7, xmm4")
_("movapd xmm6, xmm0")
_("movapd xmm5, xmm2")
_("_Cmp6:")
_("mov eax, 0xFF")
_("movd xmm0, eax")
_("movd xmm1, eax")
_("cvtdq2pd xmm0, xmm0")
_("mulpd xmm7, xmm0")
_("mulpd xmm6, xmm0")
_("mulpd xmm5, xmm0")
_("movdqa xmm3, xmm1")
_("PSLLD xmm3, 24") ;Alpha
_("cvtpd2dq xmm7, xmm7")
_("Pand xmm7, xmm1"); And 000000FF
_("movdqa xmm2, xmm7")
_("PSLLD xmm2, 16")
_("por xmm3, xmm2")
_("cvtpd2dq xmm6, xmm6")
_("Pand xmm6, xmm1"); And 000000FF
_("movdqa xmm2, xmm6")
_("PSLLD xmm2, 8")
_("por xmm3, xmm2")
_("cvtpd2dq xmm5, xmm5")
_("Pand xmm5, xmm1"); And 000000FF
_("por xmm3, xmm5")
_("mov ebx, ecx")
_("imul ebx, 4") ;pScan0 position
_("movd [edi+ebx], xmm3")
_("cmp ecx, 0")
_("jnz _Loop")
_("fclex") ; Clear exceptions
_("fldcw [edx+72]") ; Restore control word
_("ret ") ;return
EndFunc
[/autoit]Hoffe es gefällt euch!
E