C# 检查两组点是否位于源点的不同半球
我有一个带整数坐标的二维平面图 在这个计划中,有许多要点,分为三类C# 检查两组点是否位于源点的不同半球,c#,algorithm,2d,coordinates,angle,C#,Algorithm,2d,Coordinates,Angle,我有一个带整数坐标的二维平面图 在这个计划中,有许多要点,分为三类 “来源”。只有一个点是源 Nice组,包含未知(但合理)点数 邪恶集团,包含未知(但合理)点数 我首先要做的是弄清楚(是/否)这两组人是否处于分开的大脑半球 如果你可以画一条线穿过源(图片中的蓝色),这样所有的善都在一边,所有的恶都在另一边,那么它们被认为是在不同的半球。如果任何一组中有那么多的人不能和其他人站在同一边,那就错了 第二步是计算这个半球的角度。在下面的第一个例子中,我画了一个180度的角度(直线),但我想计算最
- “来源”。只有一个点是源
- Nice组,包含未知(但合理)点数
- 邪恶集团,包含未知(但合理)点数
- 计算每个点的
(好或坏)方位角
- 按其
方位角对点进行排序,例如
- 扫描已排序的集合;如果你在善与恶或恶与善之间有
或更少的转换;返回2
,否则返回true
false
true
{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}
四个过渡,点不能分开,答案是
false
得到on组的最低电流x和最低电流y。并且得到最高的。。。然后比较另一组,看看中间有多少。如果在点(highx,highy)和(lowx,lowy)之间发现了其他点中的一个,则它们会混合在一起。如果不是,他们是分开的
一旦你知道它们是分开的,从你的最低点(x,y)到最高点(x,y)画一条线,然后把这条线变换到你的原点,给你两个“半球”
请注意,只有当它们被一条线(而不是一个角度)分割时,这才起作用
角度
把a和y分开
一旦你得到了另一组没有交叉的最低(或最高)x,那么对y也做同样的事情。通过这两个坐标和原点,您应该能够确定角度。这可能与您的问题有关:这是两个点集的凸包的应用。
{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}