2012-01-23 88 views
2

我現在的最終目標是獲取從文本文件中讀取的點,並將它們轉換爲3d對象。它們不需要可視化,但需要將其存儲在對象中,而不僅僅是包含x,y和z值的字符串。該文件給了我六個數字,每個x,y和z中的兩個,我想知道如何創建一個點類/對象,它將採用所有三個變量,然後是一個線對象/類,它將採用兩個點。如何在Python中創建一個3d對象/類?

+0

要顯示3D對象,還是隻存儲它? – juliomalegria

+0

將字符串轉換爲數字並不重要。所以定義了兩個類'Point3D(x,y,z)'和'Line(point1,point2)'。你真的想做什麼? – delnan

+1

我已經寫了一個教程,幾乎做你想做的:http://www.petercollingridge.co.uk/pygame-3d-graphics-tutorial/nodes-and-edges –

回答

7

只要定義一個PointLine類:

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) 
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)