2016-11-07 3 views
0

Mayavi를 사용하여 암시 적 3D 표면을 그려 내고 그 표면을 하나의 플롯으로 결합하고 싶습니다.두 개의 암시 적 3D 표면을 결합하는 Mayavi

enter image description here

내가 사용하고 코드는 :

import numpy as np 
from mayavi import mlab 

A=0.24639243776 
B=5.39100472027e-17 
C=1.71555149594 
D=1.72967325617 
E=7.50535440036 
F=-1.17072847143 
G=1.0 

x, y, z = np.ogrid[-3:1:100j, -10:1:100j, 0:3:100j] 

def Fun (x,y,z, A,B,C,D,E,F,G): 
    F1 = (x - A + y - B)/2 + np.sqrt(((x - A - y + B)/2) ** 2 + C * z ** 2) 
    F2 = np.sqrt(x*((F*y)/2 + (E*x)/D) + y*((F*x)/2 + (D*y)/E) + G*z**2) - np.sqrt(D*E) 
    F1 [F1 < 0] = F2 [F1 < 0] 
    return F1 

Fu = Fun (x,y,z,A,B,C,D,E,F,G) 

mlab.contour3d(Fu, contours = [0]) 
mlab.show() 

문제는 상관없이 내가 그것을 어떻게 표면 중 하나 인 것을 나는이 작업을 수행 할 때, 나는 이런 비슷한 것을 얻을 매우 낮은 폴리! 나는 티카에서 같은 꾸몄다과 완벽한 플롯을 생성합니다 티카는 상용 제품으로

enter image description here

나는 동일한 품질 플롯을 얻을 기대하지 않습니다. 그러나 적어도 두 표면이 매끄 럽기를 바랍니다.

Mayavi가 작업에 적합한 도구가 아니라면 원하는 결과를 얻을 수있는 것과 다른 것을 추천 할 수 있습니다.

미리 감사드립니다.

답변

0

나는 그것을 알아 냈다. 중요한 점은 서페이스를 잘라내 기 위해 없음으로 설정하는 것입니다. 그런 다음 다른면을 같은 방법으로 그릴 수 있습니다.

enter image description here

: 또한 표면 스케일, X, Y에있어서 플롯 되려면, Z가 또한 여기 contour3d

import numpy as np 
from mayavi import mlab 

A=0.24639243776 
B=5.39100472027e-17 
C=1.71555149594 
D=1.72967325617 
E=7.50535440036 
F=-1.17072847143 
G=1.0 

x, y, z = np.mgrid[-3:1:300j, -10:1:300j, 0:3:300j] 

def Fun1 (x,y,z, A,B,C,D,E,F,G): 
    F1 = (x - A + y - B)/2 + np.sqrt(((x - A - y + B)/2) ** 2 + C * z ** 2) 
    F2 = np.sqrt(x*((F*y)/2 + (E*x)/D) + y*((F*x)/2 + (D*y)/E) + G*z**2) - np.sqrt(D*E) 
    F1 [F2 > 0.0] = None 
    return F1 


def Fun2 (x,y,z, A,B,C,D,E,F,G): 
    F1 = (x - A + y - B)/2 + np.sqrt(((x - A - y + B)/2) ** 2 + C * z ** 2) 
    F2 = np.sqrt(x*((F*y)/2 + (E*x)/D) + y*((F*x)/2 + (D*y)/E) + G*z**2) - np.sqrt(D*E) 
    F2 [F1 > 0.0] = None 
    return F2 

Fu1 = Fun1 (x,y,z,A,B,C,D,E,F,G) 
Fu2 = Fun2 (x,y,z,A,B,C,D,E,F,G) 

mlab.contour3d(x,y,z,Fu1, contours = [0]) 
mlab.contour3d(x,y,z,Fu2, contours = [0]) 
mlab.show() 

내로 통과해야하는 결과