LoginSignup
0

More than 1 year has passed since last update.

3点を通る平面の方程式の求め方

Last updated at Posted at 2021-10-01

スタック・オーバーフローで,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を含む平面の式

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0