平面和直线是三维计算机视觉和计算机图形学中有用的几何实体。将它们表示为一组点是低效的,这会导致很大的内存需求,具体取决于用于生成点的步长。
在本文中,我将讨论如何使用向量方程表示平面和直线。我还将介绍如何使用向量形式找到直线和平面之间的交点。
三维线条
我们可以用下面的等式[1]表示向量形式的直线。
p = l₀ + l * ** d,** d ∈ R
其中,I是一个向量,表示直线方向,l₀是直线上的一个点,d是标量。
p是直线上的通用点,这些点定义了线。因此,为了定义直线,我们只需要知道6个数字/参数,就可以用向量形式完整地表示它。
我创建了一个类来表示线向量并绘制它。它由一个vector和一个point_on_line参数化,它们都是3x1 numpy列向量。
要在直线上获得点,我们可以使用该方程。通过缩放vector改变d。
import matplotlib.pyplot as plt
import numpy as np
class Line:
def __init__(self, vector, point_on_line) -> None:
self.vector = np.array(vector).reshape(3, 1)
self.point_on_line = np.array(point_on_line).reshape(3, 1)
def plot(self, step_size=0.1):
points = np.zeros((3, 0))
for i in np.arange(-10, 10, step_size):
points = np.concatenate(
(points, self.point_on_line + i * self.vector), axis=1)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(points[0, :].ravel(),
points[1, :].ravel(),