如何获取直线与QPainterPath的交点

QPainterPath提供这样一个函数来检测两个path的交集,但是这个函数无法取得一条直线段与一个封闭path的交线。因为直线段没有fill area。找了一下也没有其他函数来完成这个事情。

QPainterPath intersected ( const QPainterPath & p ) const

于是只有自己写,我这里给出的是一个比较偷懒的算法,尽量利用qt提供的函数来做,效率很低,但是对于大多应用来说也没问题。

算法就是对线段逐点检测与contour的相交了,非常简单非常简单。


用起来速度也蛮快,对付现在这个苦逼项目完全OK~~

返回的path就是线段与任意封闭path的交线了,那么交点自然就很容易取得了。

这里的代码是直接在这里打的,如果有错,再说吧。


QPainterPath *Intersect(const QPainterPath &contour, const QPainterPath &line)
{
	qreal len = line.length();
	QPointF p = line.pointAtPercent(0);
	bool intersected = false;

	QPainterPath inter_path;

	for(int k = 1; k <= len; ++k)
	{
		if(contour.contains(p) && !intersected)
		{

			intersected = true;
			inter_path.moveTo(p);


		}
		else if(!contour.contains(p) && intersected)
		{

			inter_path.lineTo(p);
			return &inter_path;
		}


		qreal per = line.percentAtLength(k);
		p = line.pointAtPercent(per);
	}
	return NULL;
}


你可能感兴趣的:(算法,null,qt,Path)