2 Stimmen

Ich muss einen einfachen animierten Pfeilvektor im 3-dimensionalen Raum darstellen

Ich versuche, einen einzelnen Magnetfeldvektor (Punkt im Raum, mit Pfeil vom Ursprung) mit Daten von Android-Handy-Sensoren anzuzeigen. Ich habe einen einfachen Server in Python geschrieben, um das Telefon für Sensordaten abzufragen, und ich möchte die empfangenen Daten in Echtzeit darstellen. Ich bin auf der Suche nach einer einfachen Lösung, aber ich kann keine finden.

Ich habe mir matplotlib, blender und visual python angesehen, aber ich konnte keine einfache Lösung finden, die einfach die 3 Koordinaten nimmt und plottet. Die erhaltenen Daten sind einfach ein Vektor mit 3 Punkten. Der Pfeil vom Ursprung ist nicht so wichtig, ich möchte nur in der Lage sein, den sich bewegenden Punkt im 3D-Raum zu visualisieren.

Falls erforderlich, kann ich den Server auch in Java umschreiben und eine Java-Plotbibliothek verwenden. Ich brauche nur einige Vorschläge und kurze Code-Beispiele, die dies erreichen.

3voto

HYRY Punkte 89513

Sie können mit VPython sehr einfach Szenen zeichnen:

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

2voto

jpalm Punkte 2117

VPython ist sehr einfach:

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

Ändern Sie einfach die Achse=(1,2,3) auf die 3 Punkte in Ihrem Vektor. Weitere Informationen finden Sie unter ici .

1voto

Simon Bergot Punkte 9940

Wenn C++ eine Option ist, sollten Sie wirklich einen Blick auf VTK werfen.

http://www.vtk.org/

Es ist sehr leistungsfähig, um 3D-Vektorfelder darzustellen, und ist ziemlich einfach zu bedienen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X