저는 직교 벡터에 의해 정의 된 평면, plane A
을 가지고 있습니다 (예 : (a, b, c)
).파이썬에서 직교 벡터로 정의 된 평면에 벡터를 어떻게 투영 할 수 있습니까?
(즉, 벡터는 (a, b, c)
plane A
직교)
I는 plane A
상 (d, e, f)
벡터를 투영하고 싶다.
어떻게 파이썬에서 할 수 있습니까? 나는 쉬운 방법이 있어야한다고 생각합니다.
저는 직교 벡터에 의해 정의 된 평면, plane A
을 가지고 있습니다 (예 : (a, b, c)
).파이썬에서 직교 벡터로 정의 된 평면에 벡터를 어떻게 투영 할 수 있습니까?
(즉, 벡터는 (a, b, c)
plane A
직교)
I는 plane A
상 (d, e, f)
벡터를 투영하고 싶다.
어떻게 파이썬에서 할 수 있습니까? 나는 쉬운 방법이 있어야한다고 생각합니다.
(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)
에 대한 유사 분명하지만
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])
*입니다. 컴파일러에 의해 식별되지 않는 것 같습니다 : SyntaxError : invalid syntax. 왜? –
@ perfectionm1ng : 파이썬이 아니기 때문에. '* .'을 파이썬으로 어떻게 변환 할 수 있는지 설명했습니다. – jason
오, 알았어. 나는 파이썬에서 그런 초보자이다. 코드를 보여 주시겠습니까? 나는 수학에서 그것을하기 위해 괭이를 안다. 내가 모르는 것이고 그러므로 묻는 것은 파이썬 코드로 그것을하는 방법입니다. –
를이 파이썬 문제가되지 않습니다; 이것은 정규 수학 문제 –