读书人

贴个三维向量的有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

贴个三维向量的问题
已知:
Vector3 v1(x1, 0, y1); //当前点
Vector3 v2(x2, 0, y2); //原目标点
Vector3 v3 = (v2-v1).Normalize(); //原移动方向向量
float fD = 3;//旋转后移动的长度
求:
(1)将原移动方向向量v3绕Y轴顺时针旋转90度后,移动fd的长度,求移动后的目标点坐标?
(2)将原移动方向向量v3绕Y轴逆时针旋转90度后,移动fd的长度,求移动后的目标点坐标?

希望哪位兄弟帮忙解下,俺数学知识实在是太烂了。谢谢

[解决办法]
提供一个思路吧,我也很久没做过纯数学题了。
对于三维空间中的线段向量,它的两个点(x1,y1,z1),(x2,y2,z2)
如果该线段绕Y轴旋转的话,它的两点的y坐标是不变的,对于x,z值的变化可以这么求得
将该线段投影至xz平面,(x,z值不变),然后联接该点和xz的坐标原点进行旋转,等同于该点绕y轴转
用极坐标代替xz的值,表示为x=r*cos@,z=r*sin@,r为点到原点的距离,求出当前@
然后根据旋转的方向和角度,看该点落入哪个象限,再更改@值,进而求出x,z的值
然后同样的方法求得另外一个旋转点,两个点的值都求出来了,这个旋转后的向量也就得出了
[解决办法]
最笨的方法:齐次坐标系下,旋转和平移都可以用矩阵相乘实现。

这里旋转角度恰好是90°,所以可以利用几何中三角形相似的知识简化运算。lz画个图就清楚了。

[解决办法]
v3移动90度的说明不清楚,v3是个单位向量,他和v1,v2的顶点没有关系,要保证v3被移动90度,v2的位置是有无数个的,fD的长度也是在一个区间变化的

你题目中“,移动fd的长度,”两个逗号之间的这句话也非常不清楚,是要求这个fD还是说其他的?如果是前者,此题其实无解


探讨
已知:
Vector3 v1(x1, 0, y1); //当前点
Vector3 v2(x2, 0, y2); //原目标点
Vector3 v3 = (v2-v1).Normalize(); //原移动方向向量
float fD = 3; //旋转后移动的长度
求:
(1)将原移动方向向量v3绕Y轴顺时针旋转90度后,移动fd的长度,求移动后的目标点坐标?
(2)将原移动方向向量v3绕Y轴逆时针旋转90度后,移动fd的长度,求移动后的目标点坐标?

希望哪位兄弟帮忙解下,俺数学知识实在是太烂了。谢谢

读书人网 >软件架构设计

热点推荐