gpt4 book ai didi

python - 包含形状和它们之间的空间关系的正确数据结构

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:19 26 4
gpt4 key购买 nike

我是 Python 的初学者,我真的需要一些帮助。

我有一个(有效的)脚本,可以检索手绘图像中的简单形状。下一步是确定形状和包含所有这些信息的数据结构之间的空间关系。我知道如何确定形状之间的空间关系,如内部、旁边、上方和下方。但是,我需要一个数据结构来包含所有这些信息:边缘的形状 (x,y) 坐标以及与其他形状的关系。我在考虑分层表示,就像这张图:

enter image description here

其中每个形状都包含信息。

Shape = (x0, y0, ..., xn, yn), position(Shape)

在哪里

  • (x0, y0, ..., xn, yn) 是形状边缘的坐标
  • 位置(形状)是形状与另一个形状的关系。

例如:

S1: (x0, y0, x1, y1, x2, y2, x3, y3), below(T1)
T1: (x0, y0, x1, y1, x2, y2), above(S1)
C1: (radius), inside(S1), above(C2)
C2: (radius), inside(S1), below(C1)

但是如何用python实现呢?我阅读了有关词典 ( here ) 的信息,但我不确定它是否适合在此处使用。为什么?因为我需要在数据结构中写一个形状相对于其他形状的位置。那我怎么写这个关系呢?我对这个论点很困惑,我真的需要帮助。

最佳答案

为此使用 Python 的类。

一个简单的例子。让我们首先定义一个 Point 数据结构,它将保存有关笛卡尔坐标中的点的信息:

class Point(object):
""" Define a point at X, Y """
def __init__(self, x=0, y=0):
self.x=x
self.y=y

现在让我们定义一个圆:

class Circle(object):
def __init__(self, x=0, y=0, radius=1):
""" Define a circle centered at X, Y with radius """
self.x=x
self.y=y
self.radius=radius

现在您可以声明每个的实例并测试该点是否在圆内:

>>> c1=Circle()      # default of x=0, y=0, radius=1
>>> p1=Point(5,6) # a point at x=5, y=6

那个点在圆圈内吗?你可以测试一下:

>>> ((p1.x-c1.x)**2 + (p1.y - c1.y)**2)**0.5<c1.radius
False

如果我们不必记住圆心和圆点的毕达哥拉斯定理,那会容易得多。让我们将基本功能添加到 Circle 对象中:

class Circle(object):
def __init__(self, x=0, y=0, radius=1):
self.x=x
self.y=y
self.radius=radius

def point_in(self, p):
return ((p.x-self.x)**2 + (p.y - self.y)**2)**0.5<self.radius

现在您可以使用更符合逻辑的方法:

>>> c1.point_in(Point(5,5))
False
>>> c1.point_in(Point(.5,.5))
True

那么“上方”或“下方”呢?我想“上方”意味着如果一个点位于圆和 Point.y > Circle.y 之外。将其添加到 Circle 类:

def above(self, p):
return ((p.x-self.x)**2 + (p.y - self.y)**2)**0.5 > self.radius and p.y>self.y

测试它:

>>> c1.above(Point(5,5)) 
True

您可以扩展此概念,以便您可以测试一个圆是否与另一个圆或由点定义的多边形区域重叠。您还可以扩展它,以便每个形状都将使用适合自己和其他形状的公式。 (你怎么知道多边形是否相交?现在我们正在讨论更复杂的问题!开始 HERE 。如果你有 OpenGL,你可以用两种加法颜色在屏幕外绘制两个多边形并测试添加的像素颜色...)

然后将其扩展为您所说的三角形、正方形、矩形、圆形的“上方”和“下方”。您对圆形以外的形状的基本定义将需要旋转或仅通过其顶点定义为多边形。

关于python - 包含形状和它们之间的空间关系的正确数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21581582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com