Mayavi mlab에서 BuiltinSurface를 애니메이션하는 방법은 무엇입니까?

에어로 쿠퍼

Mayavi mlab을 사용하여 지구 회전에 애니메이션을 적용하려고합니다. 과거에는 카메라를 지구의 BuiltinSurface 표현을 중심으로 회전하는 것만으로 성공했지만 프레임에 다른 많은 물체 (우주선, 별 등)를 그려야 할 때도 불편 해집니다. 아래 코드는 "거의"작동하는 것처럼 보입니다. Windows 10 컴퓨터에서 8 번 반복 실행 된 다음 애니메이션이 멈 춥니 다. 이 코드를 어떻게 고칠 수 있습니까? 아니면 일반적으로 BuiltinSurface를 애니메이션하는 더 좋은 방법이 있습니까?

import numpy as np
from mayavi import mlab
from mayavi.sources.builtin_surface import BuiltinSurface
from mayavi.modules.surface import Surface
from mayavi.filters.transform_data import TransformData


def rotMat3D(axis, angle, tol=1e-12):
    """Return the rotation matrix for 3D rotation by angle `angle` degrees about an
    arbitrary axis `axis`.
    """
    t = np.radians(angle)
    x, y, z = axis
    R = (np.cos(t))*np.eye(3) +\
    (1-np.cos(t))*np.matrix(((x**2,x*y,x*z),(x*y,y**2,y*z),(z*x,z*y,z**2))) + \
    np.sin(t)*np.matrix(((0,-z,y),(z,0,-x),(-y,x,0)))
    R[np.abs(R)<tol]=0.0
    return R



@mlab.show    
@mlab.animate(delay=200)
def anim():

    fig = mlab.figure()

    engine = mlab.get_engine()

    # Add a cylinder builtin source
    cylinder_src = BuiltinSurface()
    engine.add_source(cylinder_src)
    cylinder_src.source = 'earth'
    # Add transformation filter to rotate cylinder about an axis
    transform_data_filter = TransformData()
    engine.add_filter(transform_data_filter, cylinder_src)
    Rt = np.eye(4)
    Rt[0:3,0:3] = rotMat3D((0,0,1), 0) # in homogeneous coordinates
    Rtl = list(Rt.flatten()) # transform the rotation matrix into a list

    transform_data_filter.transform.matrix.__setstate__({'elements': Rtl})
    transform_data_filter.widget.set_transform(transform_data_filter.transform)
    transform_data_filter.filter.update()
    transform_data_filter.widget.enabled = False   # disable the rotation control further.

    # Add surface module to the cylinder source
    cyl_surface = Surface()
    engine.add_filter(cyl_surface, transform_data_filter)
    #add color property
    #cyl_surface.actor.property.color = (1.0, 0.0, 0.0)

    ind=1
    while ind<90:
        print ind
        Rt[0:3,0:3] = rotMat3D((0,0,1), ind) # in homogeneous coordinates
        Rtl = list(Rt.flatten()) # transform the rotation matrix into a list

        transform_data_filter.transform.matrix.__setstate__({'elements': Rtl})
        transform_data_filter.widget.set_transform(transform_data_filter.transform)
        transform_data_filter.filter.update()
        transform_data_filter.widget.enabled = False   # disable the rotation control further.

        # Add surface module to the cylinder source
        cyl_surface = Surface()
        engine.add_filter(cyl_surface, transform_data_filter)
        # add color property
        #cyl_surface.actor.property.color = (1.0, 0.0, 0.0)

        yield
        ind+=1


anim()
에어로 쿠퍼

나는 Mayavi를 사용하여 이것을 실현하는 방법을 찾을 수 없었습니다. 그러나 Vpython은이 작업을 수행하는 데 훨씬 더 적합한 것으로 보입니다. 몇 가지 다른 기능과 함께 회전하는 지구를 만들기 위해 아래 코드의 예제 섹션을 게시했습니다.

