日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

Fe??4.84655858507584? ?? ?0.56633277215833? ?? ?0.34035878855785

Al??4.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

....

總結

以上是生活随笔為你收集整理的lisp 计算三点的夹角_已知三点坐标求夹角 - 程序语言 - 小木虫 - 学术 科研 互动社区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。