plane A私は、その直交ベクトルによって定義された平面を持っています(a, b, c)。
(つまり、ベクトル(a, b, c)は に直交しplane Aます)
(d, e, f)ベクトルを に投影したいと思いますplane A。
Pythonでどうすればできますか?簡単な方法がいくつかあるはずだと思います。
plane A私は、その直交ベクトルによって定義された平面を持っています(a, b, c)。
(つまり、ベクトル(a, b, c)は に直交しplane Aます)
(d, e, f)ベクトルを に投影したいと思いますplane A。
Pythonでどうすればできますか?簡単な方法がいくつかあるはずだと思います。
(d, e, f)平面への正規化された法線への投影を取り、差し引きます(あなたの場合は(a, b, c))。そう:
v = (d, e, f)
- sum((d, e, f) *. (a, b, c)) * (a, b, c) / sum((a, b, c) *. (a, b, c))
ここでは、コンポーネントごと*.の製品を意味します。したがって、これは次のことを意味します。
sum([x * y for x, y in zip([d, e, f], [a, b, c])])
また
d * a + e * b + f * c
明確でありながら衒学的になりたいだけなら
についても同様です(a, b, c) *. (a, b, c)。したがって、Python では次のようになります。
from math import sqrt
def dot_product(x, y):
return sum([x[i] * y[i] for i in range(len(x))])
def norm(x):
return sqrt(dot_product(x, x))
def normalize(x):
return [x[i] / norm(x) for i in range(len(x))]
def project_onto_plane(x, n):
d = dot_product(x, n) / norm(n)
p = [d * normalize(n)[i] for i in range(len(n))]
return [x[i] - p[i] for i in range(len(x))]
次に、次のように言うことができます。
p = project_onto_plane([3, 4, 5], [1, 2, 3])