Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.22 KB | None | 0 0
  1. #pragma once
  2. #define PI 3.14159265
  3.  
  4. namespace Triangle {
  5.  
  6.     using namespace System;
  7.     using namespace System::ComponentModel;
  8.     using namespace System::Collections;
  9.     using namespace System::Windows::Forms;
  10.     using namespace System::Data;
  11.     using namespace System::Drawing;
  12.  
  13.     float GetDistance(Point A, Point B)
  14.     {
  15.         return sqrtf(powf((A.X-B.X),2) + powf((A.Y-B.Y),2));
  16.     }
  17.  
  18.     public ref struct Triangle
  19.     {
  20.         Triangle()
  21.         {
  22.             LinePen = gcnew Pen(Color::Black, 3.0f);
  23.             PointA = Point(300, 100);
  24.             PointB = Point(200, 200);
  25.             PointC = Point(400, 200);
  26.             Update();
  27.         }
  28.  
  29.         void Update()
  30.         {
  31.             SideA = GetDistance(PointB, PointC);
  32.             SideB = GetDistance(PointC, PointA);
  33.             SideC = GetDistance(PointA, PointB);
  34.  
  35.             AngleA = GetAngle(PointA);
  36.             AngleB = GetAngle(PointB);
  37.             AngleC = GetAngle(PointC);
  38.         }
  39.  
  40.  
  41.         float GetAngle(Point X)
  42.         {
  43.             if(X == PointA)
  44.                 return acos((powf(SideC, 2) + powf(SideB, 2) - powf(SideA, 2))/(2*SideB*SideC)) * 180 / PI;
  45.             if(X == PointB)
  46.                 return acos((powf(SideA, 2) + powf(SideC, 2) - powf(SideB, 2))/(2*SideA*SideC)) * 180 / PI;
  47.             if(X == PointC)
  48.                 return acos((powf(SideA, 2) + powf(SideB, 2) - powf(SideC, 2))/(2*SideA*SideB)) * 180 / PI;
  49.         }
  50.  
  51.         void Draw(Graphics^ Graphic)
  52.         {
  53.             Graphic->Clear(Color::White);
  54.             Graphic->DrawLine(LinePen, PointA, PointB);
  55.             Graphic->DrawLine(LinePen, PointB, PointC);
  56.             Graphic->DrawLine(LinePen, PointC, PointA);
  57.         }
  58.  
  59.     private:
  60.         Pen ^LinePen;
  61.  
  62.     public:
  63.         Point PointA, PointB, PointC;
  64.         float AngleA, AngleB, AngleC;
  65.         float SideA, SideB, SideC;
  66.     };
  67.  
  68.     /// <summary>
  69.     /// Zusammenfassung für MainWindow
  70.     /// </summary>
  71.     public ref class MainWindow : public System::Windows::Forms::Form
  72.     {
  73.     public:
  74.         MainWindow(void)
  75.         {
  76.             InitializeComponent();
  77.             //
  78.             //TODO: Konstruktorcode hier hinzufügen.
  79.             //
  80.  
  81.             Tri = gcnew Triangle();
  82.             PictureA = gcnew Bitmap(600, 300);
  83.             PictureB = gcnew Bitmap(600, 300);
  84.  
  85.         }
  86.  
  87.     protected:
  88.         /// <summary>
  89.         /// Verwendete Ressourcen bereinigen.
  90.         /// </summary>
  91.         ~MainWindow()
  92.         {
  93.             if (components)
  94.             {
  95.                 delete components;
  96.             }
  97.         }
  98.  
  99.     protected: Triangle^ Tri;
  100.     protected: Bitmap ^PictureA, ^PictureB;
  101.  
  102.     private: System::Void MainWindow_Load(System::Object^  sender, System::EventArgs^  e)
  103.              {
  104.                  
  105.                  Tri->Draw(Graphics::FromImage(PictureA));
  106.                  pbDrawing->Image = PictureA;
  107.  
  108.                  tbSideA->Text = Tri->SideA.ToString();
  109.                  tbSideB->Text = Tri->SideB.ToString();
  110.                  tbSideC->Text = Tri->SideC.ToString();
  111.                  tbAngleA->Text = Tri->AngleA.ToString();
  112.                  tbAngleB->Text = Tri->AngleB.ToString();
  113.                  tbAngleC->Text = Tri->AngleC.ToString();
  114.                  tbPointA->Text = Tri->PointA.ToString();
  115.                  tbPointB->Text = Tri->PointB.ToString();
  116.                  tbPointC->Text = Tri->PointC.ToString();
  117.              }
  118.  
  119.     private: System::Void MainWindow_FormClosing(System::Object^  sender, System::Windows::Forms::FormClosingEventArgs^  e)
  120.              {
  121.              }
  122.  
  123.     private: System::Void pbDrawing_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
  124.              {
  125.                  if(GetDistance(Point(e->X, e->Y), Tri->PointA) <= 10)
  126.                     this->pbDrawing->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &MainWindow::pbDrawing_MouseMove_PA);
  127.                  else if(GetDistance(Point(e->X, e->Y), Tri->PointB) <= 10)
  128.                     this->pbDrawing->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &MainWindow::pbDrawing_MouseMove_PB);
  129.                  else if(GetDistance(Point(e->X, e->Y), Tri->PointC) <= 10)
  130.                     this->pbDrawing->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &MainWindow::pbDrawing_MouseMove_PC);
  131.              }
  132.     private: System::Void pbDrawing_MouseUp(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
  133.              {
  134.                  this->pbDrawing->MouseMove -= gcnew System::Windows::Forms::MouseEventHandler(this, &MainWindow::pbDrawing_MouseMove_PA);
  135.                  this->pbDrawing->MouseMove -= gcnew System::Windows::Forms::MouseEventHandler(this, &MainWindow::pbDrawing_MouseMove_PB);
  136.                  this->pbDrawing->MouseMove -= gcnew System::Windows::Forms::MouseEventHandler(this, &MainWindow::pbDrawing_MouseMove_PC);
  137.              }
  138.     private: System::Void pbDrawing_MouseMove_PA(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
  139.              {
  140.                  Tri->PointA = Point(e->X, e->Y);
  141.                  Tri->Update();
  142.  
  143.                  if(pbDrawing->Image == PictureB)
  144.                  {
  145.                      Tri->Draw(Graphics::FromImage(PictureA));
  146.                      pbDrawing->Image = PictureA;
  147.                  }
  148.                  else
  149.                  {
  150.                      Tri->Draw(Graphics::FromImage(PictureB));
  151.                      pbDrawing->Image = PictureB;
  152.                  }
  153.  
  154.                  tbSideB->Text = Tri->SideB.ToString();
  155.                  tbSideC->Text = Tri->SideC.ToString();
  156.                  tbAngleA->Text = Tri->AngleA.ToString();
  157.                  tbAngleB->Text = Tri->AngleB.ToString();
  158.                  tbAngleC->Text = Tri->AngleC.ToString();
  159.                  tbPointA->Text = Tri->PointA.ToString();
  160.              }
  161.     private: System::Void pbDrawing_MouseMove_PB(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
  162.              {
  163.                  Tri->PointB = Point(e->X, e->Y);
  164.                  Tri->Update();
  165.  
  166.                  if(pbDrawing->Image == PictureB)
  167.                  {
  168.                      Tri->Draw(Graphics::FromImage(PictureA));
  169.                      pbDrawing->Image = PictureA;
  170.                  }
  171.                  else
  172.                  {
  173.                      Tri->Draw(Graphics::FromImage(PictureB));
  174.                      pbDrawing->Image = PictureB;
  175.                  }
  176.  
  177.                  tbSideA->Text = Tri->SideA.ToString();
  178.                  tbSideC->Text = Tri->SideC.ToString();
  179.                  tbAngleA->Text = Tri->AngleA.ToString();
  180.                  tbAngleB->Text = Tri->AngleB.ToString();
  181.                  tbAngleC->Text = Tri->AngleC.ToString();
  182.                  tbPointB->Text = Tri->PointB.ToString();
  183.              }
  184.     private: System::Void pbDrawing_MouseMove_PC(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
  185.              {
  186.                  Tri->PointC = Point(e->X, e->Y);
  187.                  Tri->Update();
  188.  
  189.                  if(pbDrawing->Image == PictureB)
  190.                  {
  191.                      Tri->Draw(Graphics::FromImage(PictureA));
  192.                      pbDrawing->Image = PictureA;
  193.                  }
  194.                  else
  195.                  {
  196.                      Tri->Draw(Graphics::FromImage(PictureB));
  197.                      pbDrawing->Image = PictureB;
  198.                  }
  199.  
  200.                  tbSideA->Text = Tri->SideA.ToString();
  201.                  tbSideB->Text = Tri->SideB.ToString();
  202.                  tbAngleA->Text = Tri->AngleA.ToString();
  203.                  tbAngleB->Text = Tri->AngleB.ToString();
  204.                  tbAngleC->Text = Tri->AngleC.ToString();
  205.                  tbPointC->Text = Tri->PointC.ToString();
  206.              }
  207.  
  208.     };
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement