我有一条船沿着样带移动,寻找动物。有人站在船的顶部,面向前方,当看到一只动物时,他正在记录离船的距离和船前部的方位。我有这方面的信息,以及看到动物时船的xy坐标。我需要根据这些信息获取动物自身的xy坐标。
我没有船原来的指南针方位,这使得这件事很棘手;但我有船的下一个GPS(xy)坐标,从中我可以计算出一个起始角度。由此,可以加上或减去观察动物的方位角,给出一个标准化的角度,该角度可用于通过三角法找到动物的xy坐标。不幸的是,我的数学能力还不能胜任这项工作。
我有几百个点,所以我需要把它放到一个Python脚本中来完成所有的点。
总之,数据集具有:
原始X,原始Y,结束(下一个)X,结束(下一个)Y,方向角,距离
编辑:对不起,我太急了,没有很好的解释。
我认为这个问题有三个阶段。
我最初使用的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)
提前感谢您的帮助!
据我所知,这是你的问题:
start
和next
你走在New
,它应该是从start
到next
的距离和方位,因为你已经面对从start
到next
。我的解决方案是:
start
到next
的规范化向量start
start
当作向量,加法的结果就是新的点因为逆时针旋转(“左”从当前点)被认为是正的,所以需要反转
bearing
,使端口与负相关联,右舷与正相关联。代码
输出:
马特的函数有一点问题,所以我用
atan2
来得到船的角度。编辑:这比我想象的要复杂。最后,你需要减去90,取反方向,从地理参考角度到三角角度。
(还有一个
angles
库(可能还有其他地理库)内置了这个功能。现在取
origX
和origY
,找到三角角并将其转换为heading
,将方向角添加到为横断面确定的角度。然后它在距离上触发,但使用转换回触发度的角度-(X-90)
。这是一种扭曲,因为我们习惯于把0
度看作北/上,但在trig中它是“向右”,trig逆时针与顺时针进行导航。输出:
这里有一个函数可以打印出一堆测试用例(使用全局变量,因此应该折叠到上面的代码中)
可能有比这更优雅的解决方案…假设我正确理解了你的问题。但是,这会给你从原来位置的方位:
(以硬编码输入为例)
相关问题 更多 >
编程相关推荐