浏览量:164

2.2. 平面初始化

本篇文章禁止用于任何商业目的,版权申明、版本说明等见《前言》。

PDF文档和源码下载地址:https://github.com/twinklingstar20/Programmers_Computational_Geometry

2.2. 平面初始化

在后面的算法,都是基于(2.2)所示的平面的参数方程表示,给定三种条件,可以确定一个平面:1)给定三个不共线的点;2)两条相交的直线;3)一条直线和一个不在该直线上的点。本节将介绍在给定这三种条件时,如果得出平面的如(2.2)式所示的参数表示。

2.2.1. 三个不共线的点

问题描述:在三维空间上,有不共线的三个点\({V_i},i \in \{ 0,1,2\} \),确定经过它们的平面。

三个点的顺序影响平面对象法向量的方向,可以使用如下等式,初始化一个经过它们的平面:

\[\vec n = ({V_1} - {V_0}) \times ({V_2} - {V_0}),d = - \vec n \times {V_i},i \in \{ 0,1,2\} \tag{2.4} \]

向量\(\vec n\)与边\(\overline {{V_0}{V_1}} \)\(\overline {{V_1}{V_2}} \)\(\overline {{V_2}{V_0}} \)都垂直,求常量\(d\)时,可以选择法向量与任意一个点的点积。

2015-3-22 11-32-12

图2.5 三个点确定一个平面

如图2.5(a)所示的三个点顺序,可以初始化得到一个平面,沿着平面法向量向下观察,三个点是沿逆时针方向的。另外一种很简单、实用的判断平面法向量方向的方法,如图(b)所示,张开右手掌,将四根手指与点的朝向一致,拇指就指向法向量的方向了。

如果三个点在同一条直线上,那么求出的法向量是零向量,零向量是无法归一化的。因此,如果计算出的法向量\(\vec n\)是零向量,就可以判断出三个点是共线的。

2.2.2. 两条相交直线

问题描述:在三维空间上,有两条相交于点\(Q\)的直线\({L_1}(t) = {P_1} + t{\vec d_1}\)\({L_2}(s) = {P_2} + s{\vec d_2}\),确定经过它们的平面\(\Gamma \),其中,\({P_1},{P_2}\)分别表示直线,\({L_1},{L_2}\)上的点,\({\vec d_1},{\vec d_2}\)分别表示直线\({L_1},{L_2}\)的方向,\(s,t \in \left( { - \infty , + \infty } \right)\)

2015-3-22 11-32-28

图1.6 两条相交的直线确定一个平面

如图2.6所示,平面\(\Gamma \)的法向量与平面上的任意一个方向向量垂直,则易计算出平面的法向量为:

\[\vec n = {\vec d_1} \times {\vec d_2} \tag{2.5}\]

\(P\)是直线\({L_1}\)或者\({L_2}\)上的任意一点,平面表示中的常量为:

\[d = - \vec n \cdot P \tag{2.6}\]

2.2.3. 一条直线和一个点

问题描述:在三维空间上,有一条直线\(L(t) = P + t\vec d,t \in \left( { - \infty , + \infty } \right)\)和一个不在该直线上的点\(Q\),确定经过它们的平面,其中,\(P\)表示直线\(L\)上的点,\(\vec d\)表示直线\(L\)的方向。

2015-3-22 11-32-42

图2.7 一条直线与不在该直线上的点确定一个平面

如图2.7所示,由于点\(Q\)不在直线\(L\),所以由点\(P\)指向\(Q\)的向量\(\vec u = Q - P\)一定不是零向量,而且方向与向量\(\vec d\)不平行。则平面的法向量可以表示为:

\[\vec n = \vec u \times \vec d \tag{2.6}\]

设点\(Y\)是直线\(L\)上的任意一个点或者为点\(Q\),平面表示中的常量为:

\[d = - \vec n \cdot Y \tag{2.7}\]

spacer

Leave a reply