Petr Kratochvíl - Sin unit v1.0

Ukázka:
Sinunit1-demo1

Popis:

Funkce:

interface
function sinxwr(u:word):real;
function cosxwr(u:word):real;
function sinxwi(u:word):integer;
function cosxwi(u:word):integer;
const sinmax=$4000;
Vysvětlivky:
u - je speciální úhlová jednotka kde $8000 = 32768 = π = 180°
...nebo-li: u = 32768 * rad / π = 32768 * deg / 180°
Což má výhodu, že např.:
var
  u:word;
begin
u:=0;
repeat
  inc(u,$100);
  ...
until keypressed;
způsobí "rotaci" u díky "přetékání" wordu.
sinxwr a cosxwr vrací hodnotu v rozsahu -1..1 typu real a ještě o něco rychlejší funkce sinxwi a cosxwi vrací hodnotu v rozsahu -sinmax..sinmax = -$4000..$4000 = -16384..16384.


Mé doporučení proto zní:
Chcete-li až cca 3x rychlejší sin, cos výpočty (např. u 3D grafiky), pak např.
var
  u:real;
  x,y:integer;
begin
  ...
  x:=trunc(100*sin(u));
  y:=trunc(100*cos(u));
  ...
end.
přepište na
var
  u:word;
  x,y:integer;
begin
  ...
  x:=100*sinxwi(u) div sinmax;
  y:=100*cosxwi(u) div sinmax;
  ...
end.
resp. v případě sinmax=$4000 ještě raději na
var
  u:word;
  x,y:integer;
begin
  ...
  x:=100*sinxwi(u) shr 14;
  y:=100*cosxwi(u) shr 14;
  ...
end.
a rychlejší už to nebude :).