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

[命令/FISH] 请问用get_mem开辟内存地址空间是用来干什么的?为什么要这样做

[复制链接]
发表于 2012-3-28 11:38:02 | 显示全部楼层 来自 湖南长沙
总算弄懂了 ,谢谢楼主的提问和高手的热心回答
回复 不支持

使用道具 举报

发表于 2012-3-28 16:14:15 | 显示全部楼层 来自 北京
Simdroid开发平台
ssw1216 发表于 2007-10-13 01:25
举个例子
def find_add  ;定义fish函数find_add
head = null   ;给head赋值

是不是掉下了一句  mem ( new +1 ) = p_gp

??
回复 不支持

使用道具 举报

发表于 2015-3-24 08:13:14 | 显示全部楼层 来自 山东济南
嗯似乎明白了,但是调用的时候怎么用还是有点模糊。
回复 不支持

使用道具 举报

发表于 2015-3-24 23:44:49 | 显示全部楼层 来自 湖南
Gen zo b size 10 5 5
Mo el
Prop sh 1e8 bu 2e8
Fix x y z range x -0.1 0.1 y 0 5 z 0 5
Fix x y z range x 0 10 y 0 5 z -0.1 0.1
Fix x y z range x 9.9 10.1 y 0 5 z 0 5
Table 1
Def find_add
Head=null
P_gp=gp_head
Loop while p_gp # null
X_pos=gp_xpos(p_gp)
If x_pos =width then
New=get_mem(2)
Mem(new)=head
Mem(new+1)=p_gp
Head=new
Endif
P_gp=gp_next(p_gp)
Endloop
End
Set width 10.0
Find_add
Def apply_vel
While_stepping
Ad=head
Loop while ad # null
P_gp=mem(ad+1)
Gp_xvel(p_gp)=vel_max*gp_zpos(p_gp)/height
Gp_zvel(p_gp)=-vel_max*(gp_xpos(p_gp)-width)/height
Ad=mem(ad)
Endloop
End
Set large vel_max=1e-2 height=5.0
Step 100
回复 不支持

使用道具 举报

发表于 2015-3-24 23:47:03 | 显示全部楼层 来自 湖南
明亮的黑屋子 发表于 2015-3-24 23:44
Gen zo b size 10 5 5
Mo el
Prop sh 1e8 bu 2e8

这是书上一个挡土墙转动的程序。和前面高手解释的程序差不多。

Get_mem(n )  即申请n个FISH变量对象的内存空间,并返回内存的开始地址。在这里即申请两个变量对象的内存空间,并返回内存的开始地址

在这个例子我们要区别  : “节点的地址” 与  “申请的用来存储节点的内存空间的地址”
回复 不支持

使用道具 举报

发表于 2015-3-24 23:50:29 | 显示全部楼层 来自 湖南
上面的程序的简单分析,,,也是我自己的理解。

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2015-3-25 12:43:49 | 显示全部楼层 来自 北京西城
没写全,缺少一句 mem(new+1)=p_gp。每次申请两个内存空间,第一个用来放指向上一次申请的2个内存地址中的第1个的指针,第2个用来放gp_xpos=10的节点地址。
回复 不支持

使用道具 举报

发表于 2016-10-5 21:25:43 | 显示全部楼层 来自 湖北武汉
谢谢了楼主
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-2 22:56 , Processed in 0.031285 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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