daily pastebin goal
3%
SHARE
TWEET

Untitled

a guest Dec 13th, 2018 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top