所以我在2d平面上定义了10 000条线,这样每条线都显示为(A1,A2,B1,B2)(A,B点)。我需要在每对线上执行一系列函数:
Angle(A,B)
return Atan((B.y-A.y) / (B.x-A.x))
NearlyParallel(angle1, angle2)
delta = Abs(angle1-angle2)
return (delta < threshold) or (delta > Pi-threshold)
Collinear(A,B, C,D)
return NearlyParallel(Angle(A,C), Angle(B,D)) and NearlyParallel(Angle(A,D), Angle(B,C))
因此,一般来说,我需要说明哪条线是共线的哪条线,哪条线与另一条线几乎是平行的。
我需要在c ++中使用boost和任何需要的开源库来完成它。我是在visual studio 2010的windows下做的。
什么库及其部分可以帮助我组织我的数据的快速计算?例如,提升图形lib会有帮助吗?我的意思是通常我需要执行一些线程/处理器优化以加快速度。我不会有任何花哨的视频卡来执行这一切...
答案 0 :(得分:1)
您可以在每一行使用Angle函数,并将结果存储在std :: map中,使用角度作为键。这将使具有相似角度的线条紧密结合在一起,因此您可以快速选择对来测试近平行和共线。