python-abs函数中的数学计算

python-abs函数中的数学计算,python,math,Python,Math,我试图用python创建这个等式。 如果已经询问过,请提前道歉!如果是这样,我找不到它,所以请分享这篇文章 我遇到了一个问题,我不知道如何对红方块中的部分进行编码(见等式)。 据我所知,“| u1 |”代表u1的绝对值。但是,如果我像编写方程式一样对其进行编码,即abs(u1)abs(u2),我会得到一个语法错误(这是我所期望的) 我的问题是代码行: angle = np.arccos((Mu1*Mu2)/(abs(Mu1)abs(Mu2))) 我的完整代码是: import numpy as

我试图用python创建这个等式。 如果已经询问过,请提前道歉!如果是这样,我找不到它,所以请分享这篇文章

我遇到了一个问题,我不知道如何对红方块中的部分进行编码(见等式)。 据我所知,“| u1 |”代表u1的绝对值。但是,如果我像编写方程式一样对其进行编码,即abs(u1)abs(u2),我会得到一个语法错误(这是我所期望的)

我的问题是代码行:

angle = np.arccos((Mu1*Mu2)/(abs(Mu1)abs(Mu2)))
我的完整代码是:

import numpy as np
from math import sqrt 

#first direction vector

#punt 1, PQ
#   [x,y]
P = (1,1)
Q = (5,3)

#punt 2, RS
R = (2,3)
S = (4,1)

#direction vector = arctan(yq-yp/xq-xp)

#create function to calc direction vector of line
def dirvec(coord1, coord2):
    #pull coordinates into x and y variables
    x1 , y1 = coord1[0], coord1[1]
    x2 , y2 = coord2[0], coord2[1]
    #calc vector see article
    v = np.arctan((y2-y1)/(x2-x1))
    #outputs in radians, not degrees
    v = np.degrees(v)
    return v

print(dirvec(P,Q))
print(dirvec(R,S))

Mu1 = dirvec(P,Q)
Mu2 = dirvec(R,S)

angle = np.arccos((Mu1*Mu2)/(abs(Mu1)abs(Mu2)))

print(angle)
我试过的东西:

  • 将两个abs相乘,但每次我都会得到相同的数字(pi): np.arccos((Mu1*Mu2)/(abs(Mu1)*abs(Mu2)))
  • +
    -
    但我无法想象这些是正确的: np.arccos((Mu1Mu2)/(abs(Mu1)+abs(Mu2)))np.arccos((Mu1Mu2)/(abs(Mu1)-abs(Mu2)))

在公式中,分子是两个向量的点积,分母是两个向量范数的乘积

以下是编写公式的简单方法:

导入数学
def dot_产品(u,v):
(x1,y1)=u
(x2,y2)=v
返回x1*x2+y1*y2
def标准(u):
(x,y)=u
返回math.sqrt(x*x+y*y)
def get_角度(u,v):
返回math.acos(点积(u,v)/(范数(u)*范数(v)))
def make_向量(p,q):
(x1,y1)=p
(x2,y2)=q
返回(x2-x1,y2-y1)
#第一方向向量
#平底船1号,PQ
#[x,y]
P=(1,1)
Q=(5,3)
#平底船2号,RS
R=(2,3)
S=(4,1)
角度=获取角度(生成向量(p,q),生成向量(r,s))
打印(角度)

在我看来,代码的结果总是pi或0。若其中一个mu1或mu2为负,则为pi,若两者均为负或正,则为零。 如果我没记错的话: 给定两个向量P和Q,假设P=(x,y)和Q=(a,b)
然后abs(P)=sqrt(x^2+y^2)和P.Q=xa+yb。所以cos@=P.Q/(abs(P)*abs(Q))。如果我不清楚,你可以举一个你打算做什么的例子,好吧,很明显我在解释中犯了一个错误

我要感谢大家的解决方案

经过一些困惑之后,似乎:

导入数学
将numpy作为np导入
#平底船1号,PQ
#[x,y]
P=(1,1)
Q=(5,3)
x1=P[0]
x2=Q[0]
y1=P[1]
y2=Q[1]
#平底船2号,RS
R=(0,2)
S=(4,1)
x3=R[0]
x4=S[0]
y3=R[1]
y4=S[1]
角度=np.arccos((x2-x1)*(x4-x3)+(y2-y1)*(y4-y3))/(数学sqrt((x2-x1)**2+(y2-y1)**2)*数学sqrt((x4-x3)**2+(y4-y3)**2)))

打印(角度)
Try
angle=np.arccos((Mu1*Mu2)/(abs(Mu1)*abs(Mu2)))
Hi-Anup,我看我不太清楚,我试过了,但每次都得到3,14(pi)作为角度。我不认为这是正确的。嗨,Florian,你能用计算器提供预期的输出吗?@SiHa的确,我希望得到两点的两条线之间的角度。在这种情况下,该角度每次为3.14(pi)。(只要线路交叉)。我认为这是不对的。然而,我可能误解了这个等式,我很确定这个公式期望这两个变量是向量,而不是角度。(我绝对肯定它不期望角度以度为单位!)分子是两个向量的点积,分母是它们大小的乘积。嗨@Stef,谢谢你的代码!我想你是对的。我刚刚偶然发现了一个网页,它完全满足了我的需要,所以我将尝试将其用于我的代码,并与您的代码结合使用。