Bài viết này chỉ là chia sẻ code, thuật toán khá tường minh rồi, còn phần giải thích và ví dụ minh họa đã được trình bày kỹ trong video, mời các bạn xem qua và góp ý giùm để code thêm hoàn thiện.
from sympy import *
class Point3D:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def show(self):
#In tọa độ điểm ra thành tuple
return (self.x, self.y, self.z)
class Vector3D:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def show(self):
#In tọa độ vectơ ra thành tuple
return (self.x, self.y, self.z)
def length(self):
#Tính độ dài vectơ
return sqrt(self.x**2 + self.y**2 ++ self.z**2)
class Vector3DOperations:
def sum(v1, v2):
return Vector3D(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z)
def subtract(v1, v2):
return Vector3D(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z)
def multiply(number, v):
#Tích của một số với một vectơ
return Vector3D(number*v.x, number*v.y, number*v.z)
def dotProduct(v1, v2):
#Tích vô hướng của hai vectơ
return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z
def vectorProduct(v1, v2):
#Tích vô hướng của hai vectơ
result_x = v1.y*v2.z - v2.y*v1.z
result_y = v1.z*v2.x - v2.z*v1.x
result_z = v1.x*v2.y - v2.x*v1.y
return Vector3D(result_x, result_y, result_z)
def mixedProduct(v1, v2, v3):
#Tích hỗn tạp của ba vectơ (v1 x v2) . v3
v4 = Vector3DOperations.vectorProduct(v1, v2) #Tích có hướng v1 x v2
return Vector3DOperations.dotProduct(v4, v3)
def angle(v1, v2):
#Góc giữa hai vectơ, mặc định là radian
dot = Vector3DOperations.dotProduct(v1, v2)
if v1.length()==0 or v2.length()==0:
return 0
cos_angle = dot/(v1.length()*v2.length())
return acos(cos_angle)
class Vector3DApplications:
def areaTriangle(A, B, C):
#Tính diện tích tam giác ABC
AB = Vector3DOperations.subtract(B, A)
AC = Vector3DOperations.subtract(C, A)
return Vector3DOperations.vectorProduct(AB, AC).length()/2
def areaParallelogram(A, B, C, D):
#Tính diện tích hình bình hành ABCD
AB = Vector3DOperations.subtract(B, A)
AD = Vector3DOperations.subtract(D, A)
return Vector3DOperations.vectorProduct(AB, AD).length()
def volumeTriangularPyramid(A, B, C, D):
#Tính thể tích tứ diện ABCD
AB = Vector3DOperations.subtract(B, A)
AC = Vector3DOperations.subtract(C, A)
AD = Vector3DOperations.subtract(D, A)
return Abs(Vector3DOperations.mixedProduct(AB, AC, AD))/6