我有很多点(x,y)
,例如(15, 176) (65, 97) (72, 43) (102, 6) (191, 189) (90, 163) (44, 168) (39, 47) (123, 37)
我需要找到适合(0,0) to (max-x, max-y)
的所有点。在这个例子中,这些点将是(0,0 ) and (191,189)
,所以我绘制了所有点,我需要找到来自(0,0) to (191,189)
的线下的所有点。是否有任何标准算法来执行此操作。 / p>
答案 0 :(得分:3)
如果y * X <1,则点(x,y)在从(0,0)到(X,Y)的线下面。 Y * x。
答案 1 :(得分:2)
(我假设'适合'你'的意思是'在......之下'覆盖''。
一种方法是使用例如确定线上的点。 Bresenham的行算法(http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)然后使用std::set_intersection
(http://www.cplusplus.com/reference/algorithm/set_intersection/)来查找哪些点都在行中以及原始点集中。
答案 2 :(得分:2)
在线段(0,0)下 - &gt;(191,189)等于
播种这些是您必须检查每个点的两个条件。 您有1个整数比较的成本,2个浮点数的int,1个浮点乘法,每个点1个浮点数比较
答案 3 :(得分:0)
对于任何线y = mx + c,其中m是斜率,c是y截距
使用这些值 a = y-mx-c,x = 0,y = 0 b = y-mx-c为一般点
如果a和b具有相同的符号,则意味着这些点位于同一侧 否则他们就在这条线的另一边
我保留(0,0)找到一个可以比较一般点的位置w.r.t.起源。你也可以在其中输入任何其他点..
希望完全有助于解决您的问题