Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › simulateVerlet实现问题 Tagged: rope This topic has 15 replies, 5 voices, and was last updated 4 years, 7 months ago by Keneyr. Viewing 3 reply threads Author Posts 2020年4月28日 at 上午11:40 #6223 Score: 0 .J.Participant 循环springs的部分我首先计算了弹簧的力,然后修正小球位置,使弹簧恢复原长度;循环masses的部分我按照x(t+1)= x(t) + (1 - damping_factor)* [x(t)-x(t-1)] + a(t)*dt *dt更新了小球的位置,请问代码实现哪里有问题吗?谢谢! Attachments:You must be logged in to view attached files. 2020年4月28日 at 下午12:21 #6230 Score: 0 BearParticipant Karma: -11 pt 不用加弹力了 直接 a = g 2020年4月28日 at 下午2:39 #6234 Score: 0 .J.Participant 我把弹簧力去掉了,弹簧无限延长,你是去掉弹力得到正确结果的吗? Attachments:You must be logged in to view attached files. 2020年4月28日 at 下午4:13 #6239 Score: 0 BearParticipant Karma: -11 pt – 你这压根没用 last_pos 即 x(t-1) 啊?直接 pos – pos 了 – 欧拉那边你做出来了吗?加了 dumping 的 2020年4月28日 at 下午4:33 #6241 Score: 0 .J.Participant 欧拉加damping的做出来了。 我试过直接用last_position这个变量,但是发现这个值需要自己去赋值才能用,我没太想清楚该在哪个地方去赋值,我这里的做法是把[x(t)-x(t-1)]这个量,定义为一个静态变量dx = m->position - old_position;,其中m->position是更新后的位置,old_position是更新前的位置,然后这个值在下一次循环的时候,直接去使用,就相当于是[x(t)-x(t-1)]了。不知道这个思路是否正确。 2020年4月28日 at 下午4:44 #6242 Score: 0 BearParticipant Karma: -11 pt – 显式欧拉的带 damping 也没问题吗?每帧走多少步?我走100000才能稳下来显式真的不稳定。。。 – 你对 static 理解不对,m有个变量就是 last_pos, 维护更新这个就好 2020年4月28日 at 下午5:39 #6243 Score: 0 .J.Participant 半隐式欧拉带damping最后就是来回摇摆,命令行参数-s 100,显式的不稳定,可能需要减小步长。 m->last_position这个值的更新,我有点绕糊涂了,比如我在更新m->position前,给m->last_position = m->position赋值,在计算m->position = m->position + (1-damping_factor)*(m->position - m->last_position) + a*delta_t*delta_t;的时候,(m->position - m->last_position)就变成(0,0)了。 2020年4月28日 at 下午9:05 #6246 Score: 0 BearParticipant Karma: -11 pt – 隐式最后应该停下来,显式增大到 100000 应该也能停下来才对 – 所以你应该算完 x(t+1) 再更新啊 2020年4月28日 at 下午9:22 #6247 Score: 0 2020RafaParticipant 大佬。。我这里是先算再更新的,结果也是绳子竖直之后开始伸长,我想的原因是约束的时候每个弹簧移位一次,移到末端的时候影响了之前弹簧正确的长度,不知道应该怎样更正啊。 Attachments:You must be logged in to view attached files. 2020年4月29日 at 上午1:25 #6258 Score: 0 BearParticipant Karma: -11 pt F=ma 算 a 的时候直接取 a=g 不要算 F 2020年4月29日 at 上午9:42 #6267 Score: 0 2020RafaParticipant 解决了!有.神奇。。多谢! 2020年4月29日 at 上午11:42 #6271 Score: 0 .J.Participant 谢谢楼上两位大神,那个保存上一步位置的逻辑,我居然卡了好久,终于解决了,还是太弱。 2020年5月15日 at 下午10:52 #6551 Score: 0 KeneyrParticipant Karma: 7 pts 老哥,我有个疑问,你的代码里面,l - s->rest_length,在刚开始运行的时候,l的值不应该和s->rest_length相等吗?这样一算的话,s->m1->position=(0,0) s->m2->position=(0,0) 应该不对的啊? 2020年5月15日 at 下午10:59 #6552 Score: 0 KeneyrParticipant Karma: 7 pts 对不起看错了···没事儿没事儿 2020年5月1日 at 下午9:03 #6403 Score: 0 杰哥Participant Karma: 2 pts 老哥问下,如果按照这种写法的话,初始0时刻的时候的m->last_position是否需要设置初值呢(不设好像不报错,但感觉很变扭)。 2020年5月2日 at 下午12:35 #6411 Score: 0 .J.Participant m->last_position已经在创建类的时候被初始化了。 Author Posts Viewing 3 reply threads You must be logged in to reply to this topic. Log In Username: Password: Keep me signed in Log In