比如一个物体o(x,y), 它的坐标x,y是可以随时读到的。有一个圈,圆心坐标是(a,b), 半径是r.
这个物体在圈内开始随机移动,请问怎么判定它已经移出这个圈呢?
这个物体在圈内开始随机移动,请问怎么判定它已经移出这个圈呢?
|
ligyxyAug 6, 2015
1
欧式距离大于半径?
据说通宵写代码的质量要低一些 |
|
2
@ligyxy 小弟数学不好,能具体说说吗?
呵呵,刚喝了红牛兑橙汁。目前精力很好 |
|
manhereAug 6, 2015
3
话说...物体有多大?
|
|
4
@manhere 这里不考虑物体半径大小。简单处理就行
|
|
5
sqrt((x-a)(x-a)+(y-b)(y-b)) > r
|
|
6
@blacktulip 谢啊,哥们
|
|
ValyrianAug 6, 2015
7
这不是小学数学么
|
|
8
这里有一个优化。
如果物体移动速度很快,也可以直接判断是否在圆的外切矩形之外来短路判断条件。 if x > a+r || x < a-r || y > b+r || y < b-r || sqrt() > r 可以省下一部分sqrt的时间。 |
|
BordenAug 6, 2015 via iPad
9
现在的程序员都这个水平了???
|
|
XrongAug 6, 2015
10
楼主太迟要多休息,不然不可能脑袋卡壳到连勾股定理都想不起来
|
|
theFoolAug 6, 2015 via iPhone
11
((x-a)(x-a)+(y-b)(y-b)) > r*r
省个开方。 最基础的数学知识还是得好好补补吧。 |
|
hellov22exAug 6, 2015
12
楼主需要好好休息,帮你想个不给力的办法,就是求当X轴坐标等于x时的线与圆的交点到和y进行比较啦。
不要熬夜。 |
|
13
@hellov22ex 这方法好。谢谢啊
最近的确忙,搞红牛撑着 |
|
hellov22exAug 6, 2015
14
@meteor2013 这样子你要先获得圆的函数,这一部分谷歌下吧。顺带注意身体,不是只为你自己。
|
|
leavicAug 6, 2015
15
@msg7086 如果你直接用或关系符的话,可能还需要考虑编译器的处理问题,编译器可能还是会算一遍sqrt的值,加上if else把sqrt和非sqrt切开也许会好点。
|
|
hinateAug 6, 2015 via Android
16
要多休息,不然代码都不能码了
|
|
leavicAug 6, 2015
18
@msg7086 在C里面,运算符是有优先级的,或运算时从左到右,如果你把sqrt写到了最左边,那肯定会要执行一遍sqrt了,当然你你没有这样写。
不是说这个问题一定会发生,只是说还的惦记着这种可能,否则结果可能是运算复杂度更高了。 |
|
wkdhf233Aug 6, 2015
19
睡得好才是第一生产力
|
|
CloudeeAug 6, 2015
20
@msg7086 @meteor2013 感觉如果按题主说的,先计算是不是在内接矩形内,然后如果不在再判断到圆心的距离,后面的乘法运算被短路掉的概率比较高
|
|
ExinAug 6, 2015 via iPhone
22
我还以为能看到判断在不规则形状外的方法
|
|
AksuraAug 7, 2015
23
|