2016-02-23 121 views
3

我有一个QPainterPath可以容纳任何序列的行和/或三次贝塞尔曲线。现在,我有一个QPoint,我需要计算QPainterPath和点之间的最短距离。由于路径本身不会比存储元素的顺序更多,因此我将它们添加到路径中,但它本身不提供此类功能。我唯一的想法是使用QPainterPath::toFillPolygon()构造一个多边形,但是这有时会返回一个等于路径的多边形,有时会返回一个空的多边形。此外,QPolygonF对象只是一个点的列表,其中一些连接线,其中一些没有连接在原始路径,但我无法找出它们中哪些连接,哪些不连接。QPainterPath和QPoint之间的最短距离

是否有任何(简单)解决方案来计算QPainterPath(最好不转换为多边形)和QPoint之间的最短距离?

+0

重复问题在http://www.qtcentre.org/threads/31451-How-to-find-the-nearest-point-on-a-QPainterPath,但没有一个解决方案(简单或其他)。 – eclarkso

+0

@eclarkso:引用答案并在此处作出答案。 –

+1

@DieterLücking由于eclarkso写道,在这些问题中没有答案(至少他链接的一个,我发现使用搜索引擎) – msrd0

回答

1

QPainterPathpointAtPercent()因此您可以在给定步骤迭代路径并检查位于路径上的多个点与目标点之间的距离。

这会给你大致的最短距离,如果你想要更高的精度,你可以把重点放在路径的这些段上,并在更精细的一步迭代。

+0

谢谢,这种方法绝对很好的近似距离,虽然我想有一个确切的解决方案。如果没有更好的解决方案,我将使用该解决方案 – msrd0

+0

如果它是一条直线或一条弧线,则可以精确计算它,但是如果您有贝塞尔曲线,则无论采用哪种方式,都将使用线段进行近似。 – dtech

+0

我知道,我不喜欢用线条来得到多边形的方式,但是你也可以得到一条贝塞尔曲线的函数,虽然我认为我知道这是一个5多项式解决方案,你想解决... – msrd0