Forum Replies Created
-
AuthorPosts
-
.J.Participant
m->last_position
已经在创建类的时候被初始化了。.J.ParticipantVector2D f_ba = b-a; Vector2D f_ab = a-b;
改成:
Vector2D f_ba = a-b; Vector2D f_ab = b-a;
.J.Participant谢谢楼上两位大神,那个保存上一步位置的逻辑,我居然卡了好久,终于解决了,还是太弱。
.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)
了。.J.Participant欧拉加damping的做出来了。
我试过直接用last_position这个变量,但是发现这个值需要自己去赋值才能用,我没太想清楚该在哪个地方去赋值,我这里的做法是把[x(t)-x(t-1)]
这个量,定义为一个静态变量dx = m->position - old_position;
,其中m->position
是更新后的位置,old_position
是更新前的位置,然后这个值在下一次循环的时候,直接去使用,就相当于是[x(t)-x(t-1)]
了。不知道这个思路是否正确。.J.Participant我把弹簧力去掉了,弹簧无限延长,你是去掉弹力得到正确结果的吗?
Attachments:
You must be logged in to view attached files..J.Participant把y = -y就可以了
.J.Participant睡觉的时候突然想通了,递归调用的时候,应该
return
对自身的调用,即:return recursive_bezier(bn_list, t);
而不是:
recursive_bezier(bn_list, t);
.J.Participant我也是这里有问题,查阅了一下发现std::tuple的构造函数是explicit的,我尝试将返回值改为
return std::tuple<float, float, float> {c1,c2,c3};
后可以正确编译。.J.Participant好像是这样,那我的效果是正确的。但是我这里有一个问题,如果一直朝一个方向旋转,旋转到外面去了,就会出现段错误,不知道你遇到过没有?谢谢你的回答!
.J.Participant我也有一个疑问,关于提高部分的思路,我是利用Rodrigues’ Rotation Formula将传入的旋转轴和角度,生成一个3*3矩阵,然后赋值给一个Eigen::Matrix4f::Identity()的左上角,最后返回这个4*4矩阵。最后我测试发现有些问题,当传入的轴为[0,0,1]时可以正确旋转,但是传入的旋转轴为[1,0,0]或[0,1,0]时,则只会做平移操作。不知道我的思路是否正确,请老师指导,谢谢!
.J.Participant谢谢助教老师,我应该理解了,我说一下我的理解,您看看是否正确。
首先,正交投影相当于先用一个长方体框住空间中的一个物体,然后把这个长方体移动、缩放到[-1,1]^3空间内,然后这个长方体里的每个点也对应做这个变换;
透视投影是用一个Frustum去框住空间中的物体,然后先压缩成长方体,且保证这个压缩过程不改变n和f的值,然后再移动、缩放到[-1,1]^3空间内。最后如果要投射到平面,只需要截取一个截面z就行了。
.J.Participant请问作业需要用到的虚拟机环境开发下载了吗?谢谢!
-
AuthorPosts