59 lines
1.2 KiB
ObjectPascal
59 lines
1.2 KiB
ObjectPascal
Program Map(output);
|
|
|
|
type
|
|
real = double;
|
|
tRange = array [0..1] of real;
|
|
|
|
tMapRec = record
|
|
mrFrom,
|
|
mrTo: tRange;
|
|
mrScale: real
|
|
end;
|
|
|
|
function InitRange(rfrom, rTo: real): tRange;
|
|
begin
|
|
InitRange[0] := rfrom;
|
|
InitRange[1] := rTo;
|
|
end;
|
|
|
|
function InitMapRec(const fromRange, toRange: tRange): tMapRec;
|
|
begin
|
|
with InitMapRec do
|
|
begin
|
|
mrFrom := fromRange;
|
|
mrTo := toRange;
|
|
mrScale := (toRange[1] - toRange[0]) / (fromRange[1] - fromRange[0]);
|
|
end;
|
|
end;
|
|
|
|
function MapRecRange(const value: real; var MR: tMapRec): real;
|
|
begin
|
|
with MR do
|
|
MapRecRange := (value - mrFrom[0]) * mrScale + mrTo[0];
|
|
end;
|
|
|
|
function MapRange(const value: real; const fromRange, toRange: tRange): real;
|
|
begin
|
|
MapRange := (value - fromRange[0]) * (toRange[1] - toRange[0]) /
|
|
(fromRange[1] - fromRange[0]) + toRange[0];
|
|
end;
|
|
|
|
var
|
|
value: real;
|
|
rFrom, rTo: tRange;
|
|
mr: tMapRec;
|
|
i: longint;
|
|
|
|
begin
|
|
rFrom := InitRange(0, 10);
|
|
rTo := InitRange(-1, 0);
|
|
mr := InitMapRec(rFrom, rTo);
|
|
|
|
for i := 0 to 10 do
|
|
begin
|
|
value := i;
|
|
writeln(i: 4, ' maps to: ', MapRange(value, rFrom, rTo): 10: 6,
|
|
MapRecRange(value, mr): 10: 6);
|
|
end;
|
|
end.
|