﻿

# треугольник

Jan 13th, 2021
708
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #include <iostream>
2. #include <cmath>
3. #include <iomanip>
4.
5. using namespace std;
6.
7. struct otrezok
8. {
9.   public:
10.   double x1, y1, x2, y2, x, y;
11.   double length;
12.
13.   otrezok(double x1, double x2,double  y1,double y2)
14.   {
15.    length = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
16.   }
17. };
18.
19. struct ygol
20. {
21.  double a;
22.  double cos_ygl, sin_ygl, tg_ygl;
23.
24. ygol (double a)
25.  {
26.   cos_ygl = cos(a*3.141592653/180.0);
27.   sin_ygl = sin(a*3.141592653/180.0);
28.
29.   if (cos_ygl !=0 )
30.     tg_ygl  = sin_ygl/cos_ygl;
31.   else tg_ygl = INT16_MAX;
32.  }
33. };
34.
35. struct direct
36. {
37.  double k = 0, b = 0;
38.  double parametr = INT16_MAX;
39. };
40.
41. struct vershina
42. {
43.    double x, y;
44.   vershina()
45.   {
46.     x = 0;
47.     y = 0;
48.   }
49. };
50.
51. direct stright(vershina one, double k)
52. {
53.   direct stright;
54.
55.   if (k != INT16_MAX)
56.     {
57.       stright.k = k;
58.       stright.b = one.y - stright.k*one.x;
59.     }
60.   else stright.parametr = one.x;
61.
62.   return stright;
63. }
64. double koeff (otrezok a, otrezok b, ygol A, double mediana)
65. {
66.   double mediana_1;
67.   mediana_1 = sqrt(a.length*a.length + b.length*b.length/4 - a.length*b.length*A.cos_ygl);
68.   double koeff = mediana/mediana_1;
69.   return koeff;
70. }
71.
72. vershina otvet (direct normal_1, direct normal_2)
73. {
74.  vershina otvet;
75.  if (normal_1.parametr == INT16_MAX && normal_2.parametr == INT16_MAX)
76.  {
77.    otvet.x = (normal_2.b - normal_1.b)/(normal_1.k - normal_2.k);
78.    otvet.y = normal_1.k*otvet.x + normal_1.b;
79.  }
80.  else if (normal_1.parametr != INT32_MAX)
81.  {
82.    otvet.x = normal_1.parametr;
83.    otvet.y = normal_2.k*otvet.x + normal_2.b;
84.  }
85.  else if (normal_2.parametr != INT16_MAX)
86.  {
87.    otvet.x = normal_2.parametr;
88.    otvet.y = normal_1.k*otvet.x + normal_1.b;
89.  }
90.  return otvet;
91. };
92.
93.  int main ()
94. {
95.   vershina A, B, C, B_1, C_1, seredina_AB;
96.   double  mediana, a, b;
97.
98.   cin >> mediana >> a >> b;
99.
100.   ygol ygol_A(a);
101.   ygol ygol_B(b);
102.
103.   B_1.x = 100;
104.
105.  direct AC = stright(A, ygol_A.tg_ygl);
106.  direct BC = stright(B_1, -ygol_B.tg_ygl);
107.
108.  C_1 = otvet(AC, BC);
109.
110.  otrezok AB_1(A.x, B_1.x,  A.y, B_1.y);
111.  otrezok AC_1 (A.x, C_1.x, A.y, C_1.y);
112.
113.  B.x = koeff(AC_1, AB_1, ygol_A, mediana)*B_1.x;
114.
115.  BC = stright(B, -ygol_B.tg_ygl);
116.  C = otvet(AC, BC);
117.
118.  cout.precision(8);
119.  cout << fixed << A.x << " " << A.y << endl;
120.  cout << fixed << B.x << " " << B.y << endl;
121.  cout << fixed << C.x << " " << C.y << " ";
122. }
RAW Paste Data