1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > lisp 计算三点的夹角_已知三点坐标求夹角 - 程序语言 - 小木虫 - 学术 科研 互动社区...

lisp 计算三点的夹角_已知三点坐标求夹角 - 程序语言 - 小木虫 - 学术 科研 互动社区...

时间:2023-10-19 20:17:36

相关推荐

lisp 计算三点的夹角_已知三点坐标求夹角 - 程序语言 - 小木虫 - 学术 科研 互动社区...

最近需要处理大量数据,需要对化学键键角批量输出。

我已经把原子坐标以xyz的形式给出。

现在搞不定如何把夹角以degree(度数)的方式给求出来。

哪位知道怎么弄?

本人很菜,别笑话。

#It is 4 Bond Angles

for XYZ in `ls *.xyz`

do

#read in the atom Nr.

AN1=`echo $[$1+2]`

AN2=`echo $[$2+2]`

AN3=`echo $[$3+2]`

echo $AN1 $AN2 $AN3

#The first atom

A11=`awk "NR==$AN1" $XYZ |awk '{print $1}'`

A1x=`awk "NR==$AN1" $XYZ |awk '{print $2}'`

A1y=`awk "NR==$AN1" $XYZ |awk '{print $3}'`

A1z=`awk "NR==$AN1" $XYZ |awk '{print $4}'`

#The second atom

A21=`awk "NR==$AN2" $XYZ |awk '{print $1}'`

A2x=`awk "NR==$AN2" $XYZ |awk '{print $2}'`

A2y=`awk "NR==$AN2" $XYZ |awk '{print $3}'`

A2z=`awk "NR==$AN2" $XYZ |awk '{print $4}'`

#

A31=`awk "NR==$AN3" $XYZ |awk '{print $1}'`

A3x=`awk "NR==$AN3" $XYZ |awk '{print $2}'`

A3y=`awk "NR==$AN3" $XYZ |awk '{print $3}'`

A3z=`awk "NR==$AN3" $XYZ |awk '{print $4}'`

#

echo -e "$A11\t$A1x\t$A1y\t$A1z\t"

echo -e "$A21\t$A2x\t$A2y\t$A2z\t"

echo -e "$A31\t$A3x\t$A3y\t$A3z\t"

#

TT=`echo -e "$A11\t$A1x\t$A1y\t$A1z\t$A21\t$A2x\t$A2y\t$A2z\t$A31\t$A3x\t$A3y\t$A3z\t" `

echo $TT

#

A1A2=`echo $TT | awk '{print $6-$2,$7-$3,$8-$4}' `

echo A1A2 $A1A2

A1A2X=`echo $TT | awk '{print $6-$2}' `

A1A2Y=`echo $TT | awk '{print $7-$3}' `

A1A2Z=`echo $TT | awk '{print $8-$4}' `

A2A3=`echo $TT | awk '{print $10-$6,$11-$7,$12-$8}' `

echo A2A3 $A2A3

A2A3X=`echo $TT | awk '{print $10-$6}' `

A2A3Y=`echo $TT | awk '{print $11-$7}' `

A2A3Z=`echo $TT | awk '{print $12-$8}' `

A1A2A2A3=`echo $A1A2$A2A3 `

echo A1A2A2A3 $A1A2A2A3

#乘积A1A2*A2A3=(x2-x1)*(x3-x2)+(y2-y1)*(y3-y2)+(z2-z1)*(z3-z2)

TA1A2A2A3=`echo $A1A2A2A3 | awk '{print $1*$4+$2*$5+$3*$6}'`

echo TA1A2A2A3 $TA1A2A2A3

#

A1A2A1A2=`echo $A1A2 | awk '{print $1^2+$2^2+$3^2}'`

A2A3A2A3=`echo $A2A3 | awk '{print $1^2+$2^2+$3^2}'`

echo A1A2A1A2 $A1A2A1A2

echo A2A3A2A3 $A2A3A2A3

#|P1P2|=根号[(x2-x1)2+(y2-y1)2+(z2-z1)2] |P2P3|=根号[(x3-x2)2+(y3-y2)2+(z3-z2)2]

#var absA1A2A2A3=A1A2*A2A3

absA1A2=`echo $A1A2A1A2 | awk '{print sqrt($1)}'`

echo absA1A2 $absA1A2

absA2A3=`echo $A2A3A2A3 | awk '{print sqrt($1)}'`

echo absA2A3 $absA2A3

#

#cos(A1A2,A2A3)=A1A2*A2A3/(|A1A2|*|A2A3|)

A1A2A3=`echo $TA1A2A2A3 $absA1A2 $absA2A3 `

echo A1A2A3 $A1A2A3

# 前面检查,读入和输出,应该是正确的,但下面这部分搞不定了

cosA1A2A3=`echo $A1A2A3 | awk '{print $1/($2*$3)}'`

#弧度=角度乘以π后再除以180 角度=弧度除以π再乘以180

#pi=3.1415926535898

cosA1A2A3=`echo $cosA1A2A3 | awk '{print cos($1)}'`

Angle=`echo $acosA1A2A3 | awk '{print $1*180/3.1415926535898}' `

echo $A1A2 $A1A2XX $A1A2YY $A1A2ZZ $A1A2A1A2 $cosA1A2A3

echo $cosA1A2A3

echo $Angle

done

xyz 文件如下:

36

Fe4.84655858507584 0.56633277215833 0.34035878855785

Al4.79235130609276 2.90413572930704 0.18293815072370

H 4.28535603237677 3.97006317825069 1.30657195333100

O 1.96706095735722 1.03530980080275 0.77397530855226

O 4.93691132336707 -2.35361098202682 0.67632768640727

O 6.77764534437593 1.25909183704602 2.45505687074638

O 5.76193037993391 0.63511115108140 -2.45907090865639

N 2.60533354124266 4.09822722851467 -1.75829932419780

....

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。