向量(x,y,z) 绕 向量(x1,y1,z1) 转d度,求得到的向量

tan625747 2010-04-22 10:20:02
向量(x,y,z) 绕 向量(x1,y1,z1) 转d度,求得到的向量(x2,y2,z2)

c/c++ 实现
...全文
235 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizzoe 2010-04-22
  • 打赏
  • 举报
回复
传说中的作业贴?
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
你是问解析几何的吧?
tan625747 2010-04-22
  • 打赏
  • 举报
回复
要知道具体的算法呀
赵4老师 2010-04-22
  • 打赏
  • 举报
回复
《计算机图形学》
OpenGL
Direct3D
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
估计他是按逆向观察旋转的吧。自己反转一下就可以了
tan625747 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 unituniverse2 的回复:]

我帮你算了下,结果应该是
0.707, 0, 0.707
如果不是,你那代码就有问题。
[/Quote]

结果的确是
0.707, 0, 0.707


可按道理是-0.707 0.707 0
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
0.707, 0.707, 0

|
|s
|
|
|_______
/ \
/b0 \b1
`

应该是这个,刚才我都给搞糊涂了...
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复

| .
|s0 /s1
| /
| /
|/________
/
/b

unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
我帮你算了下,结果应该是
0.707, 0, 0.707
如果不是,你那代码就有问题。
tan625747 2010-04-22
  • 打赏
  • 举报
回复
麻烦了
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
float t1 = cos(t) + ( 1 - cos(t)) * st.x * st.x;
float t2 = ( 1 - cos (t) ) * st.x * st.y - sin(t) * st.z;
float t3 = ( 1 - cos (t) ) * st.z * st.x + ( sin (t )) * st.y;

float q1 = ( 1 - cos(t)) * st.x * st.y + sin(t) * st.z;
float q2 = cos(t) + ( 1 -cos (t)) * st.y * st.y ;
float q3 = ( 1 - cos (t)) * st.z * st.y - (sin(t)) * st.x;

float p1 = (1 - cos(t) )* st.x * st.z - (sin(t))* st.y;
float p2 = ( 1- cos (t) ) * st.y * st.z + (sin(t)* st.x );
float p3 = cos(t) + ( 1 - cos (t)) * st.z * st.z;
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
数学的。你都可以自己推导了。
cos是偶函数,sin是奇函数
tan625747 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 unituniverse2 的回复:]

自己化简一下真的很难吗?

你将sin 前面的正负号反掉就可以了
[/Quote]


这个旋转矩阵不是自己写的,是来自维基百科,不敢乱动,怕万一出错
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
自己化简一下真的很难吗?

你将sin 前面的正负号反掉就可以了
tan625747 2010-04-22
  • 打赏
  • 举报
回复
谢谢zhangci226,据zhangci226方法,做了简单的测试

//z= 0 在x-y 平面 测试


b.x = 0;
b.y = 1;
b.z = 0;
s.x = 0;
s.y = 0;
s.z = 1;

r = rotate ( b,s,45.0f);//45度角


按道理应该是
-0.707 0.707 0 才对呀

可结果为什么样是 多次测试是顺时针得到结果
0.707 0.707 1呢




#include <iostream>
#include <math.h>

#define PI 3.141592653f
using namespace std;

struct VECTOR3
{
float x;
float y;
float z;
};

VECTOR3 rotate( VECTOR3 b,VECTOR3 st,float ank)//st 为要围绕的向量
{
/*
http://zh.wikipedia.org/zh-cn/%E6%97%8B%E8%BD%AC%E7%9F%A9%E9%98%B5

b.x b.y b.z


//旋转矩陈
cos(t) + ( 1 - cos(t)) st.x * st.x ( 1 - cos(t)) st.x * st.y - sin(t) * st.z , ( 1 - cos(t) ) * st.x * st.z + (sin(t))* st.y
( 1 - cos (t) ) * st.y * st.x + sin(t) * st.z cos(t) + ( 1 -cos (t)) st.y * st.y ( 1- cos (t) ) * st.y * st.z - (sin(t)* st.x
( 1 - cos (t) ) * st.z * st.x - ( sin (t )) * st.y ( 1 - cos (t)) * st.z * st.y + (sin(t)) * st.x cos(t) + ( 1 - cos (t)) * st.z * st.z

t1 q1 p1
t2 q2 p2
t3 q3 p3
*/

VECTOR3 result;

float t = PI * ank / 180;
cout<< cos(t ) << " " <<sin(t) << endl;

float t1 = cos(t) + ( 1 - cos(t)) * st.x * st.x;
float t2 = ( 1 - cos (t) ) * st.x * st.y + sin(t) * st.z;
float t3 = ( 1 - cos (t) ) * st.z * st.x - ( sin (t )) * st.y;

float q1 = ( 1 - cos(t)) * st.x * st.y - sin(t) * st.z;
float q2 = cos(t) + ( 1 -cos (t)) * st.y * st.y ;
float q3 = ( 1 - cos (t)) * st.z * st.y + (sin(t)) * st.x;

float p1 = (1 - cos(t) )* st.x * st.z + (sin(t))* st.y;
float p2 = ( 1- cos (t) ) * st.y * st.z - (sin(t)* st.x );
float p3 = cos(t) + ( 1 - cos (t)) * st.z * st.z;

result.x = b.x * t1 + b.y * t2 + b.z * t3;
result.y = b.x * q1 + b.y * q2 + b.z * q3;
result.z = b.x * p1 + b.y * p2 + b.z * p3;

return result;
}


int main()
{
VECTOR3 b , s;

//z= 0 在x-y 平面 测试
b.x = 0;
b.y = 1;
b.z = 0;
s.x = 0;
s.y = 0;
s.z = 1;


VECTOR3 r;
r = rotate ( b,s,45.0f);

cout << r.x << " " << r.y << " " <<r.z <<endl;
::getchar ();

}

unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
对,R就是化简后的结果
张赐 2010-04-22
  • 打赏
  • 举报
回复
其中 rx,ry,rz就是要旋转的轴,theta就是要旋转的度数
张赐 2010-04-22
  • 打赏
  • 举报
回复
就是矩阵的乘法,但是围绕任意轴旋转的矩阵比较复杂,如下。



用这个矩阵和要旋转的向量相乘即可
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
可能有个地方你不明白,我就补充一下:本例求余弦就是为了求投影向量的。
unituniverse2 2010-04-22
  • 打赏
  • 举报
回复
向量的加减法公式?余弦定理?
我已经写出解法了,实现代码自己写吧...
都是高中的东西了
加载更多回复(5)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