首页 > 解决方案 > Python中的向量:计算两个向量之间的角度(BASIC)

问题描述

这是我在这个问答网站上的第一篇文章!

在下文中,我将向您展示我编写的一些代码,并且我一直在思考这些代码。它是关于计算两个向量之间的内角。我可能知道围绕这个主题有很多问题,但我来到这里是希望让一些人查看我的代码并告诉我,为什么它没有打印出预期的答案。

例如,如果我使用 vectora = [-8 , -13, -9]和 vector b = [0, 0, 1],结果应该是 30°。

然而,事实并非如此。我怀疑我的错误与arccos函数的错误实现有关:

import math
import numpy as np

def converter():

    print("-+-+-+-+-+- Winkelberechnung zwischen Gerade und Gerade -+-+-+-+-+-")
 
    rx1 = float(input("X- Wert (Richtungsvektor #1): "))
    ry1 = float(input("Y- Wert (Richtungsvektor #1): "))
    rz1 = float(input("Z- Wert (Richtungsvektor #1): "))

    rx2 = float(input("X- Wert (Richtungsvektor #2): "))
    ry2 = float(input("Y- Wert (Richtungsvektor #2): "))
    rz2 = float(input("Z- Wert (Richtungsvektor #2): "))

    rich1 = [rx1, ry1, rz1]
    rich2 = [rx2, ry2, rz2]

    # Winkel Berechnung: Skalarprodukt durch Beträge - davon den arccos?

    skala = rich1[0] * rich2[0] + rich1[1] * rich2[1] + rich1[2] * rich2[2]

    b_von_r1 = math.sqrt(rich1[0]**2 + rich1[1]**2 + rich1[2]**2) # winkel_test  
    b_von_r2 = math.sqrt(rich2[0]**2 + rich2[1]**2 + rich2[2]**2)

    angle = np.arccos(skala / (b_von_r1 * b_von_r2)) 

    if angle > 90:
        angle = 180 - angle
    else:
        pass

    print(angle)

converter()

标签: pythonnumpy

解决方案


arccos 以弧度返回角度,而不是度数。


推荐阅读