主题:请教向量投影的问题
damien
[专家分:0] 发布于 2011-01-21 04:07:00
有两个点A(x1,y1,z1),B(x2,y2,z2),现在以由点A和B确定的直线为基准轴,我想求的是当以物体由点C(x3,y3,z3)运动到点D(x4,y4,z4)时,沿AB基准轴方向的位移以及沿垂直于AB基准轴方向的位移。我写了一个程序,劳烦大家帮忙看看,这个程序有没有问题以及能不能实现我的目的?请大家不吝赐教。
program get_projection
implicit none
real x1,y1,z1
real x2,y2,z2
real x3,y3,z3
real x4,y4,z4
real theta
real dx1,dy1,dz1,dx2,dy2,dz2
real px1,py1,pz1,px2,py2,pz2
real r1,r2
! 求基准轴AB
dx1=x2-x1
dy1=y2-y1
dz1=z2-z1
!求CD的位移(前保存的结果)
dx2=x4-x3
dy2=y4-y3
dz2=z4-z3
!求AB和CD的模
r1=dx1**2+dy1**2+dz1**2
r2=dx2**2+dy2**2+dz2**2
!由点乘公式计算AB与CD所形成的角theta
theta=acos ((dx1*dx2+dy1*dy2+dz1*dz2)/(sqrt(r1)*sqrt(r2)))
!计算沿AB基准轴方向的位移
px1=dx2*cos(theta)
py1=dy2*cos(theta)
pz1=dz2*cos(theta)
!沿垂直于AB基准轴方向的位移
px2=dx2*sin(theta)
py2=dy2*sin(theta)
pz2=dz2*sin(theta)
end
回复列表 (共9个回复)
沙发
adda [专家分:1520] 发布于 2011-01-21 20:21:00
没仔细看对不对,但你的写法太罗嗦了,为什么不用数组运算?
板凳
adda [专家分:1520] 发布于 2011-01-21 20:38:00
real :: a(3), b(3), c(3), d(3)
real :: ab(3), cd(3)
real :: p1(3), p2(3)
...
ab = b - a
cd = d - c
! 投影方向分量
p1 = dot_product( ab, cd ) * ab / dot_product(ab,ab)
! 垂直方向分量
p2 = cd - p1
3 楼
damien [专家分:0] 发布于 2011-01-22 05:50:00
是这样的,我现在写的这个投影的程序是根据前一步计算结果来进行的,实际的计算要读多个在不同时刻A,B,C,D点的坐标,由于本人是初学,就采取了比较笨的方法,呵呵。
感谢你的回复,能不能帮我看看算法上有没有错误呢?
4 楼
adda [专家分:1520] 发布于 2011-01-22 10:48:00
[quote]是这样的,我现在写的这个投影的程序是根据前一步计算结果来进行的,实际的计算要读多个在不同时刻A,B,C,D点的坐标,由于本人是初学,就采取了比较笨的方法,呵呵。
感谢你的回复,能不能帮我看看算法上有没有错误呢?[/quote]
你的算法不对
按照你的方法,计算出来的(px1,py1,pz1)(px2,py2,pz2)两个矢量都是和矢量(dx2,dy2,dz2)平行的
5 楼
damien [专家分:0] 发布于 2011-01-22 19:02:00
[quote][quote]是这样的,我现在写的这个投影的程序是根据前一步计算结果来进行的,实际的计算要读多个在不同时刻A,B,C,D点的坐标,由于本人是初学,就采取了比较笨的方法,呵呵。
感谢你的回复,能不能帮我看看算法上有没有错误呢?[/quote]
你的算法不对
按照你的方法,计算出来的(px1,py1,pz1)(px2,py2,pz2)两个矢量都是和矢量(dx2,dy2,dz2)平行的[/quote]
为什么是错的呢?能不能指点一下.
另外,能不能帮我写一下这个程序,最好用dx,dy,dz形式表示。多谢了。
6 楼
adda [专家分:1520] 发布于 2011-01-22 21:24:00
我上面写的有,你没看吗
px1=p1(1)
py1=p1(2)
pz1=p1(3)
px2=p2(1)
py2=p2(2)
pz2=p2(3)
这样不就行了吗?
7 楼
damien [专家分:0] 发布于 2011-01-23 20:38:00
[quote]我上面写的有,你没看吗
px1=p1(1)
py1=p1(2)
pz1=p1(3)
px2=p2(1)
py2=p2(2)
pz2=p2(3)
这样不就行了吗?
[/quote]
看到了,但是有一点没太明白。就是这个公式:
! 投影方向分量
p1 = dot_product( ab, cd ) * ab / dot_product(ab,ab)
根据点乘公式有:
AB点乘CD=|AB|*|CD|*costheta,那么CD在AB上的投影为P=AB点乘CD再除以AB的模,你写公式是什么意思啊,麻烦 指点一下,多谢。
8 楼
damien [专家分:0] 发布于 2011-01-23 23:12:00
我明白了,多谢你的指导。
9 楼
sabsa [专家分:0] 发布于 2011-01-25 11:58:00
This [url=http://www.mmopowerlevel.net]wow power leveling[/url] guide originally appeared on the official [url=http://www.mogxe.com/PowerLevel.php?gid=1]wow power leveling[/url] World of Warcraft [url=http://www.mmopowerlevel.net/powerlist.php?fid=688]wow power leveling[/url] community forum. It is an older guide that I believe was last [url=http://www.mmopowerlevel.net/gamelist.php?fid=7656]aion kina[/url] updated during the last week of [url=http://www.mogxe.com]buy wow gold[/url] January. With that being said, this [url=http://www.mmopowerlevel.net/buy.php]gold in wow[/url] guide is AWESOME! It's not only a fantastic guide for Warriors but for anyone [url=http://www.mmopowerlevel.net/buy.php]wow gold eu[/url] that wants to know how threat truly ticks in this game.
This guide should be consider a "classic guide" and [url=http://www.mmopowerlevel.net/buy.php]wow gold cheap[/url] probably will later on. Some warriors after reading this guide were able to increase [url=http://www.mmopowerlevel.net/powerlist.php?fid=7422]cheap aion power leveling[/url] their warrior skills by 100%. That has been said quite a few times by quite [url=http://www.mmopowerlevel.net/gamelist.php?fid=4044]EVE ISK[/url] a few players! Anyway, it is kinda long but here it is!
我来回复