坐标为 (P x , P y ) 和 (Q x , Q y ) 的两点 P 和 Q满足以下性质:
- 坐标 P x、 P y、 Q x和 Q y是整数。
- P x = -Q x。
- 直线 PQ 与一个圆心为 (0, 0) 且半径为r的圆相切
- 0 < P x ≤ a对于某个整数限制a。
如何找到所有这样的点 P 和 Q 对?
例如,在下图中,我有一个半径r =2 且极限a = 6 的圆。点对 P = (6, 2) 和 Q = (−6, −7) 是一个解,因为:
- P 和 Q 的坐标是整数。
- P x = -Q x。
- 线 PQ 与圆相切。
- 0 < P x ≤ 6。
但这只是一对。我需要找到所有这样的对。有有限数量的解决方案。
那么,有没有办法检查点的坐标是否与圆相切并且是整数,然后将它们全部列出?我已经查看了斜率方程和从圆心到直线方程的最短路径,但是,在第一种情况下,它需要知道坐标(我可以通过强制每个数字来做到这一点,但我看不到模式,因为我的直觉告诉我应该应用某种方程),在第二种情况下,我必须知道斜率方程。
这是我想出的算法,但我认为它不正确或不够好:
- 对于所有 1 ≤ P x ≤ a和 -<em>a ≤ Q x ≤ -1,求斜率方程y = mx + b 。
- 对于每个y = mx + b检查它是否与圆相切(如何做到这一点???)
- 如果为真,则返回该对