some funny optimizations :-\

This commit is contained in:
zueuk 2005-09-21 13:44:35 +00:00
parent 7bedaf4218
commit 1f58b0b896

View File

@ -35,7 +35,7 @@ type
FCosA: double; FCosA: double;
FLength: double; FLength: double;
CalculateAngle: boolean; CalculateAngle: boolean;
CalculateLength: boolean; // CalculateLength: boolean;
CalculateSinCos: boolean; CalculateSinCos: boolean;
FRegVariations: array of TBaseVariation; FRegVariations: array of TBaseVariation;
@ -211,9 +211,9 @@ begin
CalculateAngle := (vars[5] <> 0.0) or (vars[6] <> 0.0) or (vars[7] <> 0.0) or (vars[8] <> 0.0) or CalculateAngle := (vars[5] <> 0.0) or (vars[6] <> 0.0) or (vars[7] <> 0.0) or (vars[8] <> 0.0) or
(vars[12] <> 0.0) or (vars[13] <> 0.0) or (vars[21] <> 0.0) or (vars[22] <> 0.0); (vars[12] <> 0.0) or (vars[13] <> 0.0) or (vars[21] <> 0.0) or (vars[22] <> 0.0);
CalculateLength := False; // CalculateLength := False;
CalculateSinCos := (vars[4] <> 0.0) or (vars[9] <> 0.0) or (vars[10] <> 0.0) or CalculateSinCos := (vars[4] <> 0.0) or (vars[9] <> 0.0) or {z! (vars[10] <> 0.0) or}
(vars[11] <> 0.0) or (vars[16] <> 0.0) or (vars[19] <> 0.0) or (vars[11] <> 0.0) or {z! (vars[16] <> 0.0)} or (vars[19] <> 0.0) or
(vars[21] <> 0.0); (vars[21] <> 0.0);
end; end;
@ -272,7 +272,7 @@ end;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
procedure TXForm.Polar; procedure TXForm.Polar;
var {var
ny: double; ny: double;
rPI: double; rPI: double;
begin begin
@ -280,6 +280,10 @@ begin
ny := sqrt(FTx * FTx + FTy * FTy) - 1.0; ny := sqrt(FTx * FTx + FTy * FTy) - 1.0;
FPx := FPx + vars[5] * (FAngle*rPI); FPx := FPx + vars[5] * (FAngle*rPI);
FPy := FPy + vars[5] * ny; FPy := FPy + vars[5] * ny;
}
begin
FPx := FPx + vars[5] * FAngle * 0.31830989;
FPy := FPy + vars[5] * (sqrt(FTx * FTx + FTy * FTy) - 1.0);
end; end;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -305,12 +309,12 @@ end;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
procedure TXForm.Disc; procedure TXForm.Disc;
const
rPI: double = 0.31830989;
var var
nx, ny, r: double; nx, ny, r: double;
rPI: double;
sinr, cosr: extended; sinr, cosr: extended;
begin begin
rPI := 0.31830989;
nx := FTx * PI; nx := FTx * PI;
ny := FTy * PI; ny := FTy * PI;
@ -318,7 +322,6 @@ begin
SinCos(r, sinr, cosr); SinCos(r, sinr, cosr);
FPx := FPx + vars[8] * sinr * FAngle * rPI; FPx := FPx + vars[8] * sinr * FAngle * rPI;
FPy := FPy + vars[8] * cosr * FAngle * rPI; FPy := FPy + vars[8] * cosr * FAngle * rPI;
end; end;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -336,14 +339,25 @@ begin
end; end;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
procedure TXForm.hyperbolic; procedure TXForm.Hyperbolic;
{
var var
r: double; r: double;
begin begin
// r := sqrt(FTx * FTx + FTy * FTy) + 1E-6;
r := Flength + 1E-6; r := Flength + 1E-6;
FPx := FPx + vars[10] * FSinA / r; FPx := FPx + vars[10] * FSinA / r;
FPy := FPy + vars[10] * FCosA * r; FPy := FPy + vars[10] * FCosA * r;
}
// --Z-- Yikes!!! SOMEONE SHOULD GO BACK TO SCHOOL!!!!!!!
// Scott Draves, you aren't so cool after all! :-))
// And did no one niticed it?!!
// After ALL THESE YEARS!!!
// Now watch and learn how to do this WITHOUT calculating sin and cos:
begin
FPx := FPx + vars[10] * FTx / (FTx * FTx + FTy * FTy + 1E-6);
FPy := FPy + vars[10] * FTy;
end; end;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -419,12 +433,18 @@ procedure TXForm.Fisheye;
var var
{ a,} r: double; { a,} r: double;
begin begin
{
// r := sqrt(FTx * FTx + FTy * FTy); // r := sqrt(FTx * FTx + FTy * FTy);
// a := arctan2(FTx, FTy); // a := arctan2(FTx, FTy);
// r := 2 * r / (r + 1); // r := 2 * r / (r + 1);
r := 2 * Flength / (Flength + 1); r := 2 * Flength / (Flength + 1);
FPx := FPx + vars[16] * r * FCosA; FPx := FPx + vars[16] * r * FCosA;
FPy := FPy + vars[16] * r * FSinA; FPy := FPy + vars[16] * r * FSinA;
}
// --Z-- and again, sin & cos are NOT necessary here:
r := 2 / (sqrt(FTx * FTx + FTy * FTy) + 1);
FPx := FPx + vars[16] * r * FTy;
FPy := FPy + vars[16] * r * FTx;
end; end;