在python 2.7中
尝试获取正确的时间(将小数分钟转换为默认时间HH:MM:SS)
首先我从2个不同的点(六边形图)得到距离,然后将距离乘以13.3(每分钟的单位速度)
import time
import math
from datetime import timedelta
def calculateDistance(x1,y1,x2,y2):
dist = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
return dist
dist = calculateDistance(16345,16318,16345,16314)
print dist
minutes = (13.3) * dist
print minutes
time = timedelta(minutes=minutes)
print(time)
结果是: 4.0<<距离
53.2<<以分钟为单位的时间(距离* 13.3)
0:53:12<<<时间,但不正确!
结果应为0:53:20
有什么建议吗?
谢谢
答案 0 :(得分:0)
时间是正确的,因为0.2分钟是12秒。
答案 1 :(得分:0)
您在基数10中使用时间表示秒。当你将它转换为秒时,你得到53.12(60 * 0.20 = 12秒)是正常的
答案 2 :(得分:0)
提供我认为您真正要求的答案,即:
如何计算从A点到B点的“距离”,其中A点 是同心六边形的中心和从A到B的距离 被定义为B所在六边形的apothem *的长度。
(* apothem是从中心垂直的长度 六边形到边缘)。
如果这是您的意思,请更新您的问题。使用时间转换的代码没有任何问题,只有距离测量。
答案......
假设在所有东西下面都有一个沼泽标准的矩形坐标系统。您的x1
,y1
等在该系统中有效。
当水平线和AB线之间的角度在60到120度之间时,B所在的六边形是一个apothem长度等于B的y坐标(假设A位于B处)起源)。这是基于您在评论中提供的link上的第5篇帖子的信息。
可能更容易以图形方式看到:B在apothem 10的六边形上,因此从A到B的距离是10.B的y坐标也是10.
在下面的代码中,dist(x1, y1, x2, y2)
应提供以单位为单位的距离。
import math
def dtor(deg):
return deg * math.pi/180
def eucl_dist(x1, y1, x2, y2):
return math.sqrt((x2-x1)**2 + (y2-y1)**2)
def ang(x, y):
return math.atan2(y,x)
def rot(x,y,ang):
newx = x*math.cos(ang)-y*math.sin(ang)
newy = x*math.sin(ang)+y*math.cos(ang)
return (newx, newy)
def hexdist(x, y):
alpha = ang(x, y) # always top-right quadrant
if dtor(60) <= alpha < dtor(120):
dist = y
else:
if dtor(120) <= alpha < dtor(180):
newcoords = rot(x,y,dtor(-60))
elif dtor(0)<= alpha < dtor(60):
newcoords = rot(x,y,dtor(60))
elif dtor(-60)<= alpha < dtor(0):
newcoords = rot(x,y,dtor(120))
elif dtor(-120)<= alpha < dtor(-60):
newcoords = rot(x,y,dtor(180))
elif dtor(-180)<= alpha < dtor(-120):
newcoords = rot(x,y,dtor(120))
dist = hexdist(newcoords[0],newcoords[1])
return dist
def dist(x1,y1,x2,y2):
return hexdist(x2-x1, y2-y1)
请注意,结果仍然与您的数字不符。
第一组坐标(16345,16318,16345,16314
)产生53.2分钟,这是合乎逻辑的,因为x
坐标不会改变。正如其他人所解释的那样,这肯定是53分12秒。
另一组坐标(在评论中,16345,16318,16348,16301
)给出3:46:06,这接近你对3:46:40的估计但不完全相同。这可能是由于坐标的四舍五入吗?
这绝对是我在这里看到的最奇怪的问题之一!我确实想知道为什么旧的欧几里德度量标准不合适。