先写一个打印函数,方便管理
import numpy as np
def text_input(txt):
print(txt)
接着就是写两条线段各自分别的斜率:
class k_Slope:
def __init__(self, point_1: tuple, point_2: tuple):
self.x1, self.y1 = point_1
self.x2, self.y2 = point_2
def k_cala(self):
k_slope = (self.y2 - self.y1) / (self.x2 - self.x1)
return k_slope
往下面就是对角度的计算了:
class Angle_calc:
"""
sample:
w1 = k_Slope((1,2),(4,1))
k1 = w1.k_cala()
w2 = k_Slope((1,1),(3,5))
k2 = w2.k_cala()
A = Angle_calc(k1,k2)
a = A.angel_calculation() # 计算锐角夹角的正切值
A.angel_calc(a) # 计算角度值
np.sin(A.angel_calc(a)) # 计算正弦值
"""
def __init__(self, k1, k2):
self.k1 = k1
self.k2 = k2
def angel_calculation(self):
tan_angel_between = abs((self.k1 - self.k2) / (1 + self.k1 * self.k2))
return tan_angel_between
@staticmethod
def angel_calc(tan_num):
angel = np.arctan(tan_num)
return angel
@staticmethod
def Add_or_not(angel):
if 0 < np.sin(angel) < 1:
return text_input("两线段相交,存在交点")
else:
return text_input("两线段在当前区域内不相交,不存在交点")
计算两条直线的交点坐标,这里坐标公式就不展示了,大家可以自己推导:
class Intersection_calculation(k_Slope, Angle_calc):
"""
sample:
A = k_Slope((0.5,3.5),(0,4))
B = k_Slope((0.25,1.5),(2,5))
k1 = A.k_cala()
k2 = B.k_cala()
C = Intersection_calculation(k1,k2,(0.5,3.5),(0.25,1.5))
a,b = C.get_Intersection_Y()
"""
def __init__(self, k1, k2, point_1: tuple, point_2: tuple): # 这里的point_1指代的是一条直线上的某点坐标,这里的point_2指代的是另外一条直线上的某点坐标
super().__init__(point_1, point_2)
self.k1 = k1
self.k2 = k2
self.x1, self.y1 = point_1
self.x3, self.y3 = point_2
def get_Intersection_Y(self): # 计算交点坐标
Intersection_x = (self.k1 * self.x1 - self.k2 * self.x3 + self.y3 - self.y1) / (self.k1 - self.k2)
Intersection_y = self.k1 * (Intersection_x - self.x1) + self.y1
return Intersection_x, Intersection_y
记录完毕