空间解析几何之直线与平面:推导直线与直线、直线与平面交点

2024-03-15 21:36

本文主要是介绍空间解析几何之直线与平面:推导直线与直线、直线与平面交点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

空间解析几何——直线与平面

三维空间中的直线和平面与二维空间中的性质有一定的类似之处,但是其相交关系的求解方式有所差异。本文回顾了三维空间中直线和平面的解析表达,然后推导线-线线-面交点。

平面

空间平面的表达式为:
A x + B y + C z + D = 0 (1) Ax+By+Cz+D=0\tag{1} Ax+By+Cz+D=0(1)
包含了4个参数 A , B , C , D A,B,C,D A,B,C,D ( A , B , C ) (A,B,C) (A,B,C)是平面的一个法向量。但是它们并非独立的,即法向量的长度可以是任意的。
若限定 A , B , C A,B,C A,B,C三个参数满足:
A 2 + B 2 + C 2 = 1 (2) A^2+B^2+C^2=1\tag{2} A2+B2+C2=1(2)
此时 ( A , B , C ) (A,B,C) (A,B,C)是平面的单位法向量, D D D表示坐标原点到该平面的距离。方便起见,下面的讨论默认平面的A,B,C参数满足(2)式。

本质上,空间平面仅需要三个参数确定: ( n x , n y , 1 ) (n_x,n_y,1) (nx,ny,1)描述其法向量(仅需2参数), d d d描述其到原点的距离,表达式为 n x x + n y y + z + d = 0 n_x x+n_y y+z+d=0 nxx+nyy+z+d=0,与(1)是等价的。

直线

空间直线的一种表达是:两个平面的交。用 π 1 , π 2 \pi_1,\pi_2 π1,π2表示两个不平行、不共面的平面,则一条空间直线可以表达为
l = π 1 ∩ π 2 → l = { A 1 x + B 1 y + C 1 z + D 1 = 0 A 2 x + B 2 y + C 2 z + D 2 = 0 l=\pi_1\cap\pi_2\rightarrow l=\begin{cases}A_1 x+B_1 y+C_1 z+D_1=0\\A_2 x+B_2 y+C_2 z+D_2=0\end{cases} l=π1π2l={A1x+B1y+C1z+D1=0A2x+B2y+C2z+D2=0

显然,这种表达方式不是唯一的。一条空间直线可能是无数对平面的交线。
空间直线更常用的表达式为:
x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} axx0=byy0=czz0

包含6个参数 x 0 , y 0 , z 0 , a , b , c x_0,y_0,z_0, a,b,c x0,y0,z0,a,b,c ( a , b , c ) (a,b,c) (a,b,c)是直线的方向向量,其长度任意,因而相当于只有两个独立参数; ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)是直线上一点。因此,一条空间直线只需要5个独立参数即可描述。

点到平面的距离

( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)到平面 A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0的距离为:

d = ∣ A x 1 + B y 1 + C z 1 + D ∣ A 2 + B 2 + C 2 d=\dfrac{|Ax_1+By_1+Cz_1+D|}{\sqrt{A^2+B^2+C^2}} d=A2+B2+C2 Ax1+By1+Cz1+D

点到直线的距离

( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)到直线 x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} axx0=byy0=czz0的距离为:

d = ∣ ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) × ( a , b , c ) ∣ a 2 + b 2 + c 2 d=\dfrac{|(x_1-x_0,y_1-y_0,z_1-z_0)\bold{\times} (a,b,c)|}{\sqrt{a^2+b^2+c^2}} d=a2+b2+c2 (x1x0,y1y0,z1z0)×(a,b,c)

表达式中为何出现叉积?这是因为, ∣ a × b ∣ = ∣ a ∣ ∣ b ∣ ∣ sin ⁡ θ ∣ |a\times b |=|a||b||\sin\theta| a×b=a∣∣b∣∣sinθ,而 d d d恰恰就等于 ∣ ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) ∣ ∗ ∣ sin ⁡ θ ∣ |(x_1-x_0,y_1-y_0,z_1-z_0)|*|\sin\theta| (x1x0,y1y0,z1z0)sinθ

在这里插入图片描述

直线之间的距离

