我正在尝试在Python中解决time
的以下方程组:
position1 = (initial_position1 + (time * velocity1)) % 360
position2 = (initial_position2 + (time * velocity2)) % 360
有两个物体围绕同一方向的中心点旋转,速度不同,并且可能有不同的起点(即它们在给定时间的位置)。我想知道两个物体需要多长时间才能相遇。
为此,我有这个等式:
(initial_position1 + (time * velocity1)) % 360 == (initial_position2 + (time * velocity2)) % 360
但我无法为time
解决它,因为%
运算符没有反函数。有没有一个已知的解决方案?如果没有,任何建议都会派上用场。
答案 0 :(得分:4)
你正试图解决
x1 + t * v1 = x2 + t * v2
and
x1 - x2 = 360 * n
这转化为
n = t / 360 * (v2 - v1)
or
t = n * 360 / (v2 - v1)
你知道v2
和v1
是什么,所以这只是一个带整数解的线性方程。找到该行上的所有点,其中n是整数,并取最小的正整数。
答案 1 :(得分:2)
如何为逆模编写自己的函数?
def invmodp(a, p):
for d in xrange(1, p):
r = (d * a) % p
if r == 1:
break
else:
raise ValueError('%d has no inverse mod %d' % (a, p))
return d
请注意,并非所有集合都具有反模数...
答案 2 :(得分:0)
不,这是不可能的。在模运算之后,有多个潜在的起始值会产生相同的结果。如果要返回原始起始值,请保存对它的引用。