home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 March / Chip_1998-03_cd.bin / zkuste / matemat / Vyssi / MATH2.ZIP / exmpl-1 / cpp / frmcent.cpp < prev    next >
C/C++ Source or Header  |  1997-05-22  |  3KB  |  95 lines

  1. /*===========================================================
  2.  Please note, that the program FINDCENT uses the units RChart
  3.  and NumLab, which are not supplied with the MATH2 package. If
  4.  you don't have them, you can download them from the following
  5.  WWW site:  http://www.lohninger.com/
  6.  ===========================================================*/
  7. //---------------------------------------------------------------------------
  8. #include <vcl\vcl.h>
  9. #pragma hdrstop
  10.  
  11. #include "frmcent.h"
  12. #include "Matrix.hpp"
  13. #include "DCommon.hpp"
  14. #include "Math2.hpp"
  15. //---------------------------------------------------------------------------
  16. #pragma link "NumLab"
  17. #pragma link "RChart"
  18. #pragma link "Matrix"
  19. #pragma link "Math2"
  20. #pragma resource "*.dfm"
  21.  
  22. TForm1 *Form1;
  23. const int NData = 200;                    // number of data points
  24. const int NCenters = 10;                  // number of centers
  25. TMatrix *Data = new TMatrix(2,NData);
  26. TMatrix *Centers = new TMatrix(2,NCenters);
  27.  
  28. //---------------------------------------------------------------------------
  29. __fastcall TForm1::TForm1(TComponent* Owner)
  30.     : TForm(Owner)
  31. {
  32. }
  33. //---------------------------------------------------------------------------
  34. void __fastcall TForm1::BButExitClick(TObject *Sender)
  35. {
  36. Close();    
  37. }
  38. //---------------------------------------------------------------------------
  39. void __fastcall TForm1::BButCreateDClick(TObject *Sender)
  40. {
  41. int i;
  42.  
  43. RChart1->ClearGraf();
  44. RChart1->DataColor = clBlack;
  45. for (i=1; i<= NData/2; i++)
  46.   {
  47.   Data->Elem[1][i] = 0.05*RChart1->RangeHiX+0.0009*RChart1->RangeHiX*random(1000);
  48.   Data->Elem[2][i] = 0.05*RChart1->RangeHiY+0.0009*RChart1->RangeHiY*random(1000);
  49.   RChart1->MarkAt (Data->Elem[1][i],Data->Elem[2][i],7);
  50.   }
  51. for (i=NData/2; i<=NData-20; i++)
  52.   {
  53.   Data->Elem[1][i] = 0.15*RChart1->RangeHiX+0.0004*RChart1->RangeHiX*random(1000);
  54.   Data->Elem[2][i] = 0.15*RChart1->RangeHiY+0.0004*RChart1->RangeHiY*random(1000);
  55.   RChart1->MarkAt (Data->Elem[1][i],Data->Elem[2][i],7);
  56.   }
  57. for (i=NData-20; i<=NData; i++)
  58.   {
  59.   Data->Elem[1][i] = 0.25*RChart1->RangeHiX+0.0002*RChart1->RangeHiX*random(1000);
  60.   Data->Elem[2][i] = 0.25*RChart1->RangeHiY+0.0002*RChart1->RangeHiY*random(1000);
  61.   RChart1->MarkAt (Data->Elem[1][i],Data->Elem[2][i],7);
  62.   }
  63. RChart1->ShowGraf();
  64. }
  65. //---------------------------------------------------------------------------
  66. void __fastcall TForm1::FormCreate(TObject *Sender)
  67. {
  68. Data->Fill (0);
  69. Centers->Fill (0);
  70. }
  71. //---------------------------------------------------------------------------
  72. void __fastcall ShowProgress (long cnt)
  73. {
  74. Form1->NLabProcCnt->Value = 100.0*cnt/NData;
  75. }
  76. //---------------------------------------------------------------------------
  77. void __fastcall TForm1::BButCalcCentClick(TObject *Sender)
  78. {
  79. double MeanDist;
  80. int i;
  81.  
  82. ProcStat = 0;
  83. MathFeedBackProc = ShowProgress;
  84. NLabProcCnt->Visible = true;
  85. NLabProcCnt->LeftText = "... calculating";
  86. NLabProcCnt->RightText = "% done";
  87. FindCenters (Data, 1, Data->NrOfRows, NCenters, Centers, MeanDist); // mean distance
  88. RChart1->DataColor = clRed;
  89. for (i=1; i<=NCenters; i++)
  90.   RChart1->MarkAt (Centers->Elem[1][i],Centers->Elem[2][i],12);
  91. RChart1->ShowGraf();
  92. MathFeedBackProc = NULL;
  93. NLabProcCnt->Visible = false;
  94. }
  95. //---------------------------------------------------------------------------