line&plane: 添加一些笔记

This commit is contained in:
远野千束 2024-09-07 02:38:49 +08:00
parent 35537c5b15
commit c79f36cfc5
2 changed files with 34 additions and 3 deletions

View File

@ -48,8 +48,20 @@ class Line3:
return self.direction.cal_angle(other.direction) return self.direction.cal_angle(other.direction)
def cal_distance(self, other: 'Line3 | Point3') -> float: def cal_distance(self, other: 'Line3 | Point3') -> float:
""" r"""
计算直线和直线或点之间的距离 计算直线和直线或点之间的距离
:::tip
直线和直线之间的距离计算公式:
- 平行/重合 = 0
- 平行/异面 = $\frac{|\vec{P_1P_2} \times \vec{v}|}{|\vec{v}|}$
- 相交 = 0
其中$P_1$$P_2$分别为两条直线上的点$\vec{v}$为直线的方向向量
:::
:::tip
直线和点之间的距离计算公式:
$$\frac{|\vec{P_1P} \times \vec{v}|}{|\vec{v}|}$$
其中$P_1$为直线上的点$P$为点$\vec{v}$为直线的方向向量
:::
Args: Args:
other ([`Line3`](./line#class-line3) | [`Point3`](./point#class-point3)): 另一条直线或点 other ([`Line3`](./line#class-line3) | [`Point3`](./point#class-point3)): 另一条直线或点
Returns: Returns:

View File

@ -79,8 +79,21 @@ class Plane3:
raise TypeError(f"Unsupported type: {type(other)}") raise TypeError(f"Unsupported type: {type(other)}")
def cal_distance(self, other: 'Plane3 | Point3') -> float: def cal_distance(self, other: 'Plane3 | Point3') -> float:
""" r"""
计算平面与平面或点之间的距离 计算平面与平面或点之间的距离
:::tip
平面和平面之间的距离计算公式:
暂未实现
- 平行 = 0
- 相交 = 0
- 不平行 = $\frac{|\vec{P_1P_2} \cdot \vec{n}|}{|\vec{n}|}$
其中$P_1$$P_2$分别为两个平面上的点$\vec{n}$为平面的法向量
:::
:::tip
平面和点之间的距离计算公式:
$$\frac{|\vec{P_1P} \cdot \vec{n}|}{|\vec{n}|}$$
其中$P_1$为平面上的点$P$为点$\vec{n}$为平面的法向量
:::
Args: Args:
other ([`Plane3`](./plane#class-plane3) | [`Point3`](./point#class-point3)): 另一个平面或点 other ([`Plane3`](./plane#class-plane3) | [`Point3`](./point#class-point3)): 另一个平面或点
Returns: Returns:
@ -89,7 +102,7 @@ class Plane3:
[`TypeError`](https%3A//docs.python.org/3/library/exceptions.html#TypeError): 不支持的类型 [`TypeError`](https%3A//docs.python.org/3/library/exceptions.html#TypeError): 不支持的类型
""" """
if isinstance(other, Plane3): if isinstance(other, Plane3):
return 0 raise NotImplementedError("Not implemented yet.")
elif isinstance(other, Point3): elif isinstance(other, Point3):
return abs(self.a * other.x + self.b * other.y + self.c * other.z + self.d) / (self.a ** 2 + self.b ** 2 + self.c ** 2) ** 0.5 return abs(self.a * other.x + self.b * other.y + self.c * other.z + self.d) / (self.a ** 2 + self.b ** 2 + self.c ** 2) ** 0.5
else: else:
@ -142,6 +155,12 @@ class Plane3:
def cal_intersection_point3(self, other: 'Line3') -> 'Point3': def cal_intersection_point3(self, other: 'Line3') -> 'Point3':
""" """
计算平面与直线的交点 计算平面与直线的交点
:::tip
计算平面与直线交点的一般步骤:
1. 求直线的参数方程
2. 代入平面方程解出t
3. 代入直线参数方程求出交点
:::
Args: Args:
other ([`Line3`](./line#class-line3)): 直线 other ([`Line3`](./line#class-line3)): 直线
Returns: Returns: