我最近接到了編寫一個基於Python的應用程序的任務,該應用程序生成STL文件(立體平版印刷文件格式 - 基本上是三角形列表)。我是python新手,我試圖避免使用過於複雜的庫。我遇到的問題是在我創建的矢量類中使用3D旋轉。在矢量類蟒蛇中的3D旋轉(緩慢減少的半徑)
我的旋轉功能如下所示:
def rotateY(self, amount):
'''Rotates a vertex on the Y axis around the origin by a given amount (in radians)'''
self.x = self.x * math.cos(amount) + self.z * math.sin(amount)
self.y = self.y
self.z = self.x * (-math.sin(amount)) + self.z * math.cos(amount)
正如你可能已經猜到了,Vector類具有x,y和z分量。據我所知,我對3D轉換和數學非常熟悉,代碼看起來是正確的。爲了簡單起見,我寧願不必拉入其他矩陣庫。
的問題出現了,當我試圖做這樣的事情:
v = vector(50.0, 0.0, 0.0)
rotationAmount = math.radians(10.0)
for i in range(0, 36):
v.rotateY(rotationAmount)
#Draw something at (v.x, v.y, v.z),
#...or in my case, create a list of triangles to export to an STL file
正如我繞Y軸旋轉,旋轉從原點到該點的距離緩慢下降。這裏有一個例子,在那裏我創建在每次旋轉後的矢量的位置的3D球體,和出口這一切爲STL(如在Maya中顯示):
正如你可以看到,從距離被旋轉的矢量的原點肯定會減少該矢量旋轉的次數。這也由每次旋轉後打印出的矢量的長度備份,如圖所示(初始向量設置爲(50.0,0.0,0.0)的位置處:
正如暫時的我試圖找到矢量的長度,對它進行標準化,旋轉,再次標準化,然後縮小原始大小,這似乎起了作用,但它看起來像一個非常骯髒的黑客,讓事情一樣簡單這工作
我的問題是:什麼導致載體的長度緩慢下降?
編輯:我應該更清楚一點。矢量類只支持原點周圍的旋轉。
我知道潛在的浮點問題,但在做50次旋轉後損失幾乎一半的矢量長度似乎有點荒謬,所以我認爲這不是完全浮點相關。 –