![](/img/trans.png)
[英]Calculate the angle of two connected line segments based on a randomly position point
[英]Find the angle of two connected line segments based upon a random point
在你的函数中,你可以在你的随机点和基地之间创建一个中间段,然后添加这两个角度
angle(BA,BE) + angle(BE,BC);
您需要一些基本功能,如标量积和叉积来实现这一点;
import math
from collections import namedtuple
Point = namedtuple('Point', 'x y')
# define nom of a vector
def norm(v):
n = math.sqrt(v.x*v.x + v.y*v.y)
return n
# normalise a vector
def normedVec(v):
n = norm(v)
nv = Point(v.x/n, v.y/n)
return nv
# print angle in degrees
def printAngle(name,rad):
deg = rad * 180.0 / math.pi
print("{}={}".format(name,deg))
# scalar (aka dot)product of 2 vectors
def dotProduct(v1,v2):
d = v1.x*v2.x + v1.y*v2.y
print("dot={}".format(d))
return d
# vectorial (aka cross) product
def crossProd(v1,v2):
c = v1.x*v2.y - v1.y*v2.x
print("c={}".format(c))
return c
# compute angle between 2 vectoris
def angle(s1,s2):
n1 = normedVec(s1)
n2 = normedVec(s2)
cosAngle = dotProduct(n1,n2)
d = crossProd(n1,n2)
angle = math.acos(cosAngle)
if d <= 0:
angle = - angle
printAngle("angle",angle)
return angle
# compute angle between 2 vectors using point orientation
def angleOriented(AB,AC,AX):
# Compute angle between 2 vectors
ABC = angle(AB, AC)
# Compute angle to random point
ABX = angle(AB, AX)
# if angle is negative then change angle sign
if ABX < 0:
ABC = - ABC
# put angle between 0 and 360
while ABC < 0:
ABC += 2*math.pi
printAngle("Oriented",ABC)
# test
AB = Point(1,0)
AC = Point(-1,1)
AD = Point(0,-1)
AE = Point(0,1)
ABE = angleOriented(AB,AC,AE)
print("-----")
ABD = angleOriented(AB,AC,AD)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.