Skip to content

Commit

Permalink
Etalon vector is transformed only by rotation matrix.
Browse files Browse the repository at this point in the history
  • Loading branch information
dvmorozov committed Sep 28, 2019
1 parent 8935c26 commit 696fc55
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 84 deletions.
149 changes: 75 additions & 74 deletions Examples.lps
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
<PathDelim Value="\"/>
<Version Value="10"/>
<BuildModes Active="Default"/>
<Units Count="15">
<Units Count="13">
<Unit0>
<Filename Value="Examples.lpr"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<WindowIndex Value="-1"/>
<TopLine Value="-1"/>
<CursorPos X="-1" Y="-1"/>
<UsageCount Value="148"/>
<UsageCount Value="187"/>
</Unit0>
<Unit1>
<Filename Value="ExamplesMain.pas"/>
Expand All @@ -21,231 +21,232 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<TopLine Value="376"/>
<CursorPos X="25" Y="390"/>
<UsageCount Value="148"/>
<TopLine Value="238"/>
<CursorPos X="25" Y="256"/>
<UsageCount Value="187"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
<Unit2>
<Filename Value="DownhillSimplexAlgorithm.pas"/>
<EditorIndex Value="1"/>
<TopLine Value="606"/>
<CursorPos Y="540"/>
<UsageCount Value="73"/>
<TopLine Value="163"/>
<CursorPos Y="179"/>
<UsageCount Value="92"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="Algorithm.pas"/>
<EditorIndex Value="-1"/>
<CursorPos Y="9"/>
<UsageCount Value="33"/>
<UsageCount Value="29"/>
</Unit3>
<Unit4>
<Filename Value="CBRCComponent.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="14"/>
<CursorPos X="5" Y="20"/>
<UsageCount Value="33"/>
<UsageCount Value="29"/>
</Unit4>
<Unit5>
<Filename Value="Decisions.pas"/>
<EditorIndex Value="2"/>
<TopLine Value="203"/>
<CursorPos Y="220"/>
<UsageCount Value="73"/>
<UsageCount Value="92"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="MyExceptions.pas"/>
<EditorIndex Value="-1"/>
<UsageCount Value="31"/>
<UsageCount Value="27"/>
</Unit6>
<Unit7>
<Filename Value="SimpMath.pas"/>
<EditorIndex Value="4"/>
<TopLine Value="59"/>
<CursorPos X="5" Y="75"/>
<UsageCount Value="72"/>
<TopLine Value="916"/>
<CursorPos Y="935"/>
<UsageCount Value="91"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="Tools.pas"/>
<EditorIndex Value="5"/>
<CursorPos X="104" Y="9"/>
<UsageCount Value="74"/>
<UsageCount Value="93"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
<Filename Value="FitMinimizers.pas"/>
<EditorIndex Value="-1"/>
<CursorPos X="26" Y="4"/>
<UsageCount Value="28"/>
<UsageCount Value="24"/>
</Unit9>
<Unit10>
<Filename Value="SelfCheckedComponentList.pas"/>
<EditorIndex Value="-1"/>
<CursorPos X="53" Y="12"/>
<UsageCount Value="31"/>
<UsageCount Value="27"/>
</Unit10>
<Unit11>
<Filename Value="C:\lazarus\fpc\3.0.4\source\packages\fcl-base\src\contnrs.pp"/>
<EditorIndex Value="-1"/>
<TopLine Value="67"/>
<CursorPos X="17" Y="83"/>
<UsageCount Value="27"/>
<UsageCount Value="23"/>
</Unit11>
<Unit12>
<Filename Value="C:\lazarus\lcl\dialogs.pp"/>
<UnitName Value="Dialogs"/>
<EditorIndex Value="-1"/>
<TopLine Value="657"/>
<CursorPos X="29" Y="674"/>
<UsageCount Value="3"/>
</Unit12>
<Unit13>
<Filename Value="C:\lazarus\lcl\include\messagedialogs.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="138"/>
<CursorPos X="3" Y="146"/>
<UsageCount Value="3"/>
</Unit13>
<Unit14>
<Filename Value="Math3d.pas"/>
<EditorIndex Value="3"/>
<TopLine Value="5"/>
<CursorPos X="11" Y="21"/>
<UsageCount Value="47"/>
<TopLine Value="29"/>
<CursorPos X="25" Y="45"/>
<UsageCount Value="66"/>
<Loaded Value="True"/>
</Unit14>
</Unit12>
</Units>
<OtherDefines Count="1">
<Define0 Value="Lazarus"/>
</OtherDefines>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="246" Column="48" TopLine="219"/>
<Caret Line="200" TopLine="174"/>
</Position1>
<Position2>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="415" Column="26" TopLine="401"/>
<Caret Line="287" TopLine="271"/>
</Position2>
<Position3>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="416" Column="31" TopLine="405"/>
<Caret Line="288" TopLine="271"/>
</Position3>
<Position4>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="420" Column="21" TopLine="406"/>
<Caret Line="289" TopLine="271"/>
</Position4>
<Position5>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="354" Column="20" TopLine="330"/>
<Caret Line="290" TopLine="271"/>
</Position5>
<Position6>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="363" Column="12" TopLine="338"/>
<Caret Line="291" TopLine="271"/>
</Position6>
<Position7>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="46" Column="30" TopLine="35"/>
<Caret Line="292" TopLine="271"/>
</Position7>
<Position8>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="373" Column="21" TopLine="363"/>
<Caret Line="190" TopLine="174"/>
</Position8>
<Position9>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="383" Column="16" TopLine="363"/>
<Filename Value="SimpMath.pas"/>
<Caret Line="934" Column="24" TopLine="919"/>
</Position9>
<Position10>
<Filename Value="Math3d.pas"/>
<Caret Line="55" Column="51" TopLine="39"/>
<Filename Value="SimpMath.pas"/>
<Caret Line="73" Column="39" TopLine="62"/>
</Position10>
<Position11>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="388" Column="37" TopLine="373"/>
<Filename Value="SimpMath.pas"/>
<Caret Line="78" Column="16" TopLine="62"/>
</Position11>
<Position12>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="48" Column="34" TopLine="34"/>
<Filename Value="SimpMath.pas"/>
<Caret Line="934" Column="26" TopLine="908"/>
</Position12>
<Position13>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="174" Column="20" TopLine="147"/>
<Filename Value="SimpMath.pas"/>
<Caret Line="931" Column="37" TopLine="916"/>
</Position13>
<Position14>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="378" Column="20" TopLine="351"/>
<Filename Value="SimpMath.pas"/>
<Caret Line="935" TopLine="916"/>
</Position14>
<Position15>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="422" Column="24" TopLine="395"/>
<Caret Line="195" TopLine="184"/>
</Position15>
<Position16>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="425" Column="33" TopLine="398"/>
<Caret Line="286" TopLine="270"/>
</Position16>
<Position17>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="45" Column="63" TopLine="27"/>
<Caret Line="381" Column="22" TopLine="367"/>
</Position17>
<Position18>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="48" Column="34" TopLine="27"/>
<Caret Line="50" Column="36" TopLine="36"/>
</Position18>
<Position19>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="174" Column="20" TopLine="147"/>
<Caret Line="102" Column="22" TopLine="76"/>
</Position19>
<Position20>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="378" Column="20" TopLine="351"/>
<Caret Line="381" Column="22" TopLine="358"/>
</Position20>
<Position21>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="422" Column="24" TopLine="395"/>
<Caret Line="286" TopLine="270"/>
</Position21>
<Position22>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="425" Column="33" TopLine="407"/>
<Caret Line="275" TopLine="256"/>
</Position22>
<Position23>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="48" Column="34" TopLine="34"/>
<Caret Line="253" Column="14" TopLine="238"/>
</Position23>
<Position24>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="174" Column="20" TopLine="147"/>
<Caret Line="250" TopLine="238"/>
</Position24>
<Position25>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="378" Column="20" TopLine="351"/>
<Caret Line="251" TopLine="238"/>
</Position25>
<Position26>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="422" Column="24" TopLine="395"/>
<Caret Line="253" TopLine="238"/>
</Position26>
<Position27>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="425" Column="33" TopLine="398"/>
<Caret Line="254" TopLine="238"/>
</Position27>
<Position28>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="48" Column="39" TopLine="33"/>
<Caret Line="256" TopLine="238"/>
</Position28>
<Position29>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="425" Column="29" TopLine="408"/>
<Caret Line="257" TopLine="238"/>
</Position29>
<Position30>
<Filename Value="ExamplesMain.pas"/>
<Caret Line="48" Column="41" TopLine="34"/>
<Caret Line="258" TopLine="238"/>
</Position30>
</JumpHistory>
</ProjectSession>
<Debugging>
<BreakPoints Count="2">
<Item1>
<Kind Value="bpkSource"/>
<WatchScope Value="wpsLocal"/>
<WatchKind Value="wpkWrite"/>
<Source Value="ExamplesMain.pas"/>
<Line Value="276"/>
</Item1>
<Item2>
<Kind Value="bpkSource"/>
<WatchScope Value="wpsLocal"/>
<WatchKind Value="wpkWrite"/>
<Source Value="ExamplesMain.pas"/>
<Line Value="249"/>
</Item2>
</BreakPoints>
<Watches Count="2">
<Item1>
<Expression Value="Point.Comps[0]"/>
Expand Down
38 changes: 28 additions & 10 deletions ExamplesMain.pas
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ TForm1 = class(TForm, IDownhillSimplexServer)
procedure DisplayPointCloud;
procedure DisplayParameters;

