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

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

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

平面

空间平面的表达式为:
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://xiahunao.cn/news/2868878.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java面向对象案例之描述专业和学生(4)

类的方法图 学生类: 属性:学号,姓名,年龄,所学习的专业方法:学习的方法,描述学习状态。描述内容包括姓名、学号、年龄、所学习的专业信息 专业类: 属性:专业编号&#xf…

音乐制作的最佳选择FL Studio v21.2.3.4004 破解版2024最新下载

FL Studio v21.2.3.4004:音乐制作的最佳选择 随着音乐技术的发展,越来越多的人开始制作自己的音乐。其中,FL Studio作为一款集成了音序器、采样器、效果器、混响等多种功能的音乐制作软件,备受音乐制作人的青睐。而最新版的FL St…

倒计时30,28天

1.队列Q (nowcoder.com) //1. #include<bits/stdc.h> using namespace std; #define int long long const int N2e56; const int inf0x3f3f3f3f; int dir[13]{0,31,28,31,30,31,30,31,31,30,31,30,31}; const double piacos(-1.0); int a[N],b[N]; bool cmp(int xx,int …

HTML+CSS3+Bootstrap第一章例子大全

纯手打&#xff0c;请大家多多支持&#xff08;拱手 目录 例1-1选择器的使用 例1-2盒子模型 项目1-1三栏定位 例1-3圆角区域 ​编辑例1-4特殊边框效果 例1-5对象阴影 例1-6线性渐变 例1-7径向渐变 项目1-2许愿墙 例1-1选择器的使用 <!DOCTYPE html> <html&g…

SAP CAP篇十五:写个ERP的会计系统吧,Part II

本文目录 本系列文章目标开发步骤数据库表设计初始数据初始数据&#xff1a;AccountCategories初始数据&#xff1a;AccountUsages初始数据&#xff1a;ChartOfAccounts初始数据&#xff1a;AccountSubjects Service 定义生成Fiori AppApp运行 本系列文章 SAP CAP篇一: 快速创…

[RAM] RAM 突发传输(Burst ,Burst size, length) | Burst 读写过程与时序 精讲

主页&#xff1a; 元存储博客 文章目录 前言1. Burst 基本概念含义Burst Width &Burst Length 2. CPU Burst mode3. 总线 burst mode总线的仲裁总线突发传输时序 4. Burst Chop (突发终止)5. Burst Mode 应用什么时候用突发模式 总结 前言 在DMA&#xff08;直接内存访问&…

电脑那个部件坏了或者是哪个软件需要修复来看价钱

电脑维修价格表是多少&#xff1f; 价格取决于计算机的哪个部分损坏或哪个软件需要修复。 由于电脑中的部件非常多&#xff0c;而且会以各种奇怪的方式出现问题&#xff0c;下面我们就来看看具体的充电方法。 电脑维修价格表&#xff1a; 1. 重新安装系统。 安装XP系统通常需…

Spring Boot轻松整合Minio实现文件上传下载功能【建议收藏】

一、Linux 安装Minio 安装 在/root/xxkfz/soft目录下面创建文件minio文件夹&#xff0c;进入minio文件夹&#xff0c;并创建data目录&#xff1b; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data执行如下命令进行下载 [rootxxkf…

TinyEMU之Linux Kernel编译

TinyEMU之Linux Kernel编译 1 准备工作2 安装RISC-V交叉编译器3 编译Linux Kernel4 镜像格式转换 本文属于《 TinyEMU模拟器基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 准备工作 我们需要&#xff0c;下载以下内容。 编译好的RISC-V交叉编译器&#xff1a;riscv64-…

使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

请直接看原文: 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码_urldecoder.decode-CSDN博客 ------------------------------------------------------------------------------------------------------------------------------- 摘要&#xff1a; URLDecoder 和…

linux最佳入门(笔记)

1、内核的主要功能 2、常用命令 3、通配符&#xff1a;这个在一些启动文件中很常见 4、输入/输出重定向 意思就是将结果输出到别的地方&#xff0c;例如&#xff1a;ls标准会输出文件&#xff0c;默认是输出到屏幕&#xff0c;但是用>dir后&#xff0c;是将结果输出到dir文…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

Netty线程模型详解

文章目录 概述单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 概述 Netty的线程模型采用了Reactor模式&#xff0c;即一个或多个EventLoop轮询各自的任务队列&#xff0c;当发现有任务时&#xff0c;就处理它们。Netty支持单线程模型、多线程模型和混合线程模型…

C/C++火柴棍等式

有n根(n<24)火柴棍&#xff0c;你可以拼出多少个形如“ABC"的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零&#xff0c;则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 依次需要用到的火柴棍数目为6 2 5 5 4 5 6 3 7 6 。 如果是初学者可能会这么写。 …

【MyBatis-Plus】最优化持久层开发 快速入门 核心功能介绍与实战 3.5.3.1

文章目录 一、简介二、快速入门三、MyBatis-Plus核心功能3.1 基于Mapper接口CRUD3.1.1 Insert方法3.1.2 Delete方法3.1.3 Update方法3.1.4 Select方法3.1.5 自定义和多表映射 3.2 基于Service接口CRUD3.2.1 对比Mapper接口CRUD区别&#xff1a;3.2.2 使用Iservice接口方式3.2.3…

oj-超级密码

小明今年9岁了&#xff0c;最近迷上了设计密码&#xff01;今天&#xff0c;他又设计了一套他认为很复杂的密码&#xff0c;并且称之为“超级密码”. 说实话&#xff0c;这套所谓的“超级密码”其实并不难&#xff1a;对于一个给定的字符串&#xff0c;你只要提取其中的数字&am…

没有公式,不要代码,让你理解 RCNN:目标检测中的区域卷积神经网络

⭐️ 导言 在计算机视觉领域&#xff0c;目标检测是一项关键任务&#xff0c;它涉及识别图像中感兴趣的物体&#xff0c;并定位它们的位置。而RCNN&#xff08;Region-based Convolutional Neural Network&#xff09;是一种经典的目标检测算法&#xff0c;它以区域为基础进行…

FFmpeg工作流程及视频文件分析

FFmpeg工作流程: 解封装(Demuxing)--->解码(Decoding)--->编码(Encoding)--->封装(Muxing) FFmpeg转码工作流程: 读取输入流--->音视频解封装--->解码音视频帧--->编码音视频帧--->音视频封装--->输出目标流 可简单理解为如下流程: 读文件-->解…

工作总结!日志打印的11条建议

前言 大家好&#xff0c;我是 JavaPub。日志是我们定位问题的得力助手&#xff0c;也是我们团队间协作沟通&#xff08;甩锅&#xff09;、明确责任归属&#xff08;撕B&#xff09;的利器。没有日志的程序运行起来就如同脱缰的野&#x1f40e;。打印日志非常重要。今天我们来…

编译原理-实现识别标识符的词法分析器——沐雨先生

实验任务&#xff1a; 实现识别标识符的词法分析器 实验要求&#xff1a; 根据编译原理理论课教材中图2.3“标识符的转换图”&#xff0c;用C语言编写识别标识符的词法分析器&#xff0c;以文本文件为输入&#xff0c;控制台&#xff08;或文件&#xff09;输出识别出的每个…