from visual import *

def destroy():
    for obj in scene.objects:
        obj.visible = False
        del obj

R = 6378. # radius of sphere
angle=0.
scene.range = 10000.
SunDirection=vector(.77,.77,0)
# scene.fov = 0.5
scene.center = (0,0,0)
scene.forward = (-1,0,-1)
scene.up = (0,0,1)
scene.lights=[distant_light(direction=SunDirection, color=color.gray(0.8)),
              distant_light(direction=-SunDirection, color=color.gray(0.3))]
x=0
y=0

while True:
    rate(10)

    angle=angle+1.*pi/180.

    destroy()
    s = sphere(pos=(x,y,0), radius=R, material=materials.BlueMarble)
    s.rotate(angle=90.*pi/180.,axis=(1,0,0)) # Always include this to rotate Earth into correct ECI x y z frame
    s.rotate(angle=90.*pi/180.,axis=(0,0,1)) # Always include this to rotate Earth into correct ECI x y z frame
    s.rotate(angle=angle, axis=(0,0,1)) # This rotation causes Earth to spin on its axis

    xaxis = arrow(pos=(0,0,0),  axis=vector(1,0,0)*7000, shaftwidth=100, color=color.red)
    yaxis = arrow(pos=(0,0,0),  axis=vector(0,1,0)*7000, shaftwidth=100, color=color.green)
    zaxis = arrow(pos=(0,0,0),  axis=vector(0,0,1)*7000, shaftwidth=100, color=color.blue)

    ST = cone(pos=(0,8000,0),axis=(0,700,0),radius=700*tan(10*pi/180),color=color.blue,opacity=1)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

jQuery-메뉴에서 상자를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

Mayavi의 그리드 플롯에 마스크를 사용하는 방법은 무엇입니까?

분류에서Dev

SwiftUI에 표시되는 애니메이션에서 뷰를 중지하는 방법은 무엇입니까?

분류에서Dev

CSS를 사용하여 javafx에서 텍스트를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

애니메이션 div를 웹 페이지 섹션에 제한하는 방법은 무엇입니까?

분류에서Dev

CSS에서 이미지 위치를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

이 중첩 된 div 요소에서 크기를 애니메이션하는 방법은 무엇입니까? (jQuery)

분류에서Dev

Android의 URL에서 애니메이션 GIF 이미지를 재생하는 방법은 무엇입니까?

분류에서Dev

JQuery 애니메이션 슬라이드에서 속도를 조정하는 방법은 무엇입니까?

분류에서Dev

DC.JS 행 차트에서 행 순서를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 애니메이션 함수에 객체를 전달하는 방법은 무엇입니까?

분류에서Dev

SwiftUI에서 상태 변수를 통해 모양을 애니메이션하는 방법은 무엇입니까?

분류에서Dev

Alpha로 TextView를 왼쪽에서 오른쪽으로 애니메이션하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 애니메이션 후 개체 위치를 저장하는 방법은 무엇입니까?

분류에서Dev

div를 위에서 아래로 애니메이션하는 방법은 무엇입니까? 별똥별처럼

분류에서Dev

Google 크롬에서 애니메이션 GIF를 중지하는 방법은 무엇입니까?

분류에서Dev

Google Glass : cardScrollView에서 변경 카드를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

성공 함수에서 div를 두 번 애니메이션하는 방법은 무엇입니까?

분류에서Dev

Qt에서 애니메이션 세트를 여러 번 표시하는 방법은 무엇입니까?

분류에서Dev

각 ListView 항목 내에서보기를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

IOS 용 트위터에서 애니메이션 GIF를 업로드하는 방법은 무엇입니까?

분류에서Dev

JS에서 마스크 SVG를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

애니메이션 후 SVG에서 원래 대시를 유지하는 방법은 무엇입니까?

분류에서Dev

2π 경계에서 회전 애니메이션 점프를 피하는 방법은 무엇입니까?

분류에서Dev