{ Returns rotation matrix. }
function GetRotationMatrix: TMatrix;
{ Returns transformation matrix according to current parameters. }
function GetTransformationMatrix: TMatrix;
{ Computes center of mass of point cloud. }
Expand Down Expand Up @@ -220,29 +222,45 @@ function TForm1.ComputeMinCoordinates: TDoubleVector3;
end;
end;

function TForm1.GetTransformationMatrix: TMatrix;
var RotX, RotY, RotZ, Matr, Trans, InverseTrans: TMatrix;
{$hints off}
function TForm1.GetRotationMatrix: TMatrix;
var RotX, RotY, RotZ, Matr: TMatrix;
begin
{ Computing rotation matrices. }
{ Computing rotation matrices.
Matrices are initalized inside functions. }
GetMatrixRotX(Alpha, RotX);
GetMatrixRotY(Beta, RotY);
GetMatrixRotZ(Gamma, RotZ);
{ Computing translation matrices. }
GetMatrixTrans(Translation[1], Translation[2], Translation[3], Trans);
GetMatrixTrans(-1.0 * Translation[1],
-1.0 * Translation[2], -1.0 * Translation[3], InverseTrans);
{ Computes rotation matrix. }
GetUnitMatrix(Matr);
Mul3DMatrix(InverseTrans, Matr, Matr);
Mul3DMatrix(RotZ, Matr, Matr);
Mul3DMatrix(RotY, Matr, Matr);
Mul3DMatrix(RotX, Matr, Matr);

