Мне нужно построить простой анимированный вектор стрелки в трехмерном пространстве - PullRequest
2 голосов
/ 14 февраля 2012

Я пытаюсь отобразить один вектор магнитного поля (точка в пространстве, со стрелкой от начала координат), используя данные с датчиков телефона Android.Я написал простой сервер на Python для опроса телефона на предмет данных датчиков, и я хочу отобразить полученные данные в режиме реального времени.Я ищу простое решение, но не могу его найти.

Я посмотрел на matplotlib, blender и visual python, но не смог найти достаточно простого решения, которое просто принимает 3 координаты иучастки.Полученные данные - это просто вектор с 3 точками.Стрелка от начала координат не так важна, я просто хочу иметь возможность визуализировать движущуюся точку в трехмерном пространстве.

Также, при необходимости, я могу переписать сервер на Java и использовать библиотеку печати Java.Мне просто нужны некоторые предложения и короткие примеры кода, которые достигают этого.

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Вы можете нарисовать сцену с помощью 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 голосов
/ 14 февраля 2012

VPython очень прост:

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

Просто измените ось = (1,2,3) на 3 точки в вашем векторе. Более подробную информацию можно найти здесь .

1 голос
/ 14 февраля 2012

Если c ++ является опцией, вам действительно стоит взглянуть на VTK

http://www.vtk.org/

Это очень мощный инструмент для отображения трехмерных векторных полей и довольно простой в использовании

...