Ukázka:
Popis:
Funkce:
Vysvětlivky:
interface
function sinxwr(u:word):real;
function cosxwr(u:word):real;
function sinxwi(u:word):integer;
function cosxwi(u:word):integer;
const sinmax=$4000;
u - je speciální úhlová jednotka kde $8000 = 32768 = π = 180°
...nebo-li: u = 32768 * rad / π = 32768 * deg / 180°
Což má výhodu, že např.:
způsobí "rotaci" u díky "přetékání" wordu.
var
u:word;
begin
u:=0;
repeat
inc(u,$100);
...
until keypressed;
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ř.
přepište na
var
u:real;
x,y:integer;
begin
...
x:=trunc(100*sin(u));
y:=trunc(100*cos(u));
...
end.
resp. v případě sinmax=$4000 ještě raději na
var
u:word;
x,y:integer;
begin
...
x:=100*sinxwi(u) div sinmax;
y:=100*cosxwi(u) div sinmax;
...
end.
a rychlejší už to nebude :).
var
u:word;
x,y:integer;
begin
...
x:=100*sinxwi(u) shr 14;
y:=100*cosxwi(u) shr 14;
...
end.