我有一艘船沿着样带移动,寻找动物。有人站在船的顶部,面朝前方,并在看到动物时记录着到船的距离以及从船前的方位。我有此信息以及在看到动物时船的xy坐标。我需要根据此信息获取动物本身的xy坐标。
我没有船上的原始罗盘方位,这很棘手。但是我所要做的是船的下一个GPS(xy)坐标,从中可以计算出起始角度。据此,应该有可能增加或减去观察动物时所产生的方位角,以提供归一化的角度,该角度可用于使用三角函数找到动物的xy坐标。不幸的是,我的数学技能还不能完全胜任这项工作。
我有几百个要点,因此我需要将其放入Python脚本中以了解所有要点。
总而言之,数据集具有:
原始X,原始Y,终点(下一个)X,终点(下一个)Y,方位角,距离
编辑:对不起,我很着急,没有很好地解释这一点。
我看到这个问题有3个阶段。
查找样条的原始方位
查找相对于样点的方位
根据此归一化的角度和起点xy到船的距离找到点的新坐标
我最初使用的Python代码在下面,尽管使用不多-给出的数字仅是示例。
distFromBoat = 100
bearing = 45
lengthOpposite = origX-nextX
lengthAdjacent = origY - nextY
virtX = origX #virtual X
virtY = origY-lengthOpposite #virtual Y
angle = math.degrees(math.asin(math.radians((lengthOpposite/transectLen))))
newangle = angle + bearing
newLenAdj = math.cos(newangle)*distFromBoat
newLenOpp = math.sqrt(math.pow(distFromBoat,2) + math.pow(newLenAdj,2) - 2*(distFromBoat*newLenAdj)*(math.cos(newangle)))
newX = virtX-newLenOpp
newY = origY-newLenAdj
print str(newX) +"---"+str(newY)
感谢您的任何帮助!
最佳答案
据我了解,这是您的问题:
您有2个点,分别是start
和next
假设您已经面对着从New
到start
的位置,则要查找第三个点start
的坐标,该坐标应该与next
保持一定距离并保持一定方位。
我的解决方案是这样的:
创建从start
到next
的归一化向量
通过给定方位旋转标准化向量
将标准化的旋转矢量乘以您的距离,然后将其添加到start
将start
视为向量,相加的结果是您的新观点
因为逆时针旋转(从当前点向左旋转)被认为是正值,所以您需要反转bearing
,以使端口与负值关联,而右舷与正值关联。
码
import math
origX = 95485
origY = 729380
nextX = 95241
nextY = 729215
distance = 2000.0
bearing = 45
origVec = origX, origY
nextVec = nextX, nextY
#Euclidean distance between vectors (L2 norm)
dist = math.sqrt((nextVec[0] - origVec[0])**2 + (nextVec[1] - origVec[1])**2)
#Get a normalized difference vector
diffVec = (nextVec[0] - origVec[0])/dist, (nextVec[1] - origVec[1])/dist
#rotate our vector by bearing to get a vector from orig towards new point
#also, multiply by distance to get new value
#invert bearing, because +45 in math is counter-clockwise (left), not starboard
angle = math.radians(-bearing)
newVec = origVec[0]+(diffVec[0]*math.cos(angle) - diffVec[1]*math.sin(angle))*distance, \
origVec[1]+(diffVec[0]*math.sin(angle) + diffVec[1]*math.cos(angle))*distance
print newVec
输出:
(93521.29597031244,729759.2973553676)
关于python - 根据给定的距离和从样条线的方位移动xy坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22668502/