首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPainterPath填充面积的计算

QPainterPath填充面积的计算
EN

Stack Overflow用户
提问于 2013-11-29 09:40:42
回答 4查看 2.7K关注 0票数 2

在一个使用qgraphicsItem的QPainterPath ()函数中,我已经绘制了一个自由形式的画图,我想问一问是否有一种方法来计算一个封闭的画家路径的面积。我想显示的地区,绘画路径所涵盖的场景,而不是boundingRect。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-29 12:22:56

要计算多边形的面积,可以采用两种方法:

缓慢但通用(可能存在精度问题):从pointAtPercent中获取点的步骤,并对这样的多边形执行标准计算

fast,但只适用于QPainterPath,其中的段是LineToElement。只需使用elementAt和elementCount遍历所有多边形角,然后再次执行标准计算计算多边形面积。

票数 3
EN

Stack Overflow用户

发布于 2013-11-29 11:45:43

我不完全确定这是否是您想要的,但是如果您只是想填充一个封闭的画家路径的区域,那么就有一个QPainter::馅函数:

代码语言:javascript
复制
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
票数 2
EN

Stack Overflow用户

发布于 2014-01-11 22:38:28

非自交多边形的PyQt/PySide方法:

代码语言:javascript
复制
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
    ))

不变,但不减少:

代码语言:javascript
复制
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

实际上,精度只是逼近多边形的顶点数。越多越好,越慢。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20282579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档