如何在Python中创建3D对象/类?
我现在的目标是从一个文本文件中读取一些点,然后把这些点变成三维对象。虽然不需要把它们可视化,但我希望把它们存储在对象里,而不是仅仅用一个包含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)