找回密码
 注册
Simdroid-非首页
楼主: ckvictor

[图形图像] 让人头疼的问题!!!

[复制链接]
发表于 2009-4-17 23:42:47 | 显示全部楼层 来自 美国
本帖最后由 smarten 于 2009-4-17 09:53 编辑

像一元函数可以做出像你说的平面,不过性质上有点变化了。其实是把一组平行于xy平面的线变成面。例如 y = x^2 变成这样的参数方程 f = (x, y=x^2, z=z). 一般的来说,对于一个方程, f(x,y) = 0, 先解出y = g(x)的函数,然后画 (x, y =g(x), z=z)的ParametricPlot3D.

先来一个简单的,让你验证一下, y = x
  1. ParametricPlot3D[{x , y = x , z}, {x, -2, 2}, {z, -2, 2},
  2. AxesLabel -> {"x", "y", "z"}]
复制代码
得到:

例子:x^0.82 = 65.96*y ==> y = x^0.82/65.96 ==> (x, y = x^0.82/65.96, z)
  1. ParametricPlot3D[{x, x^0.82/65.96 , z}, {x, 1, 10}, {z, 0, 4},
  2. AxesLabel -> {"x", "y", "z"}, BoxRatios -> {1, 1, 1}, PlotRange -> All]
复制代码
得到:


如果你这么做的话,画成对数坐标也可以。 就是先画ParametricPlot3D然后把Ticks重写一下。Mathematica本身的LogLogPlot就是这么写的。

简单的说就是这个方法可以用来画平面:
例子:
  1. ParametricPlot3D[{{r Sin[a] , r Cos[a], 0}, {2 Sin[a] , 2 Cos[a],
  2.    r}}, {r, 0, 2}, {a, 0, 2 \[Pi]}, AxesLabel -> {"x", "y", "z"},
  3. Mesh -> False]
复制代码

得到一个容器:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-18 14:47:24 | 显示全部楼层 来自 黑龙江大庆
Simdroid开发平台
谢谢你,smarten!研究了你写的那段对数坐标系代码后,我有这样的想法,你看看怎么样?
1、我尝试在第一行命令中又加了一个变量,用以表示z的绘制范围,logPlot3D[f_, {vara1_Symbol, a1start_?Positive, a1end_?Positive}, {vara2_Symbol, a2start_?Positive, a2end_?Positive}, {vara3_Symbol, a3start_?Positive, a3end_?Positive}, Opts__: (AspectRatio -> 1/GoldenRatio)] :=。。。并改写了最后一行,Ticks -> {ff[a1start, a1end], ff[a2start, a2end], ff[a3start, a3end]},加了第三个变量。但是绘制出来的图,其z的绘制范围不是按照我给的显示的,如只画z,0.001,0.566,而显示的仍是整个图像,不是位于z,0.001,0.566的那部分呢??
2、像你说的可以在三维对数坐标系中绘制一元函数的图像,用ParametricPlot3D然后把Ticks重写一下,也是跟你发的代码一样,先取对数在作图么?我弄了半天,先取log在绘图但总是出错,感觉自己对mathematica学的太浅了,你能发一个类似的代码么,用ParametricPlot3D绘制一元函数的,谢谢!!!
回复 不支持

使用道具 举报

发表于 2009-4-18 15:13:35 | 显示全部楼层 来自 天津
强大呀,我也要好好学习了~
回复 不支持

使用道具 举报

发表于 2009-4-19 20:54:08 | 显示全部楼层 来自 甘肃兰州
smarten看来是费心不少啊,写了那么长的代码
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-19 21:46:36 | 显示全部楼层 来自 黑龙江大庆
求助:如何控制图像的绘制范围呢?如只画z从0.25到0.56的图像,而整个坐标系中z轴的显示范围是0.01到10!
回复 不支持

使用道具 举报

发表于 2009-4-20 02:16:54 | 显示全部楼层 来自 美国
PlotRange, Ticks和本身的图像没有关系,你可以随意改变的。ParametricPlot3D是属于Graphics3D的子类。我把ParametricPlot3D的一个例子
  1. ParametricPlot3D[{Cos[u], Sin[u] + Cos[v], Sin[v]}, {u, 0,
  2.   2 \[Pi]}, {v, -\[Pi], \[Pi]}]
复制代码
改变了一下,加了一个球,改变了坐标范围,得到,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-20 10:03:17 | 显示全部楼层 来自 黑龙江大庆
谢谢你,smarten!
如你所说的PlotRange, Ticks和图像本身没有关系,我于是添加了几个选项:ParametricPlot3D[{Cos[u], Sin[u] + Cos[v], Sin[v]}, {u, 0, 2 \[Pi]}, {v, -\[Pi], \[Pi]}, AxesLabel -> {x, y, z}, PlotRange -> {{-1, 2}, {-2, 2}, {-1, 1}}, Ticks -> {Automatic, Automatic, {-0.5, .0, .5}}],改变了坐标轴和刻度的显示范围,跟你发的图一样,我理解了这一点;但是假如我只画对应于z从-0.5到0.5的函数图像,且各个轴和其刻度的显示范围都不变,那么还需要添加什么选项来实现这一点呢???
回复 不支持

使用道具 举报

发表于 2009-4-20 10:37:25 | 显示全部楼层 来自 美国
你还没完全明白我说的。你没有把那个球放进去。 我想说的是图是有数据部分(你给的u,v的范围或者从画出的图里面提取出来的)和显示格式部分(label, ticks, 线条。。。)。
你自己想想,应该能做的。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-20 16:36:11 | 显示全部楼层 来自 黑龙江大庆
谢谢,smarten!
g1 = ParametricPlot3D[{Cos[u], Sin[u] + Cos[v], Sin[v]}, {u, 0, 2 \[Pi]}, {v, -\[Pi], \[Pi]}];
g2 = ParametricPlot3D[{Cos[u] Cos[v], Sin[u] Cos[v], Sin[v]}, {u, 0, 2 \[Pi]}, {v, -\[Pi]/2, \[Pi]/2},         Mesh -> False];
Show[g1, g2, AxesLabel -> {x, y, z}, PlotRange -> {{-1, 1}, {-2, 2}, {-1, 1}}, Ticks -> {Automatic, Automatic, {-0.5, .0, .5}}]
我又放进去了一个球面,设置了下选项,跟你发的图一样了,明白了通过改变各个变量的变化区间实现对函数图像绘制范围的控制,如只画z从0.25到0.75部分的图像,而z轴的显示范围是0.01到10,可以如下实现:{z,0.25,0.75},PlotRange->{0.01,10}
但有一个问题是这样的,不知道我想的对不对,用你写的对数坐标系函数绘制图像如下:
logPlot3D[3-x-y,{x,0.01,10},{y,0.01,10},PlotRange -> {Log[{0.01, 10}], {Log[0.01], Log[10]}, {Log[0.001], Log[100]}}(当然mathematica会自动舍弃z<0的部分)
此时,z轴的显示范围是0.001到100,但是控制不了图像的绘制范围,如只画z从0.25到0.75部分的图像,且x和y的变化区间都不变,仍为{x,0.01,10},{y,0.01,10}。
好像logPlot3D命令中加入不了z的变化区间呢,还有一些自载命令如Plot3D与此类似,但好像可以加入z的变化区间,那么如何在你写的代码中在加入z的变化区间呢???这就是我一直想问的问题,可能一直没说明白,呵呵,让smarten费心了!!!
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-20 19:31:46 | 显示全部楼层 来自 黑龙江大庆
求助:我想解决上述问题可以有两种方法:
1、在命令logPlot3D中通过引入一变量,可以设置z的变化区间来实现对图像z方向的控制,如何引入还得请smarten你多多费心啊!
2、还可以通过选项RegionFunction -> Function[{x, y, z}, 0.25 < z < 0.75]来实现吧,但是我把这一选项原样加入到logPlot3D[3-x-y,{x,0.01,10},{y,0.01,10},RegionFunction -> Function[{x, y, z}, 0.25 < z < 0.75]]后,结果不是绘制z从0.25到0.75部分的图像,请问我哪个地方出错了呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-21 14:29:45 | 显示全部楼层 来自 黑龙江大庆
Filling 对ParametricPlot3D不好用呢?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-7 12:29 , Processed in 0.030254 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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