如何使用python从坐标和时钟方向获取角度

2024-04-20 11:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着从一些轨迹中得到旋转的角度。我有一个数据框,如下所示:

    TRACK_ID  POSITION_X  POSITION_Y  POSITION_T
0          1     12.3550      9.7230       0.000
1          1     12.2365      9.7232       0.055
2          1     12.2360      9.9560       0.110
3          1     12.1570      9.9950       0.165
4          1     12.2370     10.1350       0.220
5          1     12.3100      9.8210       0.275
6          1     12.5600      9.6810       0.330
7          1     12.4860      9.6520       0.385
8          1     12.2990      9.8360       0.440
9          1     12.3170      9.8300       0.495
10         1     12.3060      9.7880       0.550
11         1     12.2810      9.7560       0.605
12         1     12.4050      9.7610       0.660
13         1     12.5380      9.7470       0.715

这给了我如下轨迹:

enter image description here

为方便起见,前两段的角度约为180˚和90˚(如果我们使用逆时针方向)

我的代码成功地测量了第一个段,但当段超过180˚时,我仍然发现一些错误:

df = pd.read_csv('coordinates.csv')
coords=['POSITION_X', 'POSITION_Y']
diff =  df[coords].shift(-1) - df[coords] #segments
m = (diff['POSITION_Y']/diff['POSITION_X']) #slopes
df['angles'] = np.degrees(np.arctan(m)) #angles 
df['new'] = df['angles'].apply(lambda x: 180 + x  if(x<0) else x)

其输出为:

TRACK_ID  POSITION_X  POSITION_Y  POSITION_T     angles         new
0          1     12.3550      9.7230       0.000  -0.096702  179.903298
1          1     12.2365      9.7232       0.055 -89.876942   90.123058
2          1     12.2360      9.9560       0.110 -26.274212  153.725788
3          1     12.1570      9.9950       0.165  60.255119   60.255119
4          1     12.2370     10.1350       0.220 -76.912133  103.087867
5          1     12.3100      9.8210       0.275 -29.248826  150.751174
6          1     12.5600      9.6810       0.330  21.399810   21.399810
7          1     12.4860      9.6520       0.385 -44.536702  135.463298
8          1     12.2990      9.8360       0.440 -18.434949  161.565051
9          1     12.3170      9.8300       0.495  75.323607   75.323607
10         1     12.3060      9.7880       0.550  52.001268   52.001268
11         1     12.2810      9.7560       0.605   2.309063    2.309063
12         1     12.4050      9.7610       0.660  -6.009006  173.990994
13         1     12.5380      9.7470       0.715        NaN         NaN 

在“新”列中,我们在第5段有第一个错误(值103.087867),因为角度必须大于270˚ 我的问题是如何逆时针测量角度? 提前谢谢


Tags: csviddfnew轨迹错误npposition