在一个使用qgraphicsItem的QPainterPath ()函数中,我已经绘制了一个自由形式的画图,我想问一问是否有一种方法来计算一个封闭的画家路径的面积。我想显示的地区,绘画路径所涵盖的场景,而不是boundingRect。
发布于 2013-11-29 12:22:56
要计算多边形的面积,可以采用两种方法:
缓慢但通用(可能存在精度问题):从pointAtPercent中获取点的步骤,并对这样的多边形执行标准计算
fast,但只适用于QPainterPath,其中的段是LineToElement。只需使用elementAt和elementCount遍历所有多边形角,然后再次执行标准计算计算多边形面积。
发布于 2013-11-29 11:45:43
我不完全确定这是否是您想要的,但是如果您只是想填充一个封闭的画家路径的区域,那么就有一个QPainter::馅函数:
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )发布于 2014-01-11 22:38:28
非自交多边形的PyQt/PySide方法:
def frange(start, stop, step):
'''Helper float generator'''
while start < stop:
yield start
start += step
def painterPathArea(path, precision = 10000):
'''QPainterPath area calculation'''
points = [(point.x(), point.y()) for point in (path.pointAtPercent(perc) for perc in frange (0, 1, 1.0 / precision))]
points.append(points[0])
return 0.5 * abs(reduce(
lambda sum, i: sum + (points[i][0] * points[i + 1][1] - points[i + 1][0] * points[i][1]),
xrange (len (points) - 1),
0
))不变,但不减少:
def painterPathArea(path, precision = 10000):
'''QPainterPath area calculation'''
points = [(point.x(), point.y()) for point in (path.pointAtPercent(perc) for perc in frange (0, 1, 1.0 / precision))]
points.append(points[0])
sum = 0
for i in xrange (len (points) - 1):
sum += points[i][0] * points[i + 1][1] - points[i + 1][0] * points[i][1]
return abs(sum) / 2实际上,精度只是逼近多边形的顶点数。越多越好,越慢。
https://stackoverflow.com/questions/20282579
复制相似问题