python计算线段夹角
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                python计算线段夹角
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                計(jì)算兩條線段之間的夾角
1. 問(wèn)題與解決思路
如上圖所示,要求圖中線段AB,CD之間的夾角(AB,CD都沒有方向),可以按照如下步驟計(jì)算:
2. 具體步驟
首先計(jì)算出AB線段與X軸的夾角,將AB線段進(jìn)行分解,如下圖:
其中角度的計(jì)算公式為
?=arctan(dy/dx)
同理求得CD線段與X軸的角度,這里存在一個(gè)問(wèn)題,由于線段不是向量,因此角度可能為60°,也可能為360°-60°=300°,因此后續(xù)合并兩個(gè)角度的時(shí)候需要解決這個(gè)問(wèn)題.
合并的原理也比較簡(jiǎn)單,由于用python的math.atan2(y,x)函數(shù)計(jì)算線段與X軸夾角,返回的角度在[-180,180],也就是說(shuō)在1,2象限為正數(shù),3,4象限為負(fù)數(shù),在合并兩個(gè)夾角時(shí)考慮正負(fù)號(hào),計(jì)算完成后再對(duì)180°求余即可.
1.3 代碼
import mathclass Point:"""2D坐標(biāo)點(diǎn)"""def __init__(self, x, y):self.X = xself.Y = yclass Line:def __init__(self, point1, point2):"""初始化包含兩個(gè)端點(diǎn):param point1::param point2:"""self.Point1 = point1self.Point2 = point2def GetAngle(line1, line2):"""計(jì)算兩條線段之間的夾角: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) # 結(jié)果為0°總結(jié)
以上是生活随笔為你收集整理的python计算线段夹角的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 什么是EasyUI,如何使用EasyUI
 - 下一篇: 初识easyUI