%%%------------------------------------------------------------------- %%% erlrithmetician - linear algebra library for Erlang %%% Copyright (C) 2026 E. G. Bland %%% %%% This program is free software: you can redistribute it and/or modify %%% it under the terms of the GNU General Public License as published by %%% the Free Software Foundation, either version 3 of the License, or %%% (at your option) any later version. %%% %%% This program is distributed in the hope that it will be useful, %%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %%% GNU General Public License for more details. %%% %%% You should have received a copy of the GNU General Public License %%% along with this program. If not, see . %%%------------------------------------------------------------------- -module(erith_transform2d). -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). -endif. -export([rotate/1, scale/2, translate/2]). -spec rotate(number()) -> erith_mat:mat(float()). -spec scale(number(), number()) -> erith_mat:mat(number()). -spec translate(number(), number()) -> erith_mat:mat(number()). rotate(Theta) -> Cos = math:cos(Theta), Sin = math:sin(Theta), erith_mat:new(array:from_list([erith_vec:new2(Cos, Sin), erith_vec:new2(-Sin, Cos)])). scale(Sx, Sy) -> erith_mat:new(array:from_list([erith_vec:new2(Sx, 0), erith_vec:new2(0, Sy)])). translate(Tx, Ty) -> erith_mat:new(array:from_list([erith_vec:new3(1, 0, 0), erith_vec:new3(0, 1, 0), erith_vec:new3(Tx, Ty, 1)])).