MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2818|回复: 17|关注: 0

[已解决] 怎么做出这样的三维图啊

[复制链接]

新手

13 麦片

财富积分


050


7

主题

17

帖子

1

最佳答案
已知看见曲面的方程表达式为: QQ截图20170612221326.png ,我做出来的图是 QQ截图20170612221448.png ,而别人做出来的图是: QQ截图20170612221608.png




最主要的区别是,别人的XY平面投影是圆形,我的XY面投影是矩形啊,
我的代码是:
Rb=265;
Rc=132.5;
[x,y]=meshgrid(-80:1:80,-80:1:80);
z=Rb-sqrt((Rb-Rc+sqrt(Rc^2-(y).^2)).^2-(x).^2);
surf(x,y,z);shading inter

请各位高手多多指教,怎么才能和别人的效果一样,不胜感激!

QQ截图20170612221549.png

论坛优秀回答者

入门

370 麦片

财富积分


50500


0

主题

2642

帖子

87

最佳答案
  • 关注者: 40
发表于 2017-6-12 23:02:44 来自手机 | 显示全部楼层
hl051130522 发表于 2017-6-12 22:17
已知看见曲面的方程表达式为:,我做出来的图是,而别人做出来的图是:,



那么你可以问问那个人怎么做的,surf,mesh都做不到
来自: 微社区

MATLAB 基础讨论
版块优秀回答者

入门

417 麦片

财富积分


50500


67

主题

1271

帖子

80

最佳答案
  • 关注者: 42
发表于 2017-6-13 08:55:10 | 显示全部楼层
可 以根据x,y坐标,得到半径,将半径大于一定值 (你这里应该是80)的z都设置为nan.
同样的程序画图。
fig_cir_curf.png

新手

13 麦片

财富积分


050


7

主题

17

帖子

1

最佳答案
 楼主| 发表于 2017-6-13 09:51:11 | 显示全部楼层
meatball1982 发表于 2017-6-13 08:55
可 以根据x,y坐标,得到半径,将半径大于一定值 (你这里应该是80)的z都设置为nan.
同样的程序画图。 ...

具体怎么设定啊?

MATLAB 基础讨论
版块优秀回答者

入门

417 麦片

财富积分


50500


67

主题

1271

帖子

80

最佳答案
  • 关注者: 42
发表于 2017-6-13 16:15:38 | 显示全部楼层
hl051130522 发表于 2017-6-13 09:51
具体怎么设定啊?

根据x,y可以求出半径 r. r=(x^2+y^2)^0.5
判断,
if r > 80
对应的z = nan
else
do nothing
end

然后 画图。

论坛优秀回答者

权威

5750 麦片

财富积分



5

主题

7093

帖子

1317

最佳答案
  • 关注者: 282
发表于 2017-6-13 16:36:12 | 显示全部楼层 |此回复为最佳答案
楼上的方法是可行的。但好像楼主的图不是这样做的,因为边角不太
  1. Rb=265;
  2. Rc=132.5;
  3. [x,y]=meshgrid(-80:0.05:80,-80:0.05:80);
  4. z=Rb-sqrt((Rb-Rc+sqrt(Rc^2-(y).^2)).^2-(x).^2);
  5. r=x.^2+y.^2;z(r>80)=nan;
  6. surf(x,y,z);shading interp
复制代码
平滑。

新手

13 麦片

财富积分


050


7

主题

17

帖子

1

最佳答案
 楼主| 发表于 2017-6-13 17:06:43 | 显示全部楼层
meatball1982 发表于 2017-6-13 16:15
根据x,y可以求出半径 r. r=(x^2+y^2)^0.5
判断,
if r > 80

非常感谢阁下的详细指导,thank you

MATLAB 基础讨论
版块优秀回答者

入门

417 麦片

财富积分


50500


67

主题

1271

帖子

80

最佳答案
  • 关注者: 42
发表于 2017-6-13 20:15:24 | 显示全部楼层
jingzhaos 发表于 2017-6-13 16:36
楼上的方法是可行的。但好像楼主的图不是这样做的,因为边角不太平滑。
  1. clear all
  2. clc


  3. %% outline
  4. % http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=511115&page=1&extra=#pid3231493
  5. Rb=265;
  6. Rc=132.5;
  7. [x,y]=meshgrid(-80:0.1:80,-80:0.1:80);
  8. R=sqrt(x.^2+y.^2);
  9. z=Rb-sqrt((Rb-Rc+sqrt(Rc^2-(y).^2)).^2-(x).^2);
  10. z(R>80)=nan;

  11. surf(x,y,z,'edgecolor','none')
复制代码


哈哈,思路基本一样,我用的是0.1(你的是0.05),
我是想LZ自己实现之后,发现了问题,再作进一步的讨论。否则,学到的东西少。

另外,你的程序中,好像
r那里应该 sqrt一下。
因为所选的数比较少,所以不平滑的现象也明显了一些。

论坛优秀回答者

权威

5750 麦片

财富积分



5

主题

7093

帖子

1317

最佳答案
  • 关注者: 282
发表于 2017-6-13 21:03:14 | 显示全部楼层
meatball1982 发表于 2017-6-13 20:15
哈哈,思路基本一样,我用的是0.1(你的是0.05),
我是想LZ自己实现之后,发现了问题,再作进一步的讨论 ...

我是觉得楼主的那个图可能不是采取这种方式画的

MATLAB 基础讨论
版块优秀回答者

入门

417 麦片

财富积分


50500


67

主题

1271

帖子

80

最佳答案
  • 关注者: 42
发表于 2017-6-13 21:51:46 | 显示全部楼层
jingzhaos 发表于 2017-6-13 21:03
我是觉得楼主的那个图可能不是采取这种方式画的

为什么这么想??
我觉得除了colormap不一样,其它都差不多啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表