{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina } unit varBlade; interface uses BaseVariation, XFormMan; type TVariationBlade = class(TBaseVariation) private public constructor Create; class function GetName: string; override; class function GetInstance: TBaseVariation; override; procedure CalcFunction; override; end; implementation uses Math; //////////////////////// procedure TVariationBlade.CalcFunction; var r, sinr, cosr: double; begin r := sqrt(sqr(FTx^) + sqr(FTy^)) * vvar; SinCos(r * random, sinr, cosr); r := vvar * FTx^; FPx^ := FPx^ + r * (cosr + sinr); FPy^ := FPy^ + r * (cosr - sinr); // AV: added real 3D support FPz^ := FPz^ + vvar * FTy^ * (sinr - cosr); end; constructor TVariationBlade.Create; begin inherited Create; end; class function TVariationBlade.GetInstance: TBaseVariation; begin Result := TVariationBlade.Create; end; class function TVariationBlade.GetName: string; begin Result := 'blade'; end; ////////////////////////////// initialization RegisterVariation(TVariationClassLoader.Create(TVariationBlade), true, false); end.