Python как получить угол из 3 точек, используя столбцы данных панды - PullRequest
1 голос
/ 21 февраля 2020

Я хочу вычислить угол из 3 точек, используя 6 значений (x и y для каждой из 3 точек). Эти значения перечислены в фрейме данных panda. Однако я получаю много значений в качестве вывода, и они не углы. Также дайте мне знать, если у вас есть идея о том, как решить проблему (код, который я написал, довольно уродлив, я знаю ...). Я пробовал разные способы, но это единственный, который я могу использовать с панда данных, и я совсем новичок в python ... Любое понимание будет полезно Функция для вычисления углов, используя 3 точки

    def FindAngle3Points (a,b,c):
#a = np.array([6,0])
#b = np.array([0,0]) this is the vertex of the angle
#c = np.array([0,6])

    ba = a - b
    bc = c - b

    cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))
    angle = np.arccos(cosine_angle)

    print(np.degrees(angle))

Функция для вычисления углов из 6 столбцов

def MakePointFromCoord(X1column, Y1column, X2column, Y2column, X3column, Y3column):
    alpha_column = []
    for x1 in X1column:
        for y1 in Y1column:
            for x2 in X2column:
                for y2 in Y2column:
                    for x3 in X3column:
                        for y3 in Y3column:
                            a = np.array([x1,y1])
                            b = np.array([x2,y2])
                            c = np.array([x3,y3])
                            alpha = FindAngle3Points(a,b,c)
                            alpha_column.append(alpha)
    return(alpha_column)

И вот код, который я использовал:

# Create Pandas DataFrame 
import pandas as pd 

# Initialise data to lists. 
data = [{'x1': 1, 'y1': 2, 'x2':3, 'y2': 1, 'x3': 2, 'y3':3}, {'x1': 5, 'y1': 7, 'x2':3, 'y2': 8, 'x3': 2, 'y3':3}, {'x1': 1, 'y1': 7, 'x2':5, 'y2': 8, 'x3': 4, 'y3':3}] 

# Creates DataFrame. 
df = pd.DataFrame(data) 

# Print the data 
df 

#Compute angles from 6 coordinates
MakePointFromCoord(df.x1, df.y1, df.x2, df.y2, df.x3, df.y3)

1 Ответ

0 голосов
/ 21 февраля 2020

import numpy as np
from math import acos, degrees
import pandas as pd 

# Initialise data to lists. 
data = [{'x1': 1, 'y1': 2, 'x2':3, 'y2': 1, 'x3': 2, 'y3':3}, {'x1': 5, 'y1': 7, 'x2':3, 'y2': 8, 'x3': 2, 'y3':3}, {'x1': 1, 'y1': 7, 'x2':5, 'y2': 8, 'x3': 4, 'y3':3}] 

# Creates DataFrame. 
df = pd.DataFrame(data)
angles=[]
for i in range(df.shape[0]):
    x1,y1=df.x1[i],df.y1[i]
    x2,y2=df.x2[i],df.y2[i]
    x3,y3=df.x3[i],df.y3[i]
    a=((x3-x1)**2+(y3-y1)**2)**0.5
    b=((x1-x2)**2+(y1-y2)**2)**0.5
    c=((x2-x3)**2+(y2-y3)**2)**0.5

    angle=degrees(acos((b*b+c*c-a*a)/(2.0*b*c)))
    angles.append(round(angle,2))

df['Angles']=angles
df.head()

    x1  x2  x3  y1  y2  y3  Angles
0   1   3   2   2   1   3   36.87
1   5   3   2   7   8   3   74.74
2   1   5   4   7   8   3   64.65
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...