计算两条线段的锐角夹角、以及交点坐标

这篇博客介绍了如何使用Python计算两条线段的斜率、夹角,并确定它们是否相交。通过定义`k_Slope`和`Angle_calc`类来计算斜率和角度,进一步利用`Intersection_calculation`类找到交点坐标。示例代码详细展示了计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先写一个打印函数,方便管理

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

记录完毕

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值