Tagged: 

Viewing 3 reply threads
  • Author
    Posts
    • #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.
    • #6230 Score: 0
      Bear
      Participant
      -11 pt

      不用加弹力了

      直接 a = g

      • #6234 Score: 0
        .J.
        Participant

        我把弹簧力去掉了,弹簧无限延长,你是去掉弹力得到正确结果的吗?

        Attachments:
        You must be logged in to view attached files.
    • #6239 Score: 0
      Bear
      Participant
      -11 pt

      – 你这压根没用 last_pos 即 x(t-1) 啊?直接 pos – pos 了
      – 欧拉那边你做出来了吗?加了 dumping 的

      • #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)]了。不知道这个思路是否正确。

        • #6242 Score: 0
          Bear
          Participant
          -11 pt

          – 显式欧拉的带 damping 也没问题吗?每帧走多少步?我走100000才能稳下来显式真的不稳定。。。
          – 你对 static 理解不对,m有个变量就是 last_pos, 维护更新这个就好

          • #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)了。

            • #6246 Score: 0
              Bear
              Participant
              -11 pt

              – 隐式最后应该停下来,显式增大到 100000 应该也能停下来才对
              – 所以你应该算完 x(t+1) 再更新啊

              • #6247 Score: 0
                2020Rafa
                Participant

                大佬。。我这里是先算再更新的,结果也是绳子竖直之后开始伸长,我想的原因是约束的时候每个弹簧移位一次,移到末端的时候影响了之前弹簧正确的长度,不知道应该怎样更正啊。

                Attachments:
                You must be logged in to view attached files.
                • #6258 Score: 0
                  Bear
                  Participant
                  -11 pt

                  F=ma 算 a 的时候直接取 a=g 不要算 F

                  • #6267 Score: 0
                    2020Rafa
                    Participant

                    解决了!有.神奇。。多谢!

                • #6271 Score: 0
                  .J.
                  Participant

                  谢谢楼上两位大神,那个保存上一步位置的逻辑,我居然卡了好久,终于解决了,还是太弱。

                • #6551 Score: 0
                  Keneyr
                  Participant
                  7 pts

                  老哥,我有个疑问,你的代码里面,l - s->rest_length,在刚开始运行的时候,l的值不应该和s->rest_length相等吗?这样一算的话,s->m1->position=(0,0)
                  s->m2->position=(0,0)
                  应该不对的啊?

                  • #6552 Score: 0
                    Keneyr
                    Participant
                    7 pts

                    对不起看错了···没事儿没事儿

    • #6403 Score: 0
      杰哥
      Participant
      2 pts

      老哥问下,如果按照这种写法的话,初始0时刻的时候的m->last_position是否需要设置初值呢(不设好像不报错,但感觉很变扭)。

      • #6411 Score: 0
        .J.
        Participant

        m->last_position已经在创建类的时候被初始化了。

Viewing 3 reply threads
  • You must be logged in to reply to this topic.