日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

          歡迎訪問 生活随笔!

          生活随笔

          當前位置: 首頁 > 编程语言 > python >内容正文

          python

          python计算线段夹角

          發布時間:2023/12/20 python 47 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 python计算线段夹角 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

          計算兩條線段之間的夾角

          1. 問題與解決思路

          如上圖所示,要求圖中線段AB,CD之間的夾角(AB,CD都沒有方向),可以按照如下步驟計算:

        1. 計算AB線段與X軸的夾角.
        2. 計算CD線段與Y軸的夾角.
        3. 合并兩個夾角,因為求的是最小角度,所以需要對180進行求余,得到的角度為最后結果.
        4. 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 mathclass Point:"""2D坐標點"""def __init__(self, x, y):self.X = xself.Y = yclass Line:def __init__(self, point1, point2):"""初始化包含兩個端點:param point1::param point2:"""self.Point1 = point1self.Point2 = point2def GetAngle(line1, line2):"""計算兩條線段之間的夾角:param line1::param line2::return:"""dx1 = line1.Point1.X - line1.Point2.Xdy1 = line1.Point1.Y - line1.Point2.Ydx2 = line2.Point1.X - line2.Point2.Xdy2 = line2.Point1.Y - line2.Point2.Yangle1 = 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 - insideAngleinsideAngle = insideAngle % 180return insideAngleif __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°

          總結

          以上是生活随笔為你收集整理的python计算线段夹角的全部內容,希望文章能夠幫你解決所遇到的問題。

          如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。