even more asm'ed variations
This commit is contained in:
parent
9abbe9b52e
commit
e4a23280d2
@ -354,9 +354,23 @@ end;
|
|||||||
|
|
||||||
//--1--////////////////////////////////////////////////////////////////////////
|
//--1--////////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Sinusoidal;
|
procedure TXForm.Sinusoidal;
|
||||||
begin
|
//begin
|
||||||
FPx := FPx + vars[1] * sin(FTx);
|
//FPx := FPx + vars[1] * sin(FTx);
|
||||||
FPy := FPy + vars[1] * sin(FTy);
|
//FPy := FPy + vars[1] * sin(FTy);
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 1*8]
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fsin
|
||||||
|
fmul st, st(1)
|
||||||
|
fadd qword ptr [eax + FPx]
|
||||||
|
fstp qword ptr [eax + FPx]
|
||||||
|
fld qword ptr [eax + FTy]
|
||||||
|
fsin
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [eax + FPy]
|
||||||
|
fstp qword ptr [eax + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--2--////////////////////////////////////////////////////////////////////////
|
//--2--////////////////////////////////////////////////////////////////////////
|
||||||
@ -432,19 +446,66 @@ begin
|
|||||||
FPx := FPx + vars[5] * (FAngle*rPI);
|
FPx := FPx + vars[5] * (FAngle*rPI);
|
||||||
FPy := FPy + vars[5] * ny;
|
FPy := FPy + vars[5] * ny;
|
||||||
}
|
}
|
||||||
begin
|
//begin
|
||||||
FPx := FPx + vars[5] * FAngle / PI;
|
// FPx := FPx + vars[5] * FAngle / PI;
|
||||||
FPy := FPy + vars[5] * (sqrt(sqr(FTx) + sqr(FTy)) - 1.0);
|
// FPy := FPy + vars[5] * (sqrt(sqr(FTx) + sqr(FTy)) - 1.0);
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 5*8]
|
||||||
|
fld qword ptr [eax + FAngle]
|
||||||
|
fldpi
|
||||||
|
fdivp st(1), st
|
||||||
|
fmul st, st(1)
|
||||||
|
fadd qword ptr [eax + FPx]
|
||||||
|
fstp qword ptr [eax + FPx]
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fmul st, st
|
||||||
|
fld qword ptr [eax + FTy]
|
||||||
|
fmul st, st
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
fld1
|
||||||
|
fsubp st(1), st
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [eax + FPy]
|
||||||
|
fstp qword ptr [eax + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--6--////////////////////////////////////////////////////////////////////////
|
//--6--////////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.FoldedHandkerchief;
|
procedure TXForm.FoldedHandkerchief;
|
||||||
|
{
|
||||||
var
|
var
|
||||||
r: double;
|
r: double;
|
||||||
begin
|
begin
|
||||||
r := sqrt(sqr(FTx) + sqr(FTy));
|
r := sqrt(sqr(FTx) + sqr(FTy));
|
||||||
FPx := FPx + vars[6] * sin(FAngle + r) * r;
|
FPx := FPx + vars[6] * sin(FAngle + r) * r;
|
||||||
FPy := FPy + vars[6] * cos(FAngle - r) * r;
|
FPy := FPy + vars[6] * cos(FAngle - r) * r;
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 6*8]
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fmul st, st
|
||||||
|
fld qword ptr [eax + FTy]
|
||||||
|
fmul st, st
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
fld qword ptr [eax + FAngle]
|
||||||
|
fld st
|
||||||
|
fadd st, st(2)
|
||||||
|
fsin
|
||||||
|
fmul st, st(2)
|
||||||
|
fmul st, st(3)
|
||||||
|
fadd qword ptr [eax + FPx]
|
||||||
|
fstp qword ptr [eax + FPx]
|
||||||
|
fsub st, st(1)
|
||||||
|
fcos
|
||||||
|
fmulp
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [eax + FPy]
|
||||||
|
fstp qword ptr [eax + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--7--////////////////////////////////////////////////////////////////////////
|
//--7--////////////////////////////////////////////////////////////////////////
|
||||||
@ -461,7 +522,7 @@ begin
|
|||||||
fmul st, st
|
fmul st, st
|
||||||
faddp
|
faddp
|
||||||
fsqrt
|
fsqrt
|
||||||
fstp qword ptr [r]
|
fst qword ptr [r]
|
||||||
fmul qword ptr [eax + FAngle]
|
fmul qword ptr [eax + FAngle]
|
||||||
fsincos
|
fsincos
|
||||||
fstp qword ptr [cosr]
|
fstp qword ptr [cosr]
|
||||||
@ -475,6 +536,7 @@ end;
|
|||||||
|
|
||||||
//--8--////////////////////////////////////////////////////////////////////////
|
//--8--////////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Disc;
|
procedure TXForm.Disc;
|
||||||
|
{
|
||||||
var
|
var
|
||||||
// nx, ny: double;
|
// nx, ny: double;
|
||||||
r, sinr, cosr: double;
|
r, sinr, cosr: double;
|
||||||
@ -484,8 +546,17 @@ begin
|
|||||||
// ny := FTy * PI;
|
// ny := FTy * PI;
|
||||||
// r := sqrt(nx * nx + ny * ny);
|
// r := sqrt(nx * nx + ny * ny);
|
||||||
|
|
||||||
// SinCos(PI * sqrt(sqr(FTx) + sqr(FTy)), sinr, cosr);
|
SinCos(PI * sqrt(sqr(FTx) + sqr(FTy)), sinr, cosr);
|
||||||
asm
|
r := vars[8] * FAngle / PI;
|
||||||
|
FPx := FPx + sinr * r;
|
||||||
|
FPy := FPy + cosr * r;
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 8*8]
|
||||||
|
fmul qword ptr [eax + FAngle]
|
||||||
|
fldpi
|
||||||
|
fdivp st(1), st
|
||||||
fld qword ptr [eax + FTx]
|
fld qword ptr [eax + FTx]
|
||||||
fmul st, st
|
fmul st, st
|
||||||
fld qword ptr [eax + FTy]
|
fld qword ptr [eax + FTy]
|
||||||
@ -495,14 +566,13 @@ begin
|
|||||||
fldpi
|
fldpi
|
||||||
fmulp
|
fmulp
|
||||||
fsincos
|
fsincos
|
||||||
fstp qword ptr [cosr]
|
fmul st, st(2)
|
||||||
fstp qword ptr [sinr]
|
fadd qword ptr [eax + FPy]
|
||||||
|
fstp qword ptr [eax + FPy]
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [eax + FPx]
|
||||||
|
fstp qword ptr [eax + FPx]
|
||||||
fwait
|
fwait
|
||||||
end;
|
|
||||||
r := vars[8] * FAngle / PI;
|
|
||||||
|
|
||||||
FPx := FPx + sinr * r;
|
|
||||||
FPy := FPy + cosr * r;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--9--////////////////////////////////////////////////////////////////////////
|
//--9--////////////////////////////////////////////////////////////////////////
|
||||||
@ -548,24 +618,33 @@ end;
|
|||||||
|
|
||||||
//--11--///////////////////////////////////////////////////////////////////////
|
//--11--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Square;
|
procedure TXForm.Square;
|
||||||
|
{
|
||||||
var
|
var
|
||||||
sinr, cosr: double;
|
sinr, cosr: double;
|
||||||
begin
|
begin
|
||||||
// SinCos(FLength, sinr, cosr);
|
SinCos(FLength, sinr, cosr);
|
||||||
asm
|
|
||||||
fld qword ptr [eax + FLength]
|
|
||||||
fsincos
|
|
||||||
fstp qword ptr [cosr]
|
|
||||||
fstp qword ptr [sinr]
|
|
||||||
fwait
|
|
||||||
end;
|
|
||||||
FPx := FPx + vars[11] * FSinA * cosr;
|
FPx := FPx + vars[11] * FSinA * cosr;
|
||||||
FPy := FPy + vars[11] * FCosA * sinr;
|
FPy := FPy + vars[11] * FCosA * sinr;
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 11*8]
|
||||||
|
fld qword ptr [eax + FLength]
|
||||||
|
fsincos
|
||||||
|
fmul qword ptr [eax + FSinA]
|
||||||
|
fmul st, st(2)
|
||||||
|
fadd qword ptr [eax + FPx]
|
||||||
|
fstp qword ptr [eax + FPx]
|
||||||
|
fmul qword ptr [eax + FCosA]
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [eax + FPy]
|
||||||
|
fstp qword ptr [eax + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--12--///////////////////////////////////////////////////////////////////////
|
//--12--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Ex;
|
procedure TXForm.Ex;
|
||||||
var
|
{var
|
||||||
r: double;
|
r: double;
|
||||||
n0, n1, m0, m1: double;
|
n0, n1, m0, m1: double;
|
||||||
begin
|
begin
|
||||||
@ -577,30 +656,92 @@ begin
|
|||||||
r := r * vars[12];
|
r := r * vars[12];
|
||||||
FPx := FPx + r * (m0 + m1);
|
FPx := FPx + r * (m0 + m1);
|
||||||
FPy := FPy + r * (m0 - m1);
|
FPy := FPy + r * (m0 - m1);
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fmul st, st
|
||||||
|
fld qword ptr [eax + FTy]
|
||||||
|
fmul st, st
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
fld qword ptr [eax + FAngle]
|
||||||
|
fld st
|
||||||
|
fadd st, st(2)
|
||||||
|
fsin
|
||||||
|
fld st
|
||||||
|
fld st
|
||||||
|
fmulp
|
||||||
|
fmulp
|
||||||
|
fxch st(1)
|
||||||
|
fsub st, st(2)
|
||||||
|
fcos
|
||||||
|
fld st
|
||||||
|
fld st
|
||||||
|
fmulp
|
||||||
|
fmulp
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 12*8]
|
||||||
|
fmulp st(3), st
|
||||||
|
fld st
|
||||||
|
fadd st, st(2)
|
||||||
|
fmul st, st(3)
|
||||||
|
|
||||||
|
fadd qword ptr [eax + FPx]
|
||||||
|
fstp qword ptr [eax + FPx]
|
||||||
|
fsubp st(1), st
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [eax + FPy]
|
||||||
|
fstp qword ptr [eax + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--13--///////////////////////////////////////////////////////////////////////
|
//--13--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Julia;
|
procedure TXForm.Julia;
|
||||||
|
{
|
||||||
var
|
var
|
||||||
a,r: double;
|
a, r: double;
|
||||||
sinr, cosr: double;
|
sinr, cosr: double;
|
||||||
begin
|
begin
|
||||||
//a := FAngle*0.5 + Trunc(random * 2) * PI;
|
|
||||||
if random > 0.5 then
|
if random > 0.5 then
|
||||||
a := FAngle/2 + PI
|
a := FAngle/2 + PI
|
||||||
else
|
else
|
||||||
a := FAngle/2;
|
a := FAngle/2;
|
||||||
// SinCos(a, sinr, cosr);
|
SinCos(a, sinr, cosr);
|
||||||
asm
|
r := vars[13] * sqrt(sqrt(sqr(FTx) + sqr(FTy)));
|
||||||
fld qword ptr [a]
|
|
||||||
fsincos
|
|
||||||
fstp qword ptr [cosr]
|
|
||||||
fstp qword ptr [sinr]
|
|
||||||
fwait
|
|
||||||
end;
|
|
||||||
r := vars[13] * sqrt(sqrt(sqr(FTx) + sqr(FTy))); //Math.power(FTx * FTx + FTy * FTy, 0.25);
|
|
||||||
FPx := FPx + r * cosr;
|
FPx := FPx + r * cosr;
|
||||||
FPy := FPy + r * sinr;
|
FPy := FPy + r * sinr;
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
fld qword ptr [ebx + FAngle] // assert: self is in ebx
|
||||||
|
fld1
|
||||||
|
fld1
|
||||||
|
faddp
|
||||||
|
fdivp st(1), st
|
||||||
|
xor eax, eax // hmm...
|
||||||
|
add eax, $02 // hmmm....
|
||||||
|
call System.@RandInt // hmmmm.....
|
||||||
|
test al, al
|
||||||
|
jnz @skip
|
||||||
|
fldpi
|
||||||
|
faddp
|
||||||
|
@skip:
|
||||||
|
fsincos
|
||||||
|
fld qword ptr [ebx + FTx]
|
||||||
|
fmul st, st
|
||||||
|
fld qword ptr [ebx + FTy]
|
||||||
|
fmul st, st
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
fsqrt
|
||||||
|
mov edx, [ebx + vars]
|
||||||
|
fmul qword ptr [edx + 13*8]
|
||||||
|
fmul st(2), st
|
||||||
|
fmulp st(1), st
|
||||||
|
fadd qword ptr [ebx + FPx]
|
||||||
|
fstp qword ptr [ebx + FPx]
|
||||||
|
fadd qword ptr [ebx + FPy]
|
||||||
|
fstp qword ptr [ebx + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--14--///////////////////////////////////////////////////////////////////////
|
//--14--///////////////////////////////////////////////////////////////////////
|
||||||
@ -650,6 +791,7 @@ end;
|
|||||||
|
|
||||||
//--16--///////////////////////////////////////////////////////////////////////
|
//--16--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Fisheye;
|
procedure TXForm.Fisheye;
|
||||||
|
(*
|
||||||
var
|
var
|
||||||
r: double;
|
r: double;
|
||||||
begin
|
begin
|
||||||
@ -666,11 +808,34 @@ begin
|
|||||||
// by the way, now we can clearly see that the original author messed X and Y:
|
// by the way, now we can clearly see that the original author messed X and Y:
|
||||||
FPx := FPx + r * FTy;
|
FPx := FPx + r * FTy;
|
||||||
FPy := FPy + r * FTx;
|
FPy := FPy + r * FTx;
|
||||||
|
*)
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 16*8]
|
||||||
|
fadd st, st
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fld qword ptr [eax + FTy]
|
||||||
|
fld st(1)
|
||||||
|
fmul st, st
|
||||||
|
fld st(1)
|
||||||
|
fmul st, st
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
fld1
|
||||||
|
faddp
|
||||||
|
fdivp st(3), st
|
||||||
|
fmul st, st(2)
|
||||||
|
fadd qword ptr [ebx + FPx]
|
||||||
|
fstp qword ptr [ebx + FPx]
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [ebx + FPy]
|
||||||
|
fstp qword ptr [ebx + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--17--///////////////////////////////////////////////////////////////////////
|
//--17--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Popcorn;
|
procedure TXForm.Popcorn;
|
||||||
|
(*
|
||||||
var
|
var
|
||||||
dx, dy: double;
|
dx, dy: double;
|
||||||
// nx, ny: double;
|
// nx, ny: double;
|
||||||
@ -687,27 +852,82 @@ begin
|
|||||||
// FPy := FPy + vars[17] * ny;
|
// FPy := FPy + vars[17] * ny;
|
||||||
FPx := FPx + vars[17] * (FTx + c20 * sin(dx));
|
FPx := FPx + vars[17] * (FTx + c20 * sin(dx));
|
||||||
FPy := FPy + vars[17] * (FTy + c21 * sin(dy));
|
FPy := FPy + vars[17] * (FTy + c21 * sin(dy));
|
||||||
|
*)
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 17*8]
|
||||||
|
fld qword ptr [eax + FTy]
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fld st(1)
|
||||||
|
fld st
|
||||||
|
fld st
|
||||||
|
faddp
|
||||||
|
faddp
|
||||||
|
fptan
|
||||||
|
fstp st
|
||||||
|
fsin
|
||||||
|
fmul qword ptr [eax + c20]
|
||||||
|
fadd st, st(1)
|
||||||
|
fmul st, st(3)
|
||||||
|
fadd qword ptr [ebx + FPx]
|
||||||
|
fstp qword ptr [ebx + FPx]
|
||||||
|
fld st
|
||||||
|
fld st
|
||||||
|
faddp
|
||||||
|
faddp
|
||||||
|
fptan
|
||||||
|
fstp st
|
||||||
|
fsin
|
||||||
|
fmul qword ptr [eax + c21]
|
||||||
|
faddp
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [ebx + FPy]
|
||||||
|
fstp qword ptr [ebx + FPy]
|
||||||
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--18--///////////////////////////////////////////////////////////////////////
|
//--18--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Exponential;
|
procedure TXForm.Exponential;
|
||||||
|
{
|
||||||
var
|
var
|
||||||
d: double;
|
d: double;
|
||||||
sinr, cosr: double;
|
sinr, cosr: double;
|
||||||
begin
|
begin
|
||||||
// SinCos(PI * FTy, sinr, cosr);
|
SinCos(PI * FTy, sinr, cosr);
|
||||||
asm
|
d := vars[18] * exp(FTx - 1); // --Z-- (e^x)/e = e^(x-1)
|
||||||
|
FPx := FPx + cosr * d;
|
||||||
|
FPy := FPy + sinr * d;
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fld1
|
||||||
|
fsubp st(1), st
|
||||||
|
// --Z-- here goes exp(x) code from System.pas
|
||||||
|
FLDL2E
|
||||||
|
FMUL
|
||||||
|
FLD ST(0)
|
||||||
|
FRNDINT
|
||||||
|
FSUB ST(1), ST
|
||||||
|
FXCH ST(1)
|
||||||
|
F2XM1
|
||||||
|
FLD1
|
||||||
|
FADD
|
||||||
|
FSCALE
|
||||||
|
FSTP ST(1)
|
||||||
|
// -----
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fmul qword ptr [edx + 18*8]
|
||||||
fld qword ptr [eax + FTy]
|
fld qword ptr [eax + FTy]
|
||||||
fldpi
|
fldpi
|
||||||
fmulp
|
fmulp
|
||||||
fsincos
|
fsincos
|
||||||
fstp qword ptr [cosr]
|
fmul st, st(2)
|
||||||
fstp qword ptr [sinr]
|
fadd qword ptr [ebx + FPx]
|
||||||
|
fstp qword ptr [ebx + FPx]
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [ebx + FPy]
|
||||||
|
fstp qword ptr [ebx + FPy]
|
||||||
fwait
|
fwait
|
||||||
end;
|
|
||||||
d := vars[18] * exp(FTx - 1); // --Z-- (e^x)/e = e^(x-1), isn't it?!
|
|
||||||
FPx := FPx + cosr * d;
|
|
||||||
FPy := FPy + sinr * d;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--19--///////////////////////////////////////////////////////////////////////
|
//--19--///////////////////////////////////////////////////////////////////////
|
||||||
@ -728,31 +948,56 @@ end;
|
|||||||
//--20--///////////////////////////////////////////////////////////////////////
|
//--20--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Cosine;
|
procedure TXForm.Cosine;
|
||||||
var
|
var
|
||||||
sinr, cosr: double;
|
vsin2, vcos2: double;
|
||||||
e1, e2: double;
|
e1, e2: double;
|
||||||
begin
|
begin
|
||||||
// SinCos(FTx * PI, sinr, cosr);
|
// SinCos(FTx * PI, sinr, cosr);
|
||||||
asm
|
|
||||||
fld qword ptr [eax + FTx]
|
|
||||||
fldpi
|
|
||||||
fmulp
|
|
||||||
fsincos
|
|
||||||
fstp qword ptr [cosr]
|
|
||||||
fstp qword ptr [sinr]
|
|
||||||
fwait
|
|
||||||
end;
|
|
||||||
// FPx := FPx + vars[20] * cosr * cosh(FTy);
|
// FPx := FPx + vars[20] * cosr * cosh(FTy);
|
||||||
// FPy := FPy - vars[20] * sinr * sinh(FTy);
|
// FPy := FPy - vars[20] * sinr * sinh(FTy);
|
||||||
// --Z-- sinh() and cosh() both calculate exp(x) and exp(-x)
|
{
|
||||||
|
SinCos(FTx * PI, sinr, cosr);
|
||||||
if FTy = 0 then
|
if FTy = 0 then
|
||||||
begin
|
begin
|
||||||
|
// sinh(0) = 0, cosh(0) = 1
|
||||||
FPx := FPx + vars[20] * cosr;
|
FPx := FPx + vars[20] * cosr;
|
||||||
exit;
|
end
|
||||||
end;
|
else begin
|
||||||
|
// --Z-- sinh() and cosh() both calculate exp(y) and exp(-y)
|
||||||
e1 := exp(FTy);
|
e1 := exp(FTy);
|
||||||
e2 := exp(-FTy);
|
e2 := exp(-FTy);
|
||||||
FPx := FPx + vars[20] * cosr * (e1 + e2)/2;
|
FPx := FPx + vars[20] * cosr * (e1 + e2)/2;
|
||||||
FPy := FPy - vars[20] * sinr * (e1 - e2)/2;
|
FPy := FPy - vars[20] * sinr * (e1 - e2)/2;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
asm
|
||||||
|
mov edx, [eax + vars]
|
||||||
|
fld qword ptr [edx + 20*8]
|
||||||
|
fld1
|
||||||
|
fld1
|
||||||
|
faddp
|
||||||
|
fdivp st(1), st
|
||||||
|
fld qword ptr [eax + FTx]
|
||||||
|
fldpi
|
||||||
|
fmulp
|
||||||
|
fsincos
|
||||||
|
fmul st, st(2)
|
||||||
|
fstp qword ptr [vcos2]
|
||||||
|
fmulp
|
||||||
|
fstp qword ptr [vsin2]
|
||||||
|
fwait
|
||||||
|
end;
|
||||||
|
if FTy = 0 then
|
||||||
|
begin
|
||||||
|
// sinh(0) = 0, cosh(0) = 1
|
||||||
|
FPx := FPx + 2 * vcos2;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
// --Z-- sinh() and cosh() both calculate exp(y) and exp(-y)
|
||||||
|
e1 := exp(FTy);
|
||||||
|
e2 := exp(-FTy);
|
||||||
|
FPx := FPx + vcos2 * (e1 + e2);
|
||||||
|
FPy := FPy - vsin2 * (e1 - e2);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--21--///////////////////////////////////////////////////////////////////////
|
//--21--///////////////////////////////////////////////////////////////////////
|
||||||
@ -760,21 +1005,17 @@ procedure TXForm.Rings;
|
|||||||
var
|
var
|
||||||
r: double;
|
r: double;
|
||||||
dx: double;
|
dx: double;
|
||||||
// sinr, cosr: extended;
|
|
||||||
begin
|
begin
|
||||||
dx := sqr(c20) + EPS;
|
dx := sqr(c20) + EPS;
|
||||||
// r := FLength;
|
// r := FLength;
|
||||||
// r := r + dx - System.Int((r + dx)/(2 * dx)) * 2 * dx - dx + r * (1-dx);
|
// r := r + dx - System.Int((r + dx)/(2 * dx)) * 2 * dx - dx + r * (1-dx);
|
||||||
// --Z-- ^^^^ heheeeee :-) ^^^^
|
// --Z-- ^^^^ heheeeee :-) ^^^^
|
||||||
|
|
||||||
// SinCos(FAngle, sinr, cosr);
|
// FPx := FPx + vars[21] * r * FCosA;
|
||||||
// FPx := FPx + vars[21] * r * cosr;
|
// FPy := FPy + vars[21] * r * FSinA;
|
||||||
// FPy := FPy + vars[21] * r * sinr;
|
|
||||||
r := sqrt(sqr(ftx) + sqr(fty));
|
|
||||||
r := vars[21] * (
|
r := vars[21] * (
|
||||||
2 * r - dx * (System.Int((r/dx + 1)/2) * 2 + r)
|
2 * FLength - dx * (System.Int((FLength/dx + 1)/2) * 2 + FLength)
|
||||||
);
|
);
|
||||||
|
|
||||||
FPx := FPx + r * FCosA;
|
FPx := FPx + r * FCosA;
|
||||||
FPy := FPy + r * FSinA;
|
FPy := FPy + r * FSinA;
|
||||||
end;
|
end;
|
||||||
@ -782,31 +1023,48 @@ end;
|
|||||||
//--22--///////////////////////////////////////////////////////////////////////
|
//--22--///////////////////////////////////////////////////////////////////////
|
||||||
procedure TXForm.Fan;
|
procedure TXForm.Fan;
|
||||||
var
|
var
|
||||||
r, a : double;
|
// r, a : double;
|
||||||
|
// sinr, cosr: double;
|
||||||
dx, dy, dx2: double;
|
dx, dy, dx2: double;
|
||||||
sinr, cosr: double;
|
|
||||||
begin
|
begin
|
||||||
dy := c21;
|
dy := c21;
|
||||||
dx := PI * (sqr(c20) + EPS);
|
dx := PI * (sqr(c20) + EPS);
|
||||||
dx2 := dx/2;
|
dx2 := dx/2;
|
||||||
|
|
||||||
r := vars[22] * sqrt(sqr(FTx) + sqr(FTy));
|
|
||||||
|
|
||||||
if (FAngle+dy - System.Int((FAngle + dy)/dx) * dx) > dx2 then
|
if (FAngle+dy - System.Int((FAngle + dy)/dx) * dx) > dx2 then
|
||||||
a := FAngle - dx2
|
//a := FAngle - dx2
|
||||||
else
|
asm
|
||||||
a := FAngle + dx2;
|
fld qword ptr [ebx + FAngle]
|
||||||
// SinCos(a, sinr, cosr);
|
fsub qword ptr [dx2]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
//a := FAngle + dx2;
|
||||||
|
asm
|
||||||
|
fld qword ptr [ebx + FAngle]
|
||||||
|
fadd qword ptr [dx2]
|
||||||
|
end;
|
||||||
|
// SinCos(a, sinr, cosr);
|
||||||
|
// r := vars[22] * sqrt(sqr(FTx) + sqr(FTy));
|
||||||
|
// FPx := FPx + r * cosr;
|
||||||
|
// FPy := FPy + r * sinr;
|
||||||
asm
|
asm
|
||||||
fld qword ptr [a]
|
|
||||||
fsincos
|
fsincos
|
||||||
fstp qword ptr [cosr]
|
fld qword ptr [ebx + FTx]
|
||||||
fstp qword ptr [sinr]
|
fmul st, st
|
||||||
|
fld qword ptr [ebx + FTy]
|
||||||
|
fmul st, st
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
mov edx, [ebx + vars]
|
||||||
|
fmul qword ptr [edx + 22*8]
|
||||||
|
fmul st(2), st
|
||||||
|
fmulp
|
||||||
|
fadd qword ptr [ebx + FPx]
|
||||||
|
fstp qword ptr [ebx + FPx]
|
||||||
|
fadd qword ptr [ebx + FPy]
|
||||||
|
fstp qword ptr [ebx + FPy]
|
||||||
fwait
|
fwait
|
||||||
end;
|
end;
|
||||||
|
|
||||||
FPx := FPx + r * cosr;
|
|
||||||
FPy := FPy + r * sinr;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(*
|
(*
|
||||||
|
Loading…
Reference in New Issue
Block a user