如何判断一个物体已经移动到圈外?

2015-08-06 03:12:05 +08:00
 meteor2013
比如一个物体o(x,y), 它的坐标x,y是可以随时读到的。有一个圈,圆心坐标是(a,b), 半径是r.

这个物体在圈内开始随机移动,请问怎么判定它已经移出这个圈呢?
2106 次点击
所在节点    问与答
23 条回复
ligyxy
2015-08-06 03:16:55 +08:00
欧式距离大于半径?

据说通宵写代码的质量要低一些
meteor2013
2015-08-06 03:19:51 +08:00
@ligyxy 小弟数学不好,能具体说说吗?
呵呵,刚喝了红牛兑橙汁。目前精力很好
manhere
2015-08-06 03:21:34 +08:00
话说...物体有多大?
meteor2013
2015-08-06 03:23:16 +08:00
@manhere 这里不考虑物体半径大小。简单处理就行
blacktulip
2015-08-06 03:23:31 +08:00
sqrt((x-a)(x-a)+(y-b)(y-b)) > r
meteor2013
2015-08-06 03:26:58 +08:00
@blacktulip 谢啊,哥们
Valyrian
2015-08-06 04:48:31 +08:00
这不是小学数学么
msg7086
2015-08-06 05:45:11 +08:00
这里有一个优化。
如果物体移动速度很快,也可以直接判断是否在圆的外切矩形之外来短路判断条件。

if x > a+r || x < a-r || y > b+r || y < b-r || sqrt() > r

可以省下一部分sqrt的时间。
Borden
2015-08-06 05:49:34 +08:00
现在的程序员都这个水平了???
Xrong
2015-08-06 05:58:34 +08:00
楼主太迟要多休息,不然不可能脑袋卡壳到连勾股定理都想不起来
theFool
2015-08-06 08:06:45 +08:00
((x-a)(x-a)+(y-b)(y-b)) > r*r
省个开方。

最基础的数学知识还是得好好补补吧。
hellov22ex
2015-08-06 08:12:01 +08:00
楼主需要好好休息,帮你想个不给力的办法,就是求当X轴坐标等于x时的线与圆的交点到和y进行比较啦。

不要熬夜。
meteor2013
2015-08-06 08:25:13 +08:00
@hellov22ex 这方法好。谢谢啊
最近的确忙,搞红牛撑着
hellov22ex
2015-08-06 08:34:10 +08:00
@meteor2013 这样子你要先获得圆的函数,这一部分谷歌下吧。顺带注意身体,不是只为你自己。
leavic
2015-08-06 10:12:25 +08:00
@msg7086 如果你直接用或关系符的话,可能还需要考虑编译器的处理问题,编译器可能还是会算一遍sqrt的值,加上if else把sqrt和非sqrt切开也许会好点。
hinate
2015-08-06 10:14:52 +08:00
要多休息,不然代码都不能码了
msg7086
2015-08-06 11:20:14 +08:00
@leavic 大多数过程式语言里表达式短路是规范的一部分。
函数式语言没有深究,不太清楚。
leavic
2015-08-06 12:25:04 +08:00
@msg7086 在C里面,运算符是有优先级的,或运算时从左到右,如果你把sqrt写到了最左边,那肯定会要执行一遍sqrt了,当然你你没有这样写。

不是说这个问题一定会发生,只是说还的惦记着这种可能,否则结果可能是运算复杂度更高了。
wkdhf233
2015-08-06 13:00:57 +08:00
睡得好才是第一生产力
Cloudee
2015-08-06 14:41:15 +08:00
@msg7086 @meteor2013 感觉如果按题主说的,先计算是不是在内接矩形内,然后如果不在再判断到圆心的距离,后面的乘法运算被短路掉的概率比较高

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211116

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX