代码之家  ›  专栏  ›  技术社区  ›  Kaito Kid

检查两组点是否位于同一震源点的不同半球

  •  2
  • Kaito Kid  · 技术社区  · 6 年前

    我有一个带整数坐标的二维平面图。

    在这个计划中,有许多要点,分为三类。

    • Nice组,包含未知(但合理)的点数
    • 邪恶集团,包含一个未知的(但合理的)点数

    我首先要做的是弄清楚(是/否)这两组人是否处于分开的大脑半球。

    第二步是计算这个半球的角度。在下面的第一个例子中,我画了一条180度的角(直线),但是我想计算一个最不平衡的角(接近于0),这个角可以让两个组完全分开。这条线是两条半直线,从源头开始,一直到无穷远。我想知道保持第一个测试为真的最小角度(所以,逻辑上,如果你测量另一边的话,就是最大角度)

    示例:

    1: enter image description here

    2: enter image description here

    enter image description here

    现在,我可以通过代码计算每个点和源之间的角度。我被困在如何测试群体的“团结”上,最重要的是,在群体之间没有其他成员。

    我在用C语言工作,但这个问题实际上更多的是关于算法(我想不出一个可行的算法),所以我会接受任何用任何(可读的)语言解决问题的答案,包括伪代码或直接文本解释。

    在上下文中,所有的点都是包含X和Y坐标的复杂对象。其他属性与问题无关,因为它们已经在必需的组中分开了(origin是单独的,其余的有两个列表)。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Dmitry Bychenko    6 年前

    分类 扫描 . 我们来介绍一下 极坐标系 它的原点在原点和任意轴上。

    • azimuth 每一点(好的或坏的)
    • 按他们的 ,例如。
    • 扫描已排序的集合;如果你有 2 善与恶或恶与善之间的过渡;返回 true ,否则 false

    例如(让方位角以度为单位)

       {nice,  12}
       {nice,  13}
       {nice,  15}
       {nice,  21} // nice to evil transition
       {evil,  47}
       {evil, 121}
       {evil, 133} // evil to nice transition
       {nice, 211}
       {nice, 354}
    

    答案是 是的

       {nice,  12}
       {nice,  13}
       {nice,  15} // nice to evil transition
       {evil, 121}
       {evil, 349}
    

       {nice,  12}
       {nice,  13} // nice to evil transition
       {evil, 121} // evil to nice transition
       {nice,  15} // nice to evil transition
       {evil, 121} // evil to nice transition
       {nice, 349}
    

    四个转变,分不开,答案是

        2
  •  1
  •   Technivorous    6 年前

    得到on组的最小电流x和最小电流y。得到最高的。。。然后比较另一组,看看中间有多少。如果在点(highx,highy)和(lowx,lowy)之间发现其他点中的任何一个,它们就混合在一起了。如果不分开。。。

    一旦你知道它们是分开的,画一条线从你的最低点(x,y)到你的最高点(x,y),然后把这条线转换到你的原点,给你两个“半球”

    请注意,只有当它们被一条线(而不是一个角度)分开时,这才会起作用。

    把a和y分开