2012-02-14 48 views
2

我試圖使用來自Android手機傳感器的數據顯示單個磁場矢量(點在空間中,帶有來自箭頭的箭頭)。我在Python中編寫了一個簡單的服務器來輪詢手機傳感器數據,並且我想繪製實時接收到的數據。我正在尋找一個簡單的解決方案,但我找不到任何。我需要在3維空間中繪製一個簡單的動畫箭頭向量

我看着matplotlib,blender和visual python,但我找不到一個簡單的解決方案,只需要3個座標和繪圖。收到的數據只是一個有3點的矢量。來自起點的箭頭並不重要,我只是想能夠在三維空間中看到移動點。

此外,如有必要,我可以用Java重寫服務器並使用Java繪圖庫。我只需要一些建議,以及實現此目的的簡短代碼示例。

回答

3

可以繪製場景通過VPython很容易:

from visual import * 
import math 

def make_grid(unit, n): 
    nunit = unit * n 
    f = frame() 
    for i in xrange(n+1): 
     if i%5==0: 
      color = (1,1,1) 
     else: 
      color = (0.5, 0.5, 0.5) 

     curve(pos=[(0,i*unit,0), (nunit, i*unit, 0)],color=color,frame=f) 
     curve(pos=[(i*unit,0,0), (i*unit, nunit, 0)],color=color,frame=f) 
    return f 

arrow(pos=(0,0,0), axis=(5,0,0), color=(1,0,0), shaftwidth=0.1)  
arrow(pos=(0,0,0), axis=(0,5,0), color=(0,1,0), shaftwidth=0.1)  
arrow(pos=(0,0,0), axis=(0,0,5), color=(0,0,1), shaftwidth=0.1)  
grid_xy = make_grid(0.5, 10) 
grid_xz = make_grid(0.5, 10) 
grid_xz.rotate(angle=pi/2, axis=(1,0,0), origin=(0,0,0)) 
grid_yz = make_grid(0.5, 10) 
grid_yz.rotate(angle=-pi/2, axis=(0,1,0), origin=(0,0,0)) 
sphere(radius=0.3) 

obj = arrow(pos=(0,0,0), axis=(1,2,3), shaftwidth=0.3) 
th = 0 
while True: 
    rate(20) 
    obj.axis = (3*math.cos(th), 3*math.sin(th), 2) 
    th += 0.04 

enter image description here

2

VPython非常簡單:

pointer = arrow(pos=(0,0,0), axis=(1,2,3), shaftwidth=1) 

軸線=(1,2,3)只要改變到3個你的載體。更多的信息可以在here找到。

+0

如何實時繪製矢量圖? – BDuelz 2012-02-14 18:08:28

+0

我有這個工作。謝謝。 – BDuelz 2012-02-14 19:48:51

+0

但最後,你知道我如何添加一個網格來顯示x,y和z軸嗎? – BDuelz 2012-02-14 19:49:13

1

如果C++是你真的應該看看VTK選項

http://www.vtk.org/

這是非常強大的顯示3D矢量場,並且很容易使用

+0

+1。作爲一個方面說明,你可以通過官方包裝器(這是C++接口的直接克隆)或者通過更多的「pythonic」包裝器(如TVTK或Mayavi)在python中使用VTK。直接使用VTK對此而言是矯枉過正,但Mayavi的「mlab」界面使其非常容易。 – 2012-02-15 16:23:26