Guest User

Untitled

a guest
Dec 13th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3.  
  4. def isCross(a1, a2, b1, b2):
  5. #представление точек в координатах
  6. x1a, y1a, x2a, y2a, x1b, y1b, x2b, y2b = a1[0], a1[1], a2[0], a2[1], b1[0], b1[1], b2[0], b2[1]
  7. def div(a, b): # проверка деления на 0
  8. if b != 0:
  9. return a / b
  10. else:
  11. return ...
  12.  
  13. def normir(A, B, C): # функция нормирования
  14. if A != 0:
  15. A, B, C = 1.0, B / A, C / A
  16. else:
  17. A, B, C = A / B, 1.0, C / B
  18. return A, B, C
  19.  
  20. # Ax+By+C=0 нормированое уравнение прямой в общем виде
  21. Aa, Ba, Ca = normir(y1a - y2a, x2a - x1a, x1a * y2a - x2a * y1a)
  22. Ab, Bb, Cb = normir(y1b - y2b, x2b - x1b, x1b * y2b - x2b * y1b)
  23.  
  24. if div(Aa, Ba) == div(Ab, Bb): # прямые параллельны
  25. # Если лежат на одной прямой и накладываются
  26. return (Ca == Cb) and ((x1b <= x1a <= x2b and y1b <= y1a <= y2b) or (x1b <= x2a <= x2b and y1b <= y2a <= y2b))
  27.  
  28. # Решение системы уравний прямых
  29. Mtrx = np.array([[Aa, Ba], [Ab, Bb]])
  30. Carr = np.array([-Ca, -Cb])
  31. x, y = np.linalg.solve(Mtrx, Carr)
  32.  
  33. # Если точка пересечения пренадлежит первому отрезку
  34. return x1a <= x <= x2a and y1a <= y <= y2a
  35.  
  36. #двумерный массив точек фигуры
  37. fig1=np.array([[1,1],[1,5],[5,5],[5,1],[4,0]])
  38. fig2=np.array([[0,0],[0,3],[3,3],[3,0]])
  39. #Цикличный сдвиг массива на единицу
  40. fir1=np.roll(fig1,-2)
  41. fir2=np.roll(fig2,-2)
  42.  
  43. cross = False
  44. for i in range(len(fig1)):
  45. if cross:
  46. break
  47. for j in range(len(fig2)):
  48. if isCross(fig1[i],fir1[i],fig2[j],fir2[j]):
  49. cross = True
  50. break
  51. if cross:
  52. print('фигуры пересекаются')
  53. else:
  54. print('фигуры не пересекаются')
  55.  
  56. plt.scatter(x = fig1[...,0],y = fig1[...,1])
  57. plt.scatter(x = fig2[...,0],y = fig2[...,1])
  58. plt.show()
Add Comment
Please, Sign In to add comment