两条直线 x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} axx0=byy0=czz0 x − x 1 a ′ = y − y 1 b ′ = z − z 1 c ′ \dfrac{x-x_1}{a'}=\dfrac{y-y_1}{b'}=\dfrac{z-z_1}{c'} axx1=byy1=czz1,分别通过点P1 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)和P2 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)
两条直线方向向量的叉积即为待求距离所在的方向,我们记作 N = ( a , b , c ) × ( a ′ , b ′ , c ′ ) N=(a,b,c)\times(a',b',c') N=(a,b,c)×(a,b,c)
则它们之间的距离为:

d = ∣ ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) ⋅ N ∣ ∣ ∣ N ∣ ∣ d = \dfrac{|(x_1-x_0,y_1-y_0,z_1-z_0)\cdot N|}{||N||} d=∣∣N∣∣(x1x0,y1y0,z1z0)N
其中, ∣ ∣ ∗ ∣ ∣ ||*|| ∣∣∣∣表示取模。
在这里插入图片描述

直线与直线相交

两条直线 x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} axx0=byy0=czz0 x − x 1 a ′ = y − y 1 b ′ = z − z 1 c ′ \dfrac{x-x_1}{a'}=\dfrac{y-y_1}{b'}=\dfrac{z-z_1}{c'} axx1=byy1=czz1,分别通过点P1 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)和P2 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)
若两条空间直线相交,则它们必共面。与求解直线的距离类似,为了求两条空间直线的交点,首先计算两条直线方向向量的叉积 N N N

解法一

由于两条直线的方向向量已知,所以求交点 C C C的问题,可以转化为求解CP1长度的问题。将CP1长度记为L,如图所示,显然有:

L = d / ∣ cos ⁡ θ ∣ L=d/|\cos\theta| L=d/∣cosθ

d d d即P1点到另一直线的距离。即有:
d = ∣ ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) × ( a ′ , b ′ , c ′ ) ∣ a ′ 2 + b ′ 2 + c ′ 2 d=\dfrac{|(x_1-x_0,y_1-y_0,z_1-z_0)\bold{\times} (a',b',c')|}{\sqrt{a'^2+b'^2+c'^2}} d=a′2+b′2+c′2 (x1x0,y1y0,z1z0)×(a,b,c)

两直线夹角的余弦为:
∣ cos ⁡ θ ∣ = a a ′ + b b ′ + c c ′ a 2 + b 2 + c 2 a ′ 2 + b ′ 2 + c ′ 2 |\cos\theta|=\dfrac{aa'+bb'+cc'}{\sqrt{a^2+b^2+c^2}\sqrt{a'^2+b'^2+c'^2}} cosθ=a2+b2+c2 a′2+b′2+c′2 aa+bb+cc
在这里插入图片描述
那么,由于距离d没有符号,C点坐标为:
C = P 1 + L ⋅ ( a , b , c ) 或 C = P 1 − L ⋅ ( a , b , c ) C=P1+L\cdot (a,b,c)\text{或}C=P1-L\cdot (a,b,c) C=P1+L(a,b,c)C=P1L(a,b,c)
为确定C坐标为上面两个结果中的哪一个,将它们代入直线 l 2 l_2 l2的表达式,误差较小的那个就是真正的交点。

解法二

设未知数t,由于C在直线 l 1 l_1 l1上,其坐标可以表达为 ( x 0 + t a , y 0 + t b , z 0 + t c ) (x_0+ta,y_0+tb,z_0+tc) (x0+ta,y0+tb,z0+tc);代入直线 l 2 l_2 l2的表达式,有:

{ x 0 + t a − x 1 a ′ = y 0 + t b − y 1 b ′ x 0 + t a − x 1 a ′ = z 0 + t c − z 1 c ′ \begin{cases}\dfrac{x_0+ta-x_1}{a'}=\dfrac{y_0+tb-y_1}{b'}\\\dfrac{x_0+ta-x_1}{a'}=\dfrac{z_0+tc-z_1}{c'}\\\end{cases} ax0+tax1=by0+tby1ax0+tax1=cz0+tcz1

由上面两式,可分别求出两个t值:

t 1 = ( x 1 − x 0 ) b ′ − ( y 1 − y 0 ) a ′ a b ′ − a ′ b t 2 = ( x 1 − x 0 ) c ′ − ( z 1 − z 0 ) a ′ a c ′ − a ′ c t_1=\dfrac{(x_1-x_0)b'-(y_1-y_0)a'}{ab'-a'b}\\ t_2=\dfrac{(x_1-x_0)c'-(z_1-z_0)a'}{ac'-a'c}\\ t1=abab(x1x0)b(y1y0)at2=acac(x1x0)c(z1z0)a
如果 t 1 , t 2 t_1,t_2 t1,t2非常接近,则说明两直线确实交于一点;如果它们差异较大,说明两直线可能不相交(即不共面或平行)。

多条直线相交时,应按照最小二乘法求交点。

直线与平面相交

已知直线 x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} axx0=byy0=czz0,直线上一点P ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),平面方程为: A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0,如图所示求交点坐标:

