添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如上图所示,要求图中线段AB,CD之间的夹角(AB,CD都没有方向),可以按照如下步骤计算:

  1. 计算AB线段与X轴的夹角.
  2. 计算CD线段与Y轴的夹角.
  3. 合并两个夹角,因为求的是最小角度,所以需要对180进行求余,得到的角度为最后结果.

2. 具体步骤

首先计算出AB线段与X轴的夹角,将AB线段进行分解,如下图:

其中角度的计算公式为

◬=arctan(dy/dx)

同理求得CD线段与X轴的角度,这里存在一个问题,由于线段不是向量,因此角度可能为60°,也可能为360°-60°=300°,因此后续合并两个角度的时候需要解决这个问题.

合并的原理也比较简单,由于用python的 math.atan2(y,x) 函数计算线段与X轴夹角,返回的角度在[-180,180],也就是说在1,2象限为正数,3,4象限为负数,在合并两个夹角时考虑正负号,计算完成后再对180°求余即可.

1.3 代码

import math
class Point:
    2D坐标点
    def __init__(self, x, y):
        self.X = x
        self.Y = y
class Line:
    def __init__(self, point1, point2):
        初始化包含两个端点
        :param point1:
        :param point2:
        self.Point1 = point1
        self.Point2 = point2
def GetAngle(line1, line2):
    计算两条线段之间的夹角
    :param line1:
    :param line2:
    :return:
    dx1 = line1.Point1.X - line1.Point2.X
    dy1 = line1.Point1.Y - line1.Point2.Y
    dx2 = line2.Point1.X - line2.Point2.X
    dy2 = line2.Point1.Y - line2.Point2.Y
    angle1 = math.atan2(dy1, dx1)
    angle1 = int(angle1 * 180 / math.pi)
    # print(angle1)
    angle2 = math.atan2(dy2, dx2)
    angle2 = int(angle2 * 180 / math.pi)
    # print(angle2)
    if angle1 * angle2 >= 0:
        insideAngle = abs(angle1 - angle2)
    else:
        insideAngle = abs(angle1) + abs(angle2)
        if insideAngle > 180:
            insideAngle = 360 - insideAngle
    insideAngle = insideAngle % 180
    return insideAngle
if __name__ == '__main__':
    L1 = Line(Point(0, 0), Point(-2, 0))
    L2 = Line(Point(0, 0), Point(2, 0))
    res = GetAngle(L1, L2)
    print(res) # 结果为0°
	计算机视觉-物体检测-通用解决框架Mask-Rcnn实战课程旨在帮助同学们快速掌握物体检测领域当下主流解决方案与网络框架构建原理,基于开源项目解读其应用领域与使用方法。通过debug方式,详细解读项目中每一模块核心源码,从代码角度理解网络实现方法与建模流程。为了方便同学们能将项目应用到自己的数据与任务中,实例演示如何针对自己的数据集制作标签与代码调整方法,全程实战操作,通俗讲解其中复杂的网络架构。
                            浏览器打开
class Line(object):  # 直线由两个点组成
    def __init__(self, p1=Point(0, 0), p2=Point(2, 2)):
        self.p...
                            浏览器打开
                                Can anybody suggest how to calculate angle between three points (lat long coordinates)A : (12.92473, 77.6183)B : (12.92512, 77.61923)C : (12.92541, 77.61985)解决方案I see two main ways to solve your probl...
                            浏览器打开
print(“请输入边长c:”)
c = float(input())   #获取边长c
if(a+b>c and a+c>b and b+c>a):    #判断三边是否能构成...
                            浏览器打开
                                近期在用 OpenCV 时需要涉及到一些点与直线关系。这都是很早以前的中学知识了,无奈只好重新捡起来。本次项目主要需要用到以下三种计算1. 点到直线距离2. 两条直线交点3. 两条直线夹角1. 点到直线距离由于项目中得到点的坐标最容易,因此采用向量法进行所有的数学计算最清晰明了。点到直线距离就采用向量法推导。 推导过程: 代码实现:array_longi  = np.array([x2-x1, y...
                            浏览器打开
                                ![图片说明](https://img-ask.csdn.net/upload/201901/03/1546480685_825964.jpg)
如图所示的两条线,求它们的夹角,小白不会,求解决!!!
                            浏览器打开
    这时正切函数图像,高中的我们就应该知道,正切函数是周期函数,即同一个值,有很多角度值对应,那么我们用math.h 数学库里的函数atan2(y,x)的时候,返回的到底是什么呢?
2,    弧度制和角度制转换
                            浏览器打开