Created
October 17, 2022 06:52
-
-
Save wangjiezhe/bdb59677c45ef81c3bd6552d41ddc6d9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BeginPackage["立体几何`"]; | |
法向量::usage = "法向量[A,B,C]得到平面ABC的一个法向量"; | |
单位法向量::usage = "单位法向量[A,B,C]得到平面ABC的一个单位法向量"; | |
点面距离::usage = "点面距离[P,{A,B,C}]得到点P到平面ABC的距离"; | |
四面体体积::usage = "四面体体积[A,B,C,D]得到四面体ABCD的体积"; | |
线面夹角::usage = "线面夹角[{P,Q},{A,B,C}]得到直线PQ和平面ABC的夹角"; | |
二面角::usage = "二面角[A,{B,C},D]得到二面角A-BC-D的平面角"; | |
平行吗::usage = "平行吗[{P,Q},{A,B}]判断直线PQ和直线AB是否平行 | |
平行吗[{P,Q},{A,B,C}]判断直线PQ和平面ABC是否平行 | |
平行吗[{P,Q,R},{A,B,C}]判断平面PQR和平面ABC是否平行"; | |
垂直吗::usage = "垂直吗[{P,Q},{A,B}]判断直线PQ和直线AB是否垂直 | |
垂直吗[{P,Q},{A,B,C}]判断直线PQ和平面ABC是否垂直 | |
垂直吗[{P,Q,R},{A,B,C}]判断平面PQR和平面ABC是否垂直"; | |
Begin["`Private`"]; | |
法向量[PointA_, PointB_, PointC_] := | |
Cross[PointB - PointA, PointC - PointA] | |
单位法向量[PointA_, PointB_, PointC_] := | |
Normalize @ 法向量[PointA, PointB, PointC] | |
点面距离[PointP_, {PointA_, PointB_, PointC_}] := | |
RegionDistance[InfinitePlane[{PointA, PointB, PointC}], PointP] | |
四面体体积[PointA_, PointB_, PointC_, PointD_] := | |
Volume[Tetrahedron[{PointA, PointB, PointC, PointD}]] | |
线面夹角[{PointP_, PointQ_}, {PointA_, PointB_, PointC_}] := | |
Module[{pq = PointQ - PointP, nv = 法向量[PointA, PointB, PointC]}, | |
VectorAngle[pq, pq - Projection[pq, nv]] | |
] | |
二面角[PointA_, {PointB_, PointC_}, PointD_] := | |
Module[{v, w, a}, | |
v = PointD - PointB; | |
w = PointA - PointB; | |
a = DihedralAngle[{PointB, PointC}, {v, w}]; | |
If[a > Pi, | |
2 Pi - a, | |
a | |
] | |
] | |
平行吗[{PointP_, PointQ_}, {PointA_, PointB_}] := | |
Module[{u, v}, | |
u = PointP - PointQ; | |
v = PointA - PointB; | |
u \[Cross] v == {0, 0, 0} | |
] | |
垂直吗[{PointP_, PointQ_}, {PointA_, PointB_}] := | |
Module[{u, v}, | |
u = PointP - PointQ; | |
v = PointA - PointB; | |
u . v == 0 | |
] | |
平行吗[{PointP_, PointQ_}, {PointA_, PointB_, PointC_}] := | |
Module[{u, v}, | |
u = PointP - PointQ; | |
v = 法向量[PointA, PointB, PointC]; | |
u . v == 0 | |
] | |
垂直吗[{PointP_, PointQ_}, {PointA_, PointB_, PointC_}] := | |
Module[{u, v}, | |
u = PointP - PointQ; | |
v = 法向量[PointA, PointB, PointC]; | |
u \[Cross] v == {0, 0, 0} | |
] | |
平行吗[{PointP_, PointQ_, PointR_}, {PointA_, PointB_, PointC_}] := | |
Module[{u, v}, | |
u = 法向量[PointP, PointQ, PointR]; | |
v = 法向量[PointA, PointB, PointC]; | |
u \[Cross] v == {0, 0, 0} | |
] | |
垂直吗[{PointP_, PointQ_, PointR_}, {PointA_, PointB_, PointC_}] := | |
Module[{u, v}, | |
u = 法向量[PointP, PointQ, PointR]; | |
v = 法向量[PointA, PointB, PointC]; | |
u . v == 0 | |
] | |
End[]; | |
EndPackage[]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment