Advertisement
Guest User

Geom

a guest
Nov 22nd, 2019
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. Даны коэффициенты A1, B1, C1 уравнения первой прямой и коэффициенты A2, B2, C2 уравнения второй прямой. Требуется:
  2.  
  3. Построить направляющие векторы для обеих прямых (вывести координаты)
  4. Найти точку пересечения двух прямых или вычислить расстояние между ними, если они параллельны
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14. #include<bits/stdc++.h>
  15.  
  16. using namespace std;
  17.  
  18. int sqr(int a)
  19. {
  20. return (a) * (a);
  21. }
  22.  
  23. struct pt
  24. {
  25. double x, y;
  26.  
  27. pt(){}
  28. pt(double _x, double _y)
  29. {
  30. x = _x, y = _y;
  31. }
  32.  
  33. double dis(pt &a)
  34. {
  35. return sqrt(sqr(a. x - x) + sqr(a.y - y));
  36. }
  37. };
  38.  
  39. struct vt
  40. {
  41. double a, b;
  42.  
  43. vt(){}
  44. vt(double _a, double _b)
  45. {
  46. a = _a, b = _b;
  47. }
  48.  
  49. double len()
  50. {
  51. return sqrt(sqr(a) + sqr(b));
  52. }
  53.  
  54. vt ed ()
  55. {
  56. return vt(a / len(), b / len());
  57. }
  58.  
  59. vt operator * (int k)
  60. {
  61. return vt(a * k, b * k);
  62. }
  63. };
  64.  
  65. //Векторное произведение
  66. int tr(pt a, pt b, pt c)
  67. {
  68. vt p1 = vt(b.x - a.x, b.y - a.y);
  69. vt p2 = vt(c.x - b.x, c.y - b.y);
  70. return p1.a*p2.b - p1.b*p2.a;
  71. }
  72.  
  73. int main()
  74. {
  75. pt x, y;
  76. pt x1, y1;
  77. int A1, B1, C1;
  78. int A2, B2, C2;
  79. cin >> A1 >> B1 >> C1;
  80. cin >> A2 >> B2 >> C2;
  81. //Ищу две точки, куда которые лежат на этих двух прямых
  82. if (B1 != 0)
  83. {
  84. x = pt(0, -(C1/B1));
  85. y = pt(1, (-(A1 + C1) / B1));
  86. }
  87. else
  88. {
  89. x = pt(-(C1/A1), 0);
  90. y = pt((-(B1 + C1) / A1), 1);
  91. }
  92. if (B2 != 0)
  93. {
  94. x1 = pt(0, -(C2/B2));
  95. y1 = pt(1, (-(A2 + C2) / B2));
  96. }
  97. else
  98. {
  99. x1 = pt(-(C2/A2), 0);
  100. y1 = pt((-(B2 + C2) / A2), 1);
  101. }
  102. cout << y.x - x.x << " " << y.y - x.y << endl;
  103. cout << y1.x - x1.x << " " << y1.y - x1.y << endl;
  104. //Проверяю на пресечение
  105. double d = tr(x, x1, y1) / x1.dis(y1);
  106. double z = A1 * B2 - A2 * B1;
  107. double p = (C1 * B2 - C2 * B1);
  108. double r = (A1 * C2 - A2 * C1);
  109. if (z == 0)
  110. {
  111. cout << fixed << setprecision(10) << d;
  112. }
  113. else
  114. {
  115. cout << fixed << setprecision(10) << (-p) / z << " " << (-r)/z;
  116. }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement