Könntest du bitte die Sourcecodes dazu posten? würd mich interessieren...
Ich hab noch einen kleinen Vergleich gemacht.
Diesmal wird wirklich gerechnet
Und zwar soll eine zackige Linie geglättet werden
Die Variable $iStep ist die Anzahl der Durchläufe und $iPoints die Anzahl der Punkte auf dem Path (sollte nicht viel größer eingestellt werden, da sich sonst GDI+ überanstrengt ;))
Beim ersten Test, also AutoIt, dauert es etwas länger, denn das AutoIt-Array muss auch noch in ein DllStruct umgewandelt werden, damit GDI+ es zeichnen kann.
gemessen wird aber nur die tatsächliche Zeit der Smooth Funktion
Die Ergebnisse:
!==============================================
> AutoIt: 7299.84146029733
> FreeBasic: 7.10509296572609
> Lazarus: 8.35301693371644
> FreePascal: 9.44924564434865
> DevC: 8.16165183005103
> MinGW: 7.96330259851462
!==============================================
Auch hab ich mit der von Andy vorgeschlagenen ASM Sin und Cos Variante experimentiert, jedoch wurde meine Freebasic-Dll dadurch etwas langsamer
verwendet hab ich das hier:
Sub FBSinCos(Angle As Double, ByRef FbSin As Double, ByRef FbCos As Double)
'©2008 by ytwinky, optimized by volta ;-))
Asm
fld qword Ptr [Angle] 'Angle -> st(0)
fsincos 'compute sin AND cos
mov edx, [FbCos] 'Addr. of fbCos -> EDX
fstp qword Ptr [edx] 'St(0) = cos -> fbCos
mov edx, [FbSin] 'Addr. of fbSin -> EDX
fstp qword Ptr [edx] 'St(0) = sin -> fbSin
End Asm
End Sub
Alles anzeigen
E