meteor2013
V2EX  ›  问与答

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

  •  
  •   meteor2013 · Aug 6, 2015 via iPhone · 2935 views
    This topic created in 4119 days ago, the information mentioned may be changed or developed.
    比如一个物体o(x,y), 它的坐标x,y是可以随时读到的。有一个圈,圆心坐标是(a,b), 半径是r.

    这个物体在圈内开始随机移动,请问怎么判定它已经移出这个圈呢?
    23 replies  •  2015-08-07 21:18:48 +08:00
    ligyxy
    ligyxy
    Aug 6, 2015
    1
    欧式距离大于半径?

    据说通宵写代码的质量要低一些
    meteor2013
    meteor2013
    OP
    Aug 6, 2015 via iPhone
    2
    @ligyxy 小弟数学不好,能具体说说吗?
    呵呵,刚喝了红牛兑橙汁。目前精力很好
    manhere
    manhere
    Aug 6, 2015
    3
    话说...物体有多大?
    meteor2013
    meteor2013
    OP
    Aug 6, 2015 via iPhone
    4
    @manhere 这里不考虑物体半径大小。简单处理就行
    blacktulip
    blacktulip
    Aug 6, 2015❤️2
    5
    sqrt((x-a)(x-a)+(y-b)(y-b)) > r
    meteor2013
    meteor2013
    OP
    Aug 6, 2015 via iPhone
    6
    @blacktulip 谢啊,哥们
    Valyrian
    Valyrian
    Aug 6, 2015
    7
    这不是小学数学么
    msg7086
    msg7086
    Aug 6, 2015❤️2
    8
    这里有一个优化。
    如果物体移动速度很快,也可以直接判断是否在圆的外切矩形之外来短路判断条件。

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

    可以省下一部分sqrt的时间。
    Borden
    Borden
    Aug 6, 2015 via iPad
    9
    现在的程序员都这个水平了???
    Xrong
    Xrong
    Aug 6, 2015
    10
    楼主太迟要多休息,不然不可能脑袋卡壳到连勾股定理都想不起来
    theFool
    theFool
    Aug 6, 2015 via iPhone
    11
    ((x-a)(x-a)+(y-b)(y-b)) > r*r
    省个开方。

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

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

    不是说这个问题一定会发生,只是说还的惦记着这种可能,否则结果可能是运算复杂度更高了。
    wkdhf233
    wkdhf233
    Aug 6, 2015
    19
    睡得好才是第一生产力
    Cloudee
    Cloudee
    Aug 6, 2015
    20
    @msg7086 @meteor2013 感觉如果按题主说的,先计算是不是在内接矩形内,然后如果不在再判断到圆心的距离,后面的乘法运算被短路掉的概率比较高
    msg7086
    msg7086
    Aug 6, 2015 via Android
    21
    @leavic 同级就是从左到右。这个初中就学过的知识了。

    @Cloudee 也可以,乘个0.707嘛
    Exin
    Exin
    Aug 6, 2015 via iPhone
    22
    我还以为能看到判断在不规则形状外的方法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1923 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 02:30 · PVG 10:30 · LAX 18:30 · JFK 21:30
    ♥ Do have faith in what you're doing.