スタック・オーバーフローで,2行で計算できる方法を教えてもらいました。
CASIOさんの4行より短くなるとは思いませんでした。
オリジナル(3通りの求め方)
2行で計算できる方法
外積と法線ベクトルを用いる方法
上記参照。
連立方程式を解く方法
from sympy import *
var('a b c d x y z')
var('Ax Ay Az')
var('Bx By Bz')
var('Cx Cy Cz')
myTitle="2:連立方程式を解く方法 "
myEq =a*x+b*y+c*z+d
myEqA=myEq.subs({x:Ax,y:Ay,z:Az})
myEqB=myEq.subs({x:Bx,y:By,z:Bz})
myEqC=myEq.subs({x:Cx,y:Cy,z:Cz})
ans=solve([myEqA,myEqB,myEqC],[a,b,c,d])
MySubs={Ax:1,Ay:1,Az:2,Bx:0,By:-2,Bz:1,Cx:3,Cy:-1,Cz:0}
myEq=simplify((ans[a]*x+ans[b]*y+ans[c]*z+d).subs(MySubs)/d)*(-4)
print("#",myTitle,myEq)
# 2:連立方程式を解く方法 x - y + 2*z - 4
ベクトル方程式を用いる方法
from sympy import *
var('myx myy myz')
var('x y z')
var('s t')
var('Ax Ay Az')
var('Bx By Bz')
var('Cx Cy Cz')
myTitle="3:ベクトル方程式を用いる方法 "
myx=(1-s-t)*Ax+s*Bx+t*Cx
myy=(1-s-t)*Ay+s*By+t*Cy
myz=(1-s-t)*Az+s*Bz+t*Cz
MySubs={Ax:1,Ay:1,Az:2,Bx:0,By:-2,Bz:1,Cx:3,Cy:-1,Cz:0}
eqx=x-myx.subs(MySubs)*(-1)
eqy=y-myy.subs(MySubs)*(-1)
eqz=z-myz.subs(MySubs)*(-1)
ans=solve([eqx,eqy],[s,t])
print("#",myTitle,eqz.subs({t:ans[t],s:ans[s]})*2)
# 3:ベクトル方程式を用いる方法 x - y + 2*z + 4
CASIO>3点A、B、Cを含む平面の式