Die Lösung mit absolute ist fast 4mal schneller als der klassische Umweg über Vector2f
Nur sieht die 1. Lösung etwas gebastelt aus.
Code: Alles auswählen
type
TVertex2d = array[0..1] of single;
TSingleArray = array of single;
{ TClass }
TClass = class
private
SingleArray: TSingleArray;
public
constructor Create;
procedure Rotate1(winkel: single);
procedure Rotate2(winkel: single);
end;
procedure RotateA(var v: TVertex2d; winkel: single);
begin
exit; // Test
end;
procedure TClass.Rotate1(winkel: single);
var
i: integer;
sa: TSingleArray;
va: array of TVertex2d absolute sa;
// va: array of TVertex2d absolute SingleArray; // geht leider nicht.
begin
sa := SingleArray;
for i := 0 to Length(sa) div 2 - 1 do begin
RotateA(va[i], winkel);
end;
end;
constructor TClass.Create;
var
i: integer;
begin
SetLength(SingleArray, 100000000);
for i := 0 to Length(SingleArray) - 1 do begin
SingleArray[i] := 2.0;
end;
end;
procedure TClass.Rotate2(winkel: single);
var
v: TVertex2d;
i: integer;
begin
for i := 0 to Length(SingleArray) div 2 - 1 do begin
Move(SingleArray[i * 2], v, SizeOf(v));
RotateA(v, 2);
Move(v, SingleArray[i * 2], SizeOf(v));
end;
end;