【问题标题】:What is best approach for performing operations on pairs of 2d lines?对二维线对执行操作的最佳方法是什么?
【发布时间】:2010-11-30 23:46:23
【问题描述】:

所以我在 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下做。

什么库及其部分可以帮助我为我的数据组织快速计算?例如 boost graph lib 会有帮助吗?我的意思是通常我需要执行一些线程/处理器优化以加快速度。而且我不会有任何花哨的视频卡来执行所有这些......

【问题讨论】:

  • 顺便提一下,10k 行远没有您开始担心性能所需的那么多。

标签: c++ visual-studio optimization boost graph


【解决方案1】:

您可以在每一行上使用 Angle 函数并将结果存储在 std::map 中,使用角度作为键。这将使具有相似角度的线靠近在一起,因此您可以快速选择对来测试 NearlyParallel 和 Collinear。

【讨论】:

  • 如果有 8 条平行线,那么角度(键)是否相同?
猜你喜欢
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多