В общем ничего кроме стандартных знаний линейной алгебры здесь не требуется. Согласно линейной алгебры нужно построить матрицу трансформации задать ее для канвы и рисовать все что угодно.
Если вспомнить, то выполнить нужно следующее:
Сместить Систему Координат (СК) на вектор центра поворота.
Повернуть СК на угол поворота
Сместить СК на обратные вектор центра поворота.
В коде это будет выглядеть так:
uses
System.Math.Vectors;
{$R *.fmx}
procedure TForm1.ButtonDrawRotatedTextClick(Sender: TObject);
var
RotationMatrix: TMatrix;
TranslationMatrix: TMatrix;
ReverseTranslationMatrix: TMatrix;
begin
Image1.Bitmap.SetSize(200, 200);
Image1.Bitmap.Clear(TAlphaColorRec.Null);
with Image1.Bitmap.Canvas do
begin
BeginScene;
try
TranslationMatrix := TMatrix.CreateTranslation(100, 100);
RotationMatrix := TMatrix.CreateRotation(-Pi / 180 * nbAngle.Value);
ReverseTranslationMatrix := TMatrix.CreateTranslation(-100, -100);
SetMatrix(ReverseTranslationMatrix * RotationMatrix * TranslationMatrix);
Fill.Color := TAlphaColorRec.Red;
Fill.Kind := TBrushKind.Solid;
Font.Size := 20;
FillText(TRectF.Create(50, 50, 150, 150), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center);
finally
EndScene;
end;
Image1.Repaint;
end;
end;
Результат:
Проект: DrawRotatedTextDemo.zip