在这里插入图片描述
设未知数t,由于C在直线上,其坐标可以表达为 ( x 0 + t a , y 0 + t b , z 0 + t c ) (x_0+ta,y_0+tb,z_0+tc) (x0+ta,y0+tb,z0+tc)

因为C在平面上,所以满足
A ( x 0 + t a ) + B ( y 0 + t b ) + C ( z 0 + t c ) + D = 0 A(x_0+ta)+B(y_0+tb)+C(z_0+tc)+D=0 A(x0+ta)+B(y0+tb)+C(z0+tc)+D=0

整理可得
t = − A x 0 + B y 0 + C z 0 + D a A + b B + c C t=-\dfrac{Ax_0+By_0+Cz_0+D}{aA+bB+cC} t=aA+bB+cCAx0+By0+Cz0+D

那么,直线与平面的交点坐标为:
C = P + t ∗ ( a , b , c ) C=P+t*(a,b,c) C=P+t(a,b,c)

这篇关于空间解析几何之直线与平面:推导直线与直线、直线与平面交点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813334

相关文章

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

圆与线段的交点

poj 3819  给出一条线段的两个端点,再给出n个圆,求出这条线段被所有圆覆盖的部分占了整条线段的百分比。 圆与线段的交点 : 向量AB 的参数方程  P = A + t * (B - A)      0<=t<=1 ; 将点带入圆的方程即可。  注意: 有交点 0 <= t <= 1 ; 此题求覆盖的部分。 则 若求得 t  满足 ; double ask(d

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : = { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i = 1 , 2 , . . . , n } \textbf{K}^{n}:=\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i=1,2,...,n\} Kn:={(a1​,a2​,...,an​)∣ai​∈K,i=1,2,...,n

win7系统中C盘空间缩水的有效处理方法

一、深度剖析和完美解决   1、 休眠文件 hiberfil.sys :   该文件在C盘根目录为隐藏的系统文件,隐藏的这个hiberfil.sys文件大小正好和自己的物理内存是一致的,当你让电脑进入休眠状态时,Windows 7在关闭系统前将所有的内存内容写入Hiberfil.sys文件。   而后,当你重新打开电脑,操作系统使用Hiberfil.sys把所有信息放回内存,电脑

求空间直线与平面的交点

若直线不与平面平行,将存在交点。如下图所示,已知直线L过点m(m1,m2,m3),且方向向量为VL(v1,v2,v3),平面P过点n(n1,n2,n3),且法线方向向量为VP(vp1,vp2,vp3),求得直线与平面的交点O的坐标(x,y,z): 将直线方程写成参数方程形式,即有: x = m1+ v1 * t y = m2+ v2 * t

[Linux]:环境变量与进程地址空间

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 环境变量 1.1 概念 **环境变量(environment variables)**一般是指在操作系统中用来指定操作系统运行环境的一些参数,具有全局属性,可以被子继承继承下去。 如:我们在编写C/C++代码的时,在链接的时候,我们并不知

【编程底层原理】方法区、永久代和元空间之间的关系

Java虚拟机(JVM)中的内存布局经历了几个版本的变更,其中方法区、永久代和元空间是这些变更中的关键概念。以下是它们之间的关系: 一、方法区: 1、方法区是JVM规范中定义的一个概念,它用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 3、它是JVM运行时数据区的一部分,与堆内存一样,是所有线程共享的内存区域。 二、永久代(PermGen): 1、在Java SE 7之前,

高斯平面直角坐标讲解,以及地理坐标转换高斯平面直角坐标

高斯平面直角坐标系(Gauss-Krüger 坐标系)是基于 高斯-克吕格投影 的一种常见的平面坐标系统,主要用于地理信息系统 (GIS)、测绘和工程等领域。该坐标系将地球表面的经纬度(地理坐标)通过一种投影方式转换为平面直角坐标,以便在二维平面中进行距离、面积和角度的计算。 一 投影原理 高斯平面直角坐标系使用的是 高斯-克吕格投影(Gauss-Krüger Projection),这是 横