xaml에서 요소의 너비를 여러 번 애니메이션하는 방법은 무엇입니까?

분류에서Dev

iOS 카메라 롤에 애니메이션 GIF를 작성하는 방법은 무엇입니까?

분류에서Dev

다른 이미지에 닿을 때 이미지를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

슬라이드 인 애니메이션을 사용하여 ItemsControl에 삽입 된 개체를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

애니메이션이 아닌 GIF에서 애니메이션 GIF를 정렬하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    jQuery-메뉴에서 상자를 애니메이션하는 방법은 무엇입니까?

  2. 2

    Mayavi의 그리드 플롯에 마스크를 사용하는 방법은 무엇입니까?

  3. 3

    SwiftUI에 표시되는 애니메이션에서 뷰를 중지하는 방법은 무엇입니까?

  4. 4

    CSS를 사용하여 javafx에서 텍스트를 애니메이션하는 방법은 무엇입니까?

  5. 5

    애니메이션 div를 웹 페이지 섹션에 제한하는 방법은 무엇입니까?

  6. 6

    CSS에서 이미지 위치를 애니메이션하는 방법은 무엇입니까?

  7. 7

    이 중첩 된 div 요소에서 크기를 애니메이션하는 방법은 무엇입니까? (jQuery)

  8. 8

    Android의 URL에서 애니메이션 GIF 이미지를 재생하는 방법은 무엇입니까?

  9. 9

    JQuery 애니메이션 슬라이드에서 속도를 조정하는 방법은 무엇입니까?

  10. 10

    DC.JS 행 차트에서 행 순서를 애니메이션하는 방법은 무엇입니까?

  11. 11

    JavaScript에서 애니메이션 함수에 객체를 전달하는 방법은 무엇입니까?

  12. 12

    SwiftUI에서 상태 변수를 통해 모양을 애니메이션하는 방법은 무엇입니까?

  13. 13

    Alpha로 TextView를 왼쪽에서 오른쪽으로 애니메이션하는 방법은 무엇입니까?

  14. 14

    JavaScript에서 애니메이션 후 개체 위치를 저장하는 방법은 무엇입니까?

  15. 15

    div를 위에서 아래로 애니메이션하는 방법은 무엇입니까? 별똥별처럼

  16. 16

    Google 크롬에서 애니메이션 GIF를 중지하는 방법은 무엇입니까?

  17. 17

    Google Glass : cardScrollView에서 변경 카드를 애니메이션하는 방법은 무엇입니까?

  18. 18

    성공 함수에서 div를 두 번 애니메이션하는 방법은 무엇입니까?

  19. 19

    Qt에서 애니메이션 세트를 여러 번 표시하는 방법은 무엇입니까?

  20. 20

    각 ListView 항목 내에서보기를 애니메이션하는 방법은 무엇입니까?

  21. 21

    IOS 용 트위터에서 애니메이션 GIF를 업로드하는 방법은 무엇입니까?

  22. 22

    JS에서 마스크 SVG를 애니메이션하는 방법은 무엇입니까?

  23. 23

    애니메이션 후 SVG에서 원래 대시를 유지하는 방법은 무엇입니까?

  24. 24

    2π 경계에서 회전 애니메이션 점프를 피하는 방법은 무엇입니까?

  25. 25

    xaml에서 요소의 너비를 여러 번 애니메이션하는 방법은 무엇입니까?

  26. 26

    iOS 카메라 롤에 애니메이션 GIF를 작성하는 방법은 무엇입니까?

  27. 27

    다른 이미지에 닿을 때 이미지를 애니메이션하는 방법은 무엇입니까?

  28. 28

    슬라이드 인 애니메이션을 사용하여 ItemsControl에 삽입 된 개체를 애니메이션하는 방법은 무엇입니까?

  29. 29

    애니메이션이 아닌 GIF에서 애니메이션 GIF를 정렬하는 방법은 무엇입니까?

뜨겁다태그

보관