如何在Python中创建3D对象/类?

2 投票
2 回答
5615 浏览
提问于 2025-04-17 10:55

我现在的目标是从一个文本文件中读取一些点,然后把这些点变成三维对象。虽然不需要把它们可视化,但我希望把它们存储在对象里,而不是仅仅用一个包含x、y和z值的字符串。这个文件给我六个数字,每种坐标x、y和z各有两个。我在想,怎么才能创建一个点的类/对象,来接收这三个变量,然后再创建一个线的类/对象,来接收两个这样的点。

2 个回答

2

一旦你从文件中获取了数据(这时候可以用正则表达式来处理),你就需要把这些数据放入一个类里,这个类是用来存储两个点的(这两个点本身也可以是对象),比如:

class Point(tuple):
    @property
    def x:
        return self[0]

    @property
    def y:
        return self[1]

    @property
    def z:
        return self[2]

class Vector(object):
    def __init__(self, x1, y1, z1, x2, y2, z2):
        self._a = Point(x1, y1, z1)
        self._b = Point(x2, y2, z2)

    @property
    def a(self):
        return self._a

    @property
    def b(self):
        return self._b

    # Other methods here e.g.

    @property
    def i(self):
        return self.b.x - self.a.x

    @property
    def j(self):
        return self.b.y - self.a.y

    @property
    def k(self):
        return self.b.z - self.a.z

    def length(self):
        return ( self.i**2 + self.j**2 + self.k**2 ) ** (1/2)
7

只需要定义一个 Point 类和一个 Line 类:

class Point(object):
    def __init__(self, x=0, y=0 ,z=0):
        self.x = x
        self.y = y
        self.z = z

class Line(object):
    def __init__(self, point1=None, point2=None):
        self.point1 = point1 or Point() # (0,0,0) by default
        self.point2 = point2 or Point() # (0,0,0) by default

然后就可以用这些类来创建点和线的对象:

>>> p1 = Point(1, 2, 3)
>>> p2 = Point(4, 5, 6)
>>> line = Line(p1, p2)

撰写回答