Гост написа:Здравейте!
Трябва ми малко помощ с тази задачи. Ще съм Ви много благодарен, ако ми помогнете!
Задача 2: Да се намери лицето на четириъгълника, определен от точките A (1, 1, 1), B (2, 3, 4), C (4, 3, 2) и D (3, 1, −1).
Трябва да я направим в Wolfram Mathematica.
Не ми е интересна Mathematica, ще ползваме Python, Sympy и Numpy.
4 точки в 3D пространството да образуват 4-ъгълник трябва да лежат на една равнина. Да видим дали е така!
- Код: Избери целия код
from sympy import *
var("x,y,z,a,b,c,d")
Px = [ (1, 1, 1), (2, 3, 4), (4, 3, 2), (3, 1, -1)]
R = a*x+b*y+c*z+d
s = solve([ R.subs(x,x_).subs(y,y_).subs(z,z_) for x_,y_,z_ in Px])
s
Out[104]: {d: 0, b: -2*c, a: c}
Има равнина и изглежда минава през нулата. Да видим да я опростим:
In [103]: simplify(R.subs(s)/c)
Out[103]:
x - 2*y + zОк, но това не ни приближава да решението на задачата, само проверихме, че задачата има решение.
Сега как се намират лицата на триъгълници в 3D? Според тук може да изпозлваме cross product:
https://math.stackexchange.com/questions/128991/how-to-calculate-the-area-of-a-3d-triangle$S=\dfrac{|\mathbf{AB}\times\mathbf{AC}|}2=\dfrac{|\mathbf{AB}||\mathbf{AC}||\sin(\theta)|}2$
- Код: Избери целия код
import numpy as np
P = np.array(Px)
AB = P[1]-P[0]
AC = P[2]-P[0]
np.linalg.norm(np.cross(AB,AC))/2
Out[109]: 4.898979485566356
Да намерим лицата на всички възможни 3ъгълници от 4 точки:
- Код: Избери целия код
def area(A,B,C):
return np.linalg.norm(np.cross(A-B,A-C))/2
A,B,C,D = P
S4 = area(A,B,C),area(A,B,D),area(A,C,D),area(B,C,D)
S4
Out[116]: (4.898979485566356, 4.898979485566356, 4.898979485566356, 4.898979485566356)
Хм. По някаква причина всички лица са еднакви. Това най-вероятно е зашото точките образвуват пространствен ромб, но не ми се прави чертеж да проверя. Както и да е, това оше изначава, че 4-ъгълника е изпъкнал и лицето му е:
In [115]: sum(S4)/2
Out[115]:
9.797958971132712Може би. Щеше да е хубаво да има и чертеж, но не е толкова важно.