您正在寻找以下形式的方程的解:
sin((2π*A)(x-B)) == 0
和
sin((2π*C)(x-D)) == 0
通过相乘,还要注意:
sin(2πAx - 2πAB) == 0
同样地
sin(2πCx - 2πCD) == 0
或者:
Ax - AB == 0
Cx - CD == 0
它提供了以下完全不令人震惊的值,其中这些函数为零:
x = B + 2π/(2π*A) * k
x = D + 2π/(2π*C) * k
其中 K 是一个整数。
由于您将自己限制为具有波长为整数的值的函数,因此 1/A 和 1/C 的值同样保证为整数。因此,这进一步简化了:
x = B mod a
x = D mod c
其中 a 和 c 是这里的频率。
你可以选择你最喜欢的解联立模方程的形式,我将演示其中最简单的一种:
x = B + k*a
B+ k*a = D mod c
k * a = D - B mod c
k = (a^-1M) (D-B) mod c
k = (a^-1M) (D-B) + j*c
x = B + a*(a^-1M)*(D-B) + (a*j-c)
x = B + a*(a^-1M)(D-B) mod ac
请注意,a^-1m 是 mod c 的模逆,您必须使用扩展欧几里得算法进行计算。(我将省略它,因为您的示例的值非常小):
x = 1 + 3(3)(0-1) mod ac
x = -8 mod ac
给定这样的一些值,您可以在脚本中取右侧 mod ac 并获得正确的第一个值;但是请注意,像 Javascript 之类的一些清理语言将允许绝对值小于 ac 的负结果。
所以你想要这样的东西:
( ( (B + a*(a^-1M)*(D-B) ) % ac) + ac ) % ac)
a^-1M 是 c 中 a 的模数倒数。如果 a%c == 0 或 c%a == 0,您的函数也应该呕吐,因为这些波永远不会相交