Result := Matr;
end;

function TForm1.GetTransformationMatrix: TMatrix;
var Matr, Rot, Trans, InverseTrans: TMatrix;
A, B, C: Double;
begin
Rot := GetRotationMatrix;
{ Computing translation matrices. }
A := Translation[1];
B := Translation[2];
C := Translation[3];

GetMatrixTrans(A, B, C, Trans);
GetMatrixTrans(-1.0 * A, -1.0 * B, -1.0 * C, InverseTrans);

GetUnitMatrix(Matr);
Mul3DMatrix(InverseTrans, Matr, Matr);
Mul3DMatrix(Rot, Matr, Matr);
Mul3DMatrix(Trans, Matr, Matr);

Result := Matr;
end;

{$hints off}
procedure TForm1.TransformPointCloudCoordinates;
var Matr: TMatrix;
i: LongInt;
Expand Down Expand Up @@ -378,7 +396,7 @@ procedure TForm1.UpdateResults(Sender: TComponent;
PrintParameters('Optimized parameters: ');

{ Transforms and prints etalon vector for clearness. }
Matr := GetTransformationMatrix;
Matr := GetRotationMatrix;
Vector[1] := 1; Vector[2] := 0; Vector[3] := 0;
MulVectMatr(Matr, Vector);
Memo1.Lines.Add('Rotated vector: ');
Expand Down

0 comments on commit 696fc55

Please sign in to comment.