24小时热门版块排行榜    

查看: 895  |  回复: 4

astringent

铜虫 (著名写手)

[交流] 【求助】为什么两种写法得到的值不一样? 已有3人参与

有两个点A(x1,y1,z1),B(x2,y2,z2),现在以由点A和B确定的直线为基准轴,我想求的是当以物体由点C(x3,y3,z3)运动到点 D(x4,y4,z4)时,沿AB基准轴方向的位移以及沿垂直于AB基准轴方向的位移。我用两种方法写了程序,一种是用数组,另一种是直接写,可是在试算的时候,两种方法得到的结果有很大差别,请问问什么会有差别呢?哪一种是正确的?
program test
implicit none
real :: x1=1.0,y1=1.0,z1=2.0
real :: x2=1.0,y2=1.0,z2=3.0
real :: x3=1.0,y3=2.0,z3=3.0
real :: x4=2.0,y4=1.0,z4=5.0
real dx1,dx2,dy1,dy2,dz1,dz2
real :: px1,px2,py1,py2,pz1,pz2
real r1,r2,r3,r
real theta,pp

dx1=x2-x1
dy1=y2-y1
dz1=z2-z1
dx2=x4-x3
dy2=y4-y3
dz2=z4-z3
r1=dx1**2+dy1**2+dz1**2
r2=dx2**2+dy2**2+dz2**2
r3=dx1*dx2+dy1*dy2+dz1*dz2
r=r3/(sqrt(r1)*sqrt(r2))

theta=acos(r)
  px1=dx2*cos(theta)
  py1=dy2*cos(theta)
  pz1=dz2*cos(theta)
   px2=dx2*sin(theta)
  py2=dy2*sin(theta)
  pz2=dz2*sin(theta)
write (*,"(f7.5)" dx1
write(*,*) 'dy1',dy1
write(*,*) 'dz1',dz1
write (*,*) 'dx2',dx2
write(*,*) 'dy2',dy2
write(*,*) 'dz2',dz2
write (*,"(f7.5)" px1
write(*,"(f7.5)" py1
write(*,"(f7.5)" pz1
write (*,*) 'px2',px2
write(*,*) 'py2',py2
write(*,*) 'pz2',pz2
end
!采用数组
program test
implicit none
real :: a(3)=(/1.0,1.0,2.0/) !A点坐标
real :: b(3)=(/1.0,1.0,3.0/) !B点坐标
real :: c(3)=(/1.0,2.0,3.0/) !C点坐标
real :: d(3)=(/2.0,1.0,5.0/) !D点坐标
real :: ab(3) !矢量AB
real :: cd(3) 矢量CD
real :: p1(3),p2(3) !投影

ab=b-a
cd=d-c
p1=dot_product(ab,cd)/sqrt(dot_product(ab,ab))
p2=cd-p1
write (*,*) 'ab',ab
write (*,*) 'cd',cd
write(*,*) 'p1',p1
write (*,*) 'p2',p2

end
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by astringent at 2011-01-23 20:18:21:
有两个点A(x1,y1,z1),B(x2,y2,z2),现在以由点A和B确定的直线为基准轴,我想求的是当以物体由点C(x3,y3,z3)运动到点 D(x4,y4,z4)时,沿AB基准轴方向的位移以及沿垂直于AB基准轴方向的位移。我用两种方法写 ...

你得弄清楚 dot_product 是干啥的,它的结果是啥,呵呵……
CODE:
print *, dot_product(ab,cd)
print *, dot_product(ab,ab)
print *, dot_product(cd,cd)
print *, dot_product(ab,cd)/(sqrt(dot_product(ab,ab))*sqrt(dot_product(cd,cd)))

你的第二个程序,与第一个程序相比,只做了一半的工作还不到,呵呵……
2楼2011-01-23 22:14:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)

引用回帖:
Originally posted by snoopyzhao at 2011-01-23 22:14:25:


你得弄清楚 dot_product 是干啥的,它的结果是啥,呵呵……

[code]
print *, dot_product(ab,cd)
print *, dot_product(ab,ab)
print *, dot_product(cd,cd)
print *, dot_product(ab,cd)/(sqrt(dot_p ...

我的两个程序都错了,我改了一下用数组的写法,这个程序应该是正确的吧??
program test
implicit none
real :: a(3)=(/1.0,1.0,2.0/) !A点坐标
real :: b(3)=(/1.0,1.0,3.0/) !B点坐标
real :: c(3)=(/1.0,2.0,3.0/) !C点坐标
real :: d(3)=(/2.0,1.0,5.0/) !D点坐标
real :: ab(3) !矢量AB
real :: cd(3) 矢量CD
real :: p1(3),p2(3) !投影

ab=b-a
cd=d-c
p1=dot_product(ab,cd)*ab/dot_product(ab,ab)
p2=cd-p1
write (*,*) 'ab',ab
write (*,*) 'cd',cd
write(*,*) 'p1',p1
write (*,*) 'p2',p2
end
3楼2011-01-23 22:33:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+3): 谢谢参与应助! 2011-02-20 15:57:54
你没有明白我的意思,dot_product 出来的是一个标量,不再是一个向量,那么你的 p1 就不是一个数组了啊……

如果我的直觉没有错的话(当然,我对你的问题不了解),你的第一个程序应该是正确的……
4楼2011-01-24 11:44:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangbiniocas

金虫 (小有名气)

引用回帖:
Originally posted by astringent at 2011-01-23 22:33:57:

我的两个程序都错了,我改了一下用数组的写法,这个程序应该是正确的吧??
program test
implicit none
real :: a(3)=(/1.0,1.0,2.0/) !A点坐标
real :: b(3)=(/1.0,1.0,3.0/) !B点坐标
real :: c(3)=( ...

我也这么觉得
坚持
5楼2011-02-01 08:53:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 astringent 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 面上再次挂了,太难了,躺也躺不了,倦也卷不过,小学校之殇! +23 低垂的野花 2026-07-31 31/1550 2026-08-07 12:22 by speculiar
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode变化情况 +3 布布和一二 2026-08-07 9/450 2026-08-07 12:19 by 医学老男孩
[基金申请] 关于豆爷回答的JTJC与%2F数量 +3 yang182083 2026-08-06 4/200 2026-08-07 11:07 by 虫友是什么虫
[基金申请] 基金中了 +11 laoda193707 2026-08-06 11/550 2026-08-07 10:54 by TT和NN
[基金申请] 固定端突然变了,今天 +4 archvillain 2026-08-06 8/400 2026-08-07 08:06 by 带你看大海
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 6/300 2026-08-06 20:19 by 苏知砚
[有机交流] 一个有机合成实验室都需要哪些设备? 50+3 kf2781974 2026-07-31 12/600 2026-08-06 15:11 by eddyin
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 4/200 2026-08-05 09:59 by lfy8008
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[论文投稿] 十年后又回来了,论文投稿求助 +3 哈哈114477 2026-08-01 3/150 2026-08-04 15:40 by tegsgjy20
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 面上提前没消息,有中的吗 +14 archvillain 2026-08-02 18/900 2026-08-04 14:42 by archvillain
[基金申请] 娱乐 +4 Tide man 2026-08-03 4/200 2026-08-04 11:51 by wgch518
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见