游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4363|回复: 10

空间中两个垂直的向量,各自延相同的任意向量旋转后,

[复制链接]

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2005-4-5 12:34:00 | 显示全部楼层 |阅读模式
空间中两个垂直的向量,各自延相同的任意向量旋转后,还是垂直的么?
D3DXVECTOR3 v1 = D3DXVECTOR3(0,1,0);
D3DXVECTOR3 v2 = D3DXVECTOR3(1,0,0);

D3DXMATRIX m1;
D3DXMatrixRotationAxis( &m1, &D3DXVECTOR3(1,1,1), 2);

D3DXVECTOR3 v3,v4;
D3DXVec3TransformCoord( &v3, &v1, &m1);
D3DXVec3TransformCoord( &v4, &v2, &m1);

float a = D3DXVec3Dot( &v3, &v4);
如果公转轴是0,0,1,就没问题,如果是1,1,1就有问题
1,1,1的时候a是-1。xxxx
0,0,1的时候就是0了
咋回事?
[em7] [em7]

43

主题

155

帖子

171

积分

注册会员

Rank: 2

积分
171
发表于 2005-4-5 15:19:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

如果是旋转向量,应该用D3DXVec3TransformNormal,旋转点的话才用D3DXVec3TransformCoord.

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2005-4-5 18:44:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

用D3DXVec3Transform会怎样呢?

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-4-5 23:00:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

我发过一遍了!结果无错!是浮点型误差!只有千万分之一以下!
另外!我不知道我前面帖子被删是什么原因,希望删贴者给出答复!

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-4-5 23:04:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

这个问题中,坐标变换的使用方式没错,可能是楼主没注意,结果应该是用科学计数法表示的,应该是非常小的数!

50

主题

992

帖子

1012

积分

金牌会员

Rank: 6Rank: 6

积分
1012
发表于 2005-4-6 09:17:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

只是参考座标系变了,所以还是正交的。那个-1.xxxx应该是-1.xxxxe-007吧,别误导别人了哦:)

43

主题

155

帖子

171

积分

注册会员

Rank: 2

积分
171
发表于 2005-4-6 10:31:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

虽然浮点误差是这个问题的答案, 坐标变换还是有问题。 还是一样,向量的坐标变换用D3DXVec3TransformNormal, 点用D3DXVec3TransformCoord。 D3DXVec3Transform和D3DXVec3TransformCoord相似,区别在于前者变换后将w投射回1。这里给出的代码是看不出问题的,因为它的座标变换矩阵只包含了旋转而没有平移的部分。这恰恰是点的坐标变换和向量坐标变换的区别。

D3DXMATRIX matTrans, matRot, matTransRot;
D3DXMatrixTranslation( &matTrans, 10.0f, 10.0f, 10.0f );
D3DXMatrixRotationX( &matRot, D3DX_PI * 0.25f );
matTransRot = matTrans * matRot;

D3DXVECTOR3 vec1( 0.0f, 1.0f, 0.0f );
D3DXVECTOR3 vec2( 1.0f, 0.0f, 0.0f );

D3DXVec3TransformCoord( &vec1, &vec1, &matTransRot );
D3DXVec3TransformCoord( &vec2, &vec2, &matTransRot );
float vDot = D3DXVec3Dot( &vec1, &vec2 );

最终vDot为319.99994.

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2005-4-8 17:15:00 | 显示全部楼层

Re: Re:空间中两个垂直的向量,各自延相同的任意向量旋

谢谢各位了,是我马虎了,没看那个后面的-7方

可是我有一个疑问,如果我要判断2向量是否垂直,这么说,我就要预先定义一个范围,小于这个数的,就认为它垂直,可是如果2个向量经过上万次的变换,最后的误差可能大于我定义的这个范围了,怎么办?



qlwuu: Re:空间中两个垂直的向量,各自延相同的任意向量旋转后,还是垂直的么?

虽然浮点误差是这个问题的答案, 坐标变换还是有问题。 还是一样,向量的坐标变换用D3DXVec3TransformNormal...

虽然明白w的作用,但是还是不能联系到具体例子上,就你举的这个例子来说,这个w是如何参与运算的?

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-4-8 22:11:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

基于最终精度是四舍五入的,一般情况下误差会在某个区间内承波状!
出现持续性增大的误差可能性非常少!
也有出问题的,当年autocad 就会出现直角不直的问题!而且误差会到0.1度!
现在为了避免危险,
所以3d计算往往是以原始数据来计算!

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2005-4-11 11:04:00 | 显示全部楼层

Re:空间中两个垂直的向量,各自延相同的任意向量旋转后

顶上去~~~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 15:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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