Fortran Coder

查看: 6156|回复: 6
打印 上一主题 下一主题

[空间几何] 通过3点坐标计算角度

[复制链接]

40

帖子

11

主题

0

精华

大宗师

F 币
4314 元
贡献
1857 点

规矩勋章

QQ
跳转到指定楼层
楼主
发表于 2016-1-14 10:39:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想在输入文件中,输入行数,通过行数中的坐标,然后自动获得角度,代码已经附上,求助大家实现?
[Fortran] 纯文本查看 复制代码
01program angle
02implicit none
03real::x(3),y(3),z(3),angle,A,B,C,D
04integer::i,j,k
05 
06write(*,*) 'Input the name of xyz:(e.g. a)'
07read(*,*) name
08name1=trim(name)//'.xyz'
09open(12,file=name1)
10open(13,file='result.txt')
11do i=1,3
12    write(*,"(I1)") 'Input the atom number',i ,':(e.g.1)'
13    read(*,*) j
14    write(*,*)
15    if (j==1) then
16        read(12,"(11x,3(f12.6)") xi,yi,zi
17    else
18        do k=1,j-1
19            write(*,*)
20        end do
21    end if
22    read(12,"(11x,3(f12.6))") xi,yi,zi
23    rewind(12)
24end do
25 
26A=(x1-x2)+(y1-y2)+(z1-z2) //!first vector
27B=(x3-x2)+(y3-y2)+(z3-z2) //!second vector
28C=dsqrt((x1-x2)**2+(y1-y2)**2+(z1-z2)**2) //!quantities of first vector
29D=dsqrt((x3-x2)**2+(y3-y2)**2+(z3-z2)**2) //!quantities of second vector
30angle=acos(A*B/C/D)
31write(13,"(a,f12.4)") "The angle is:",angle/3.141592653589793238462d0*180
32end program

AB22.xyz

24.19 KB, 下载次数: 2

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
where is dream,where is home

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2016-1-14 11:45:09 | 只看该作者
[Fortran] 纯文本查看 复制代码
01Program www_fcode_cn
02  Implicit None
03  Real(kind=kind(0.0d0))::x(3),y(3),z(3),angle,A,B,C,D
04  Integer::i,k
05  Character(len=30) :: cstr
06  write(*,*) 'Input the name of xyz:(e.g. a)'
07  read(*,*) cstr
08  cstr=trim(cstr)//'.xyz'
09  open(12,file=cstr)
10  read(12,*)
11  open(13,file='result.txt')
12  do i=1,3
13    read(12,*) k , cstr , x(i),y(i),z(i)   
14  end do
15  A=(x(1)-x(2))+(y(1)-y(2))+(z(1)-z(2)) !//!first vector
16  B=(x(3)-x(2))+(y(3)-y(2))+(z(3)-z(2)) !//!second vector
17  C=sqrt((x(1)-x(2))**2+(y(1)-y(2))**2+(z(1)-z(2))**2) !//!quantities of first vector
18  D=sqrt((x(3)-x(2))**2+(y(3)-y(2))**2+(z(3)-z(2))**2) !//!quantities of second vector
19  angle=acos(A*B/C/D)
20  write(13,"(a,f12.4)") "The angle is:",angle/3.141592653589793238462d0*180
21end program www_fcode_cn

40

帖子

11

主题

0

精华

大宗师

F 币
4314 元
贡献
1857 点

规矩勋章

QQ
板凳
 楼主| 发表于 2016-1-14 13:44:54 | 只看该作者
vvt 发表于 2016-1-14 11:45
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  Real(kind=kind(0.0d0))::x(3),y(3),z ...

非常感谢你给的代码,不过这并不是我所需要的,因为我打算要的是手动输入任意3行(有坐标的),然后给出角度,现在角度部分是没什么问题,但是主要是前面任意给出3行的那里不太清楚该如何去写。
where is dream,where is home

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2016-1-14 14:00:09 | 只看该作者
[Fortran] 纯文本查看 复制代码
01Program www_fcode_cn
02  Implicit None
03  Real(kind=kind(0.0d0))::x(3),y(3),z(3),angle,A,B,C,D
04  Integer::i,j,k
05  Character(len=30) :: cstr
06  write(*,*) 'Input the name of xyz:(e.g. a)'
07  read(*,*) cstr
08  cstr=trim(cstr)//'.xyz'
09  open(12,file=cstr)
10  read(12,*)
11  open(13,file='result.txt')
12  do i=1,3
13    write(*,"(a,i1,a)") 'Input the atom number',i ,':(e.g.1)'
14    read(*,*) j
15    Do k = 1 , j-1
16      read(12,*)
17    End Do
18    read(12,*) k , cstr , x(i),y(i),z(i)   
19    rewind(12)
20    read(12,*)
21  end do
22  A=(x(1)-x(2))+(y(1)-y(2))+(z(1)-z(2)) !//!first vector
23  B=(x(3)-x(2))+(y(3)-y(2))+(z(3)-z(2)) !//!second vector
24  C=sqrt((x(1)-x(2))**2+(y(1)-y(2))**2+(z(1)-z(2))**2) !//!quantities of first vector
25  D=sqrt((x(3)-x(2))**2+(y(3)-y(2))**2+(z(3)-z(2))**2) !//!quantities of second vector
26  angle=acos(A*B/C/D)
27  write(13,"(a,f12.4)") "The angle is:",angle/3.141592653589793238462d0*180
28end program www_fcode_cn

40

帖子

11

主题

0

精华

大宗师

F 币
4314 元
贡献
1857 点

规矩勋章

QQ
5#
 楼主| 发表于 2016-1-14 14:15:17 | 只看该作者
vvt 发表于 2016-1-14 14:00
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  Real(kind=kind(0.0d0))::x(3),y(3),z ...

非常感谢你,完美的解决了我的问题。
where is dream,where is home

7

帖子

3

主题

0

精华

入门

F 币
64 元
贡献
14 点
6#
发表于 2024-6-11 21:23:39 | 只看该作者
有个小问题想问一下,这段程序的A和B是代表什么意思,怎么感觉好像写错了

2

帖子

0

主题

0

精华

入门

F 币
78 元
贡献
9 点
7#
发表于 2024-6-24 22:54:09 | 只看该作者
ninepss 发表于 2024-6-11 21:23
有个小问题想问一下,这段程序的A和B是代表什么意思,怎么感觉好像写错了
...

两点间距离
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-4-7 03:39

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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