获取 QPolygonF 的点
Get the points of the QPolygonF
我在屏幕上绘制了 3 个 QPolygonF,我需要计算一个 QPolygon 的长度在另一个 QPolygon 中的长度。为了说明,黑色多边形内的红色或蓝色多边形的百分比长度:黑色多边形内的紫色线的百分比。
因为我没有紫色线本身,我认为我应该通过在它经过的每个 Y 坐标上取红色和蓝色多边形的值,并取两者的中点来计算它。
但是我不确定这样做的最佳方法是什么:我想将 QPolygonF 本身转换为一系列坐标,然后按照此答案中的说明使用 Shapely Geometry 来计算线:
编辑:值得一提的是,我需要这些多边形的所有外部坐标,而不仅仅是定义它们的角点(红线上的所有点)
多边形添加为
drawn_polygon = {}
all_polygon_corner_coords = {}
all_polygon_corner_coords["polygon1"] = [QPointF(x,y), ... , QPointF(xn,yn)]
drawn_polygon["polygon1"] = self.ImageDisplayQgraphicsView.scene().QPolygonF(all_polygon_corner_coords.get("polygon1")]
PyQt5 中是否有任何函数可以让我将 QPolygonF 转换为底层坐标?或者有没有更简单的方法来解决这个问题?
如果你想获得 QPolygonF 的顶点,那么你只需要迭代它,因为它是一个 QVector。
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QPolygonF
def main():
poly = QPolygonF([QPointF(1, 1), QPointF(0, 10), QPointF(10, 10), QPointF(10, 0)])
points = [poly[i] for i in range(poly.size())]
print(points)
if __name__ == "__main__":
main()
输出:
[PyQt5.QtCore.QPointF(1.0, 1.0), PyQt5.QtCore.QPointF(0.0, 10.0), PyQt5.QtCore.QPointF(10.0, 10.0), PyQt5.QtCore.QPointF(10.0, 0.0)]
更新:
您无法获得多边形的所有点,因为它们是无限的,但您可以映射其中的一些点,为此您可以使用 QPainterPath:
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QPolygonF, QPainterPath
def map_n_points_of_polygon(polygon, n):
path = QPainterPath()
path.addPolygon(polygon)
return [path.pointAtPercent(i / (n - 1)) for i in range(n)]
def main():
poly = QPolygonF([QPointF(1, 1), QPointF(0, 10), QPointF(10, 10), QPointF(10, 0)])
points = map_n_points_of_polygon(poly, 100)
print(points)
if __name__ == "__main__":
main()
我在屏幕上绘制了 3 个 QPolygonF,我需要计算一个 QPolygon 的长度在另一个 QPolygon 中的长度。为了说明,黑色多边形内的红色或蓝色多边形的百分比长度:黑色多边形内的紫色线的百分比。
因为我没有紫色线本身,我认为我应该通过在它经过的每个 Y 坐标上取红色和蓝色多边形的值,并取两者的中点来计算它。
但是我不确定这样做的最佳方法是什么:我想将 QPolygonF 本身转换为一系列坐标,然后按照此答案中的说明使用 Shapely Geometry 来计算线:
编辑:值得一提的是,我需要这些多边形的所有外部坐标,而不仅仅是定义它们的角点(红线上的所有点)
多边形添加为
drawn_polygon = {}
all_polygon_corner_coords = {}
all_polygon_corner_coords["polygon1"] = [QPointF(x,y), ... , QPointF(xn,yn)]
drawn_polygon["polygon1"] = self.ImageDisplayQgraphicsView.scene().QPolygonF(all_polygon_corner_coords.get("polygon1")]
PyQt5 中是否有任何函数可以让我将 QPolygonF 转换为底层坐标?或者有没有更简单的方法来解决这个问题?
如果你想获得 QPolygonF 的顶点,那么你只需要迭代它,因为它是一个 QVector。
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QPolygonF
def main():
poly = QPolygonF([QPointF(1, 1), QPointF(0, 10), QPointF(10, 10), QPointF(10, 0)])
points = [poly[i] for i in range(poly.size())]
print(points)
if __name__ == "__main__":
main()
输出:
[PyQt5.QtCore.QPointF(1.0, 1.0), PyQt5.QtCore.QPointF(0.0, 10.0), PyQt5.QtCore.QPointF(10.0, 10.0), PyQt5.QtCore.QPointF(10.0, 0.0)]
更新:
您无法获得多边形的所有点,因为它们是无限的,但您可以映射其中的一些点,为此您可以使用 QPainterPath:
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QPolygonF, QPainterPath
def map_n_points_of_polygon(polygon, n):
path = QPainterPath()
path.addPolygon(polygon)
return [path.pointAtPercent(i / (n - 1)) for i in range(n)]
def main():
poly = QPolygonF([QPointF(1, 1), QPointF(0, 10), QPointF(10, 10), QPointF(10, 0)])
points = map_n_points_of_polygon(poly, 100)
print(points)
if __name__ == "__main__":
main()