我想在用曲面图绘制的圆环内部绘制一条线。该线在圆环内部不应该可见-像圆环的内侧一样,只能在圆环的“末端”看到(我将圆环的一半切除)。但是,我绘制的线条随处可见(在图中可以看到)。
我使用了以下代码:
Action finalLamda = Expression.Lambda<Action<TInstance>>(actionExpression, instanceExpression).Compile();
我认为只需先画线 即可解决我的问题,但事实并非如此。任何建议或帮助如何更改生产线的行为都将受到赞赏。
var actionWithTryCatchExpression = WrapActionExpressionIn_Try_Catch_RethrowWithAdditionalMessage(actionExpression);
Action finalLamda = Expression.Lambda<Action<TInstance>>(actionWithTryCatchExpression, instanceExpression).Compile();
答案 0 :(得分:1)
更简单的方法是使用Mayavi库。这与matplotlib
非常相似,此脚本唯一有意义的区别是传递给x
的{{1}},y
和z
数组以绘制线应为1d,并且plot3d
的设置有所不同(取决于在绘制之前还是之后设置,并且alt / az是从不同参考位置测量的。)
view
如果您不能使用import numpy as np
import mayavi.mlab as mlab
from mayavi.api import OffScreenEngine
mlab.options.offscreen = True
# theta: poloidal angle | phi: toroidal angle
# note: only plot half a torus, thus phi=0...pi
theta = np.linspace(0, 2.*np.pi, 200)
phi = np.linspace(0, 1.*np.pi, 200)
# major and minor radius
R0, a = 3., 1.
x_circle = (R0 + a*np.cos(.0)) * np.cos(phi)
y_circle = (R0 + a*np.cos(.0)) * np.sin(phi)
z_circle = np.full_like(x_circle, a * np.sin(0.0))
# Delay meshgrid until after circle construction
theta, phi = np.meshgrid(theta, phi)
x_torus = (R0 + a*np.cos(theta)) * np.cos(phi)
y_torus = (R0 + a*np.cos(theta)) * np.sin(phi)
z_torus = a * np.sin(theta)
mlab.figure(bgcolor=(1.0, 1.0, 1.0), size=(1000,1000))
mlab.view(azimuth=90, elevation=105)
mlab.plot3d(x_circle, y_circle, z_circle)
mlab.mesh(x_torus, y_torus, z_torus, color=(0.0, 0.5, 1.0))
mlab.savefig("./example.png")
# mlab.show() has issues with rendering for some setups
,则可以使用mayavi
完成此操作,这很令人不快。该方法基于creating transparent 'bridges' between surfaces and then plotting them together as one surface的思想。对于更复杂的组合而言,这并非微不足道,但这是一个环形直线示例,该直线非常简单
matplotlib
注意在两种情况下,为了简化演示,我都更改了圆以匹配环形线圈的主半径,可以根据需要轻松地对其进行更改。