0

我正在处理一个非常棘手的问题(至少对我而言),涉及两条曲线的平行度。我有一个名为 CPolyline 的对象数组,它有一个二维点数组,定义如下:

class CPoint2D
{
  //...
  double m_dX;
  double m_dY;
};
typedef CArray<CPoint2D, CPoint2D> CArrayPoint2D;
class CPolyline
{
  //...
  CArrayPoint2D m_aPnts;
};
typedef CArray<CPolyline *, CPolyline *> CArrayPPolyline 

如所描述的那样定义,如果该数组的两个元素平行,沿折线采样点并向上舍入斜率,则在分析上很容易找到。现在,知道我必须比较哪些折线,麻烦就来了,因为这种方法仅在两条曲线具有相同起点和终点的条件下有效,在我的情况下从未验证过条件。我应该找到一个起点 (X0,Y0) 和一个终点 (X1,Y1) 点,我可以在此处评估曲线的斜率。这似乎是一项非常容易的任务,但它需要很多、太多的 ifs,因为如果我们考虑这两个基本(特殊情况)示例,其中 +s 是折线点,而 °s 定义了感兴趣的长度:

+-°----------+      <-Line1
  +----------°--+   <-Line2

Line 1->+
        ° +
        | |<-Line 2
        | |
        | |
        | |
        + °
          +

我们看到它们需要两个 if。此外,如果我们考虑两个夸张的说法(很难画,抱歉),情况会变得很热:

+----°-+    <- Line 1
|+---+      <- Line 2
||
|+-----°--+
+------+

知道并希望理解所有这些垃圾,有没有一种快速的方法来找出我感兴趣的长度?哦,我差点忘了:必须要快。

4

0 回答 0