用mfp语言的plot3d函数绘制上海地标东方明珠电视塔
mfp吧
全部回复
仅看楼主
level 1
woshiwppaa 楼主
代码如下:
plot3d("东方明珠","东方明珠","x","y","z", _
"",false,"red",null,"cyan",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"10*cos(u)*cos(v)","10*sin(u)*cos(v)","10*sin(v)", _ //绘制大球
"",false,"green",null,"blue",null,0,8,0.25,0,50,50,"iff(u<=2,1.5*cos(u*pi)-2,and(u>=3,u<=5), 1.5*cos(u*pi), u>=6, 1.5*cos(u*pi)+2, Nan)","iff(u<=2,1.5*sin(u*pi)+2/sqrt(3),and(u>=3,u<=5), 1.5*sin(u*pi)-2, u>=6, 1.5*sin(u*pi)+2/sqrt(3), Nan)","v", _ //绘制大球和小球之间的三根连接柱
"",false,"magenta",null,"white",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"6*cos(u)*cos(v)","6*sin(u)*cos(v)","6*sin(v)+50", _ //绘制小球
"",false,"ltgray",null,"yellow",null,0,8,0.25,-20,0,20,"iff(u<=2,4*cos(u*pi)-v*sqrt(3)/2,and(u>=3,u<=5), 4*cos(u*pi), u>=6, 4*cos(u*pi)+v*sqrt(3)/2, Nan)","iff(u<=2,4*sin(u*pi)+v/2,and(u>=3,u<=5), 4*sin(u*pi)-v*sqrt(3)/2, u>=6, 4*sin(u*pi)+v/2, Nan)","v", _ //绘制底部三根支撑斜柱体
"",false,"red",null,"ltgray",null,-1,1,0.2,50,90,10,"1.5*max(0.2,(80-v)/30)*cos(u*pi)","1.5*max(0.2,(80-v)/30)*sin(u*pi)","v", _ //绘制顶部天线
"",false,"green",null,"green",null,-pi,pi,pi/10,0,25,5,"cos(u)*v","sin(u)*v","-20") //绘制绿地
2015年08月10日 03点08分 1
level 1
woshiwppaa 楼主
绘制效果:
2015年08月10日 03点08分 2
level 1
woshiwppaa 楼主
手机运行的效果更好,就是比较慢,要1分钟左右
2015年08月10日 04点08分 3
level 1
woshiwppaa 楼主
对代码进行了一些修改,现在的图形更漂亮。
代码如下:
function plot_dfmz()
plot3d("东方明珠","东方明珠","x","y","z", _
"",false,"red",null,"yellow",null,0,8,0.25,0,20,20,"iff(u<=2,3*cos(u*pi)-(20-v)*sqrt(3)/2,and(u>=3,u<=5), 3*cos(u*pi), u>=6, 3*cos(u*pi)+(20-v)*sqrt(3)/2, Nan)","iff(u<=2,3*sin(u*pi)+(20-v)/2,and(u>=3,u<=5), 3*sin(u*pi)-(20-v)*sqrt(3)/2, u>=6, 3*sin(u*pi)+(20-v)/2, Nan)","v", _ //绘制底部三根支撑斜柱体
"",false,"green",null,"yellow",null,-1,1,0.25,0,20,20,"cos(u*pi)*2","sin(u*pi)*2","v", _ //绘制连接柱
"",false,"red",null,"cyan",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"10*cos(u)*cos(v)","10*sin(u)*cos(v)","10*sin(v)+20", _ //绘制大球
"",false,"green",null,"blue",null,0,8,0.25,20,70,50,"iff(u<=2,1.5*cos(u*pi)-2,and(u>=3,u<=5), 1.5*cos(u*pi), u>=6, 1.5*cos(u*pi)+2, Nan)","iff(u<=2,1.5*sin(u*pi)+2/sqrt(3),and(u>=3,u<=5), 1.5*sin(u*pi)- 4/sqrt(3), u>=6, 1.5*sin(u*pi)+2/sqrt(3), Nan)","v", _ //绘制大球和小球之间的三根连接柱
"",false,"magenta",null,"white",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"6*cos(u)*cos(v)","6*sin(u)*cos(v)","6*sin(v)+70", _ //绘制小球
"",false,"yellow",null,"green",null,0,2,0.25,70,85,15,"cos(u*pi)*1.5","sin(u*pi)*1.5","v", _ //绘制小球上部的立柱
"",false,"red",null,"cyan",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"2*cos(u)*cos(v)","2*sin(u)*cos(v)","2*sin(v)+85", _ //绘制更小的球
"",false,"red",null,"ltgray",null,-1,1,0.2,85,115,10,"0.5*max(0.2,(115-v)/30)*cos(u*pi)","0.5*max(0.2,(115-v)/30)*sin(u*pi)","v") //绘制顶部天线
endf
整个计算在我手机上大概花费1分12秒。
图形如下:
2015年08月10日 23点08分 4
level 14
厉害!
2015年08月11日 00点08分 5
level 13
楼主,如何运行的?我没画过3D的,不知道如何运行啊
2015年08月11日 02点08分 6
首先,创建一个空白的.mfps文件,把上述代码拷贝到你的文件中,然后把文件保存到你的AnMath\scripts目录下,然后启动可编程科学计算器,在命令提示符中运行plot_dfmz()即可。
2015年08月11日 02点08分
level 13
嗯嗯,试过了。很强大
2015年08月11日 02点08分 7
level 13
就是你的代码没看懂呢
2015年08月11日 02点08分 8
我会把我的手册的第2,3,4,5章发布出来,这样就容易懂了。
2015年08月11日 02点08分
回复woshiwppaa:什么时候发表。手册一看了,很好。求2,3,4,5
2015年08月11日 02点08分
level 13
楼主,可以画汽车嘛?包括里面的简单的内部结构?
2015年08月11日 02点08分 9
当然可以
2015年08月11日 03点08分
level 13
等你手册出来了,我来联系画
2015年08月11日 09点08分 10
可编程科学计算器用户手册(草稿预览不完全版)1-5章已经有全部的绘图方法了,下载地址是http://pan.baidu.com/s/1jGs3FQA
2015年08月11日 13点08分
level 8
为什么回复 Undefined variable!
2015年08月24日 20点08分 11
您是把包含function plot_dfmz定义的代码拷贝到一个文本文件中,保存为.mfps格式,然后把该文本文件保存在AnMath\scripts目录下,最后在命令提示符上运行 plot_dfmz()函数吗?
2015年08月24日 22点08分
或者参考可编程科学计算器用户手册167页(pdf文件173页),直接把打阴影的代码拷贝粘贴到基于JAVA的可编程科学计算器上运行。
2015年08月24日 23点08分
呜(┯_┯),我是新手用不来啊
2015年08月25日 08点08分
回复
byf����
:您不妨参考可编程科学计算器用户手册草稿预览完整版 [无效] http://pan.baidu.com/s/1mgirizA 第2章第14节,如何部署用户创建的MFP函数程序。把上面这个程序创建成.mfps文件,就可以运行了。我在这个帖子的底楼也会详细列出过程。
2015年08月25日 22点08分
level 1
woshiwppaa 楼主
如何运行东方明珠电视塔绘制程序:
用户需要遵循以下步骤以调用绘制东方明珠电视塔函数:
1. 启动可编程科学计算器;
2. 打开程序编辑器编写代码并保存。
很显然,在手机上敲代码不是一件容易的事情,一个比较快捷的办法是:
1. 将您的安卓设备通过USB电缆连接到个人电脑上;
2. 将您的安卓设备的存储卡设置为可读写;
3. 在个人电脑上找到您的安卓设备存储卡(包括SD卡和设备自带的存储器)所对应的文件夹或盘符,找到其中的AnMath目录,进入AnMath/Scripts子目录。在这个目录下创建一个.mfps文件,比如my_prog.mfps;
4. 用个人电脑上的文本编辑器编辑my_prog.mfps,比如,在该文件中写入以下内容:
function plot_dfmz()
plot3d("东方明珠","东方明珠","x","y","z", _
"",false,"red",null,"yellow",null,0,8,0.25,0,20,20,"iff(u<=2,3*cos(u*pi)-(20-v)*sqrt(3)/2,and(u>=3,u<=5), 3*cos(u*pi), u>=6, 3*cos(u*pi)+(20-v)*sqrt(3)/2, Nan)","iff(u<=2,3*sin(u*pi)+(20-v)/2,and(u>=3,u<=5), 3*sin(u*pi)-(20-v)*sqrt(3)/2, u>=6, 3*sin(u*pi)+(20-v)/2, Nan)","v", _ //绘制底部三根支撑斜柱体
"",false,"green",null,"yellow",null,-1,1,0.25,0,20,20,"cos(u*pi)*2","sin(u*pi)*2","v", _ //绘制连接柱
"",false,"red",null,"cyan",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"10*cos(u)*cos(v)","10*sin(u)*cos(v)","10*sin(v)+20", _ //绘制大球
"",false,"green",null,"blue",null,0,8,0.25,20,70,50,"iff(u<=2,1.5*cos(u*pi)-2,and(u>=3,u<=5), 1.5*cos(u*pi), u>=6, 1.5*cos(u*pi)+2, Nan)","iff(u<=2,1.5*sin(u*pi)+2/sqrt(3),and(u>=3,u<=5), 1.5*sin(u*pi)- 4/sqrt(3), u>=6, 1.5*sin(u*pi)+2/sqrt(3), Nan)","v", _ //绘制大球和小球之间的三根连接柱
"",false,"magenta",null,"white",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"6*cos(u)*cos(v)","6*sin(u)*cos(v)","6*sin(v)+70", _ //绘制小球
"",false,"yellow",null,"green",null,0,2,0.25,70,85,15,"cos(u*pi)*1.5","sin(u*pi)*1.5","v", _ //绘制小球上部的立柱
"",false,"red",null,"cyan",null,-pi,pi,pi/10,-pi/2,pi/2,pi/10,"2*cos(u)*cos(v)","2*sin(u)*cos(v)","2*sin(v)+85", _ //绘制更小的球
"",false,"red",null,"ltgray",null,-1,1,0.2,85,115,10,"0.5*max(0.2,(115-v)/30)*cos(u*pi)","0.5*max(0.2,(115-v)/30)*sin(u*pi)","v") //绘制顶部天线
endf
然后保存,再将移动设备和个人电脑断开;
5. 打开可编程科学计算器;
6. 打开命令提示符,敲入:
plot_dfmz()
然后回车,耐心等待2-3分钟,就可以看到东方明珠电视塔被绘制出来了。
您需要注意的是:
1. 如果是在个人电脑上输入函数,用户可能需要在断开移动设备和个人电脑连接之后重新启动可编程科学计算器,否则,新编的函数有可能不被载入;
2. 函数必须申明,也就是必须有如下定义:
Function XXXX(...)
Endf
否则函数无法被找到;
3. 不同的函数必须具有不同的函数名。当用户自定义函数时,必须保证自定义的函数名和已有的软件内建的和自定义的函数不重名。我们建议,用户自定义函数时,函数名总是以MyF开始,也就是MyF******;
4. 一些安卓设备,比如三星Galaxy Express,在连接到个人电脑上后,不允许用户从个人电脑上直接在手机存储卡文件夹中创建新的文件。这个限制能够防止病毒在个人电脑和手机之间传播,但是,它也给用户创建自定义函数程序的时候造成了一些小的麻烦。一个解决办法是,把位于手机存储卡中的AnMath目录整个拷贝到个人电脑的一个可读写的位置,在那里创建新的.mfps函数程序文件,并且在那里启动基于JAVA的可编程科学计算器以调式编写的代码。调试完成后,再将AnMath文件夹整个拷贝到手机存储卡中的原来位子以覆盖原来的AnMath目录。
5. 用户生成的.mfps文件必须位于AnMath\scripts目录或者它的子目录下或者多层子目录下。但要注意,第一层子目录的名字不能为examples。这是因为AnMath\scripts\examples目录中的所有文件和目录被认为是例子程序或者用于存放例子程序,软件启动的时候不会被装载。除此之外,任何其他的目录都可以,比如用户生成一个叫做abc.mfps的文件存放在一个名字叫做
AnMath\scripts\mylib\文件库1
的目录中,在可编程科学计算器启动的时候,文件AnMath\scripts\mylib\文件库1\abc.mfps会被找到,里面定义的函数会被自动地加载。
2015年08月25日 22点08分 12
1