我正在我的课堂上准备这个练习在Matlab上(作为CS工程师的应用物理实验室的一部分),你必须模拟表面上的温度波动,行星的一侧总是面向母星,一个一边总是远离它(一半冷冻半烤)。这是我正在使用的功能:
T(Theta,Phi)= T0 + T1 * sin ^ 2(Theta)+ T2 *(1 + sin(Phi))
我想在球体表面上绘制上述函数作为颜色图,即表面上点的颜色应代表该点的温度T.我该怎么做呢?
到目前为止,我所做的一切都给了我一个这样的情节:
我想要的东西如下图所示,但当然根据我上面给出的功能给出了不同的颜色分布。
答案 0 :(得分:3)
这是部分原因:
T0 = 2 ; T1 = 30 ; T2 = 120 ; %// set your boundary conditions here
[X,Y,Z] = sphere(50) ; %// generate coordinates of a sphere
hs = surf(X,Y,Z) ; %// display the sphere and retrieve the handle to the graphic object
axis equal ; %// set the axis ratio so the sphere appear as a sphere
shading interp ; %// small refinement to not see the grid, you can comment that
[azimuth,elevation,r] = cart2sph(X,Y,Z) ; %// Convert cartesian coordinates to spherical referential
T = T0 + T1*sin(azimuth).^2 + T2.*(1+sin(elevation)) ; %// Calculate the temperature according to your model
set(hs,'CData',T) ; %// update the sphere graphic object with the new temperature as a collor coding
现在您仍然需要调整初始条件T0
,T1
和T3
,并且还可以添加一些轮换以防您的热情"和"冷"积分不在极点。