我正在处理一个非常困难的问题(至少对我来说),关于两条曲线的并行性。 我有一个名为CPolyline的对象数组,它有一个2d点数组,定义如下:
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
| |
| |
| |
+ °
+
我们发现他们需要两个ifs。 此外,如果我们考虑两个夸张(很难画,对不起),情况会变得很热:
+----°-+ <- Line 1
|+---+ <- Line 2
||
|+-----°--+
+------+
知道并希望了解所有这些垃圾,有没有一种快速的方法来找出我感兴趣的长度? 哦,我几乎忘了:必须要快。