簡體   English   中英

Mayavi結合了兩個隱式3d曲面

[英]Mayavi combining two implicit 3d surfaces

我使用Mayavi繪制隱式3d曲面,我想將這些曲面組合成一個圖。 但是,當我這樣做時,會得到類似以下內容:

在此處輸入圖片說明

我正在使用的代碼:

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()

問題是,無論我怎么做,其中一個表面都是非常低的聚! 我在Mathematica中繪制了相同的圖,它產生了一個完美的圖:

在此處輸入圖片說明

我不希望獲得與Mathematica是商業產品相同的質量圖。 但是至少我希望兩個表面都光滑。

如果Mayavi不是完成任務的正確工具,也許您可​​以推薦一些與之不同的方法,以達到預期的效果。

提前致謝!

我想到了。 關鍵是將曲面設置為“無”以進行修剪。 然后可以以相同的方式繪制另一個表面。 此外,要根據比例繪制表面,還必須將x,y,z傳遞到輪廓3d中。

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()

結果如下:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM