我正在处理一个非常棘手的问题(至少对我而言),涉及两条曲线的平行度。我有一个名为 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
||
|+-----°--+
+------+
知道并希望理解所有这些垃圾,有没有一种快速的方法来找出我感兴趣的长度?哦,我差点忘了:必须要快。