平面方程(Plane Equation)

平面方程(Plane Equation)

原文链接:http://www.songho.ca/math/plane/plane.html
翻译:罗朝辉 (http://www.cnblogs.com/kesalin/)
本文遵循“署名-非商业用途-保持一致”创作公用协议
平面方程

平面上的一点以及垂直于该平面的法线唯一定义了 3D 空间的一个平面。

Graph of a plane in 3D
(图一) 3D 空间的平面

 

在图一中,给定法线向量 normal vector ,以及平面上的一点 P1,对于平面上的任意一点 P ,我们可以在平面上定义一个由 P1 指向 P 的向量:

                        

因为法线 normal vector 垂直于平面,它必定也垂直于位于平面上的向量 ,因此它们的点积为 0 :

                        

以上就是平面方程的向量形式,下面我们来看代数形式的,通过点积计算,我们得到:

                        equation of a plane

      如果我们用  来替代上面表达式中的常数部分,就得到平面方程的代数形式

                                                                         equation of a plane

原点到平面的距离

如果法线是归一化的,那么平面方程中的常数表达式 d 就是原点到平面的距离。

Plane with unit normal
(图二)平面和归一化法线

如图二中,给定归一化法线向量 (a1, b1, c1),以及平面上的一点 P1 (Da1, Db1, Dc1),我们来推导原点到平面的距离 D。 将法线向量(a1, b1, c1) 和点 P1 代入平面方程,得到:

                 

因此,我们可以用标准平面方程除以法线的模(法线长度)来计算原点到平面的距离。举个例子,原点到以 (1, 2, 2) 为法线的平面(x + 2y + 2z - 6 = 0)的距离为 2,计算过程如下:

                                                                         

任意点到平面的距离

Distance between Plane and Point
(图三) 任意点到平面的距离

如图三中,我们来推导空间中任意一点 P2 到平面的距离 D 的计算公式。P2 到平面的距离等于由 P1 指向 P2 的向量  在法线向量  上的投影。我们用点积来计算投影距离 D :

            

展开分子  :

 

代入前面的距离公式,得到最终的点到平面的距离公式

distance between plane and point

 

观察上面的式子,我们就可以发现距离 D 是将点 P2 代入平面方程中,再除以法线的模得到的。举个例子,点(-1, -2, -3)到平面 x + 2y + 2z - 6 = 0 的距离为:

                                                                  

注意:距离是有符号的!它可以为负值,我们可以通过这个符号来决定点位于平面的哪一边(D > 0,点在平面的正面-法线指向那一边;D < 0,带在平面的反面-法线相反方向的那一边,当然 D = 0 就是在平面上啦!)。

转载于:https://www.cnblogs.com/kesalin/archive/2009/09/09/plane_equation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DKN】(三)data_preprogress.py

内容 try: # 以绝对导入的方式导入cofig对象&#xff0c;并获取其{model_name}Config&#xff01; config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(f"{model_name} not included!")exit()这里…

mask属性是css3的吗_使用CSS3 mask(蒙版,遮罩)属性实现超酷按钮悬停动画

CSS语言&#xff1a;CSSSCSS确定import url("https://fonts.googleapis.com/css?familyLato:100,300,400");import url("https://fonts.googleapis.com/css?familyRoboto:100");* {margin: 0;padding: 0;box-sizing: border-box;}.header {text-align: c…

Java核心API需要掌握的程度

Java的核心API是非常庞大的,这给开发者来说带来了很大的方便&#xff0c;经常人有评论,java让程序员变傻。 但是一些内容我认为是必须掌握的&#xff0c;否则不可以熟练运用java&#xff0c;也不会使用就很难办了。 1、java.lang包下的80&#xff05;以上的类的功能的灵活运用。…

主成分分析(Principal Component Analysis,PCA)

文章目录1. 总体主成分分析2. 样本主成分分析3. 主成分分析方法3.1 相关矩阵的特征值分解算法3.2 矩阵奇异值分解算法4. sklearn.decomposition.PCA主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种常用的无监督学习方法利用正交变换把由…

【DKN】(二)config.py

class BaseConfig():"""General configurations appiled to all models"""num_epochs 2 #迭代次数num_batches_show_loss 100 # Number of batchs to show lossnum_batches_validate 1000 # Number of batchs to check metrics on valid…

log4net异步写入日志_微信支付万亿日志在Hermes中的实践

导语 | 微信支付日志系统利用 Hermes 来实现日志的全文检索功能&#xff0c;自从接入以来&#xff0c;日志量持续增长。目前单日入库日志量已经突破万亿级&#xff0c;单集群日入库规模也已经突破了万亿&#xff0c;存储规模达 PB 级。本文将介绍微信支付日志系统在 Hermes 上的…

使用Axis2调用Web Service

本文作为使用Axis2创建Web Service的后篇&#xff0c;主要介绍如何使用Axis2调用Web Service。有关准备工作详情请参考前篇的内容。 在Eclipse的Packge Explorer中右键点击New&#xff0c;选择Other项&#xff0c;新建一个Axis2 Code Genrateor向导。点击Next&#xff0c;打开向…

LeetCode 旋转数组 系列

旋转数组系列&#xff0c;多数是排序数组进行了旋转&#xff0c;可以使用二分查找。做一个集合&#xff0c;如还有缺失的&#xff0c;可以留言指出&#xff0c;一起加油&#xff01; LeetCode 33. 搜索旋转排序数组&#xff08;二分查找&#xff09; LeetCode 81. 搜索旋转排…

如何并行运行程序

参考了官方文档&#xff0c; torch.nn.parallel.DataParallel 以及https://zhuanlan.zhihu.com/p/102697821 在运行此DataParallel模块之前&#xff0c;并行化模块必须在device_ids [0]上具有其参数和缓冲区。在执行DataParallel之前&#xff0c;会首先把其模型的参数放在devi…

matlab打开笔记本摄像头_matlab窗口调用摄像头

更改”.m“文件&#xff1a;function varargout untitled1(varargin)% UNTITLED1 MATLAB code for untitled1.fig% UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing% singleton*.%% H UNTITLED1 returns the handle to a new UNTITLED…

session过期后登陆页面跳出iframe页面问题

登陆页面增加javascript&#xff1a;function window.onload(){if(window.parent.length>0)window.parent.locationlocation;}转载于:https://www.cnblogs.com/shenyunjun420/archive/2009/09/29/1576400.html

LeetCode 1143. 最长公共子序列(动态规划)

1. 题目 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff09;后组成的新…

【DKN】(四)train.py

内容 try: #不用多言&#xff0c; 获得该模块下的model_name函数Model getattr(importlib.import_module(f"model.{model_name}"), model_name)config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(…

用promise封装ajax_ES6-promise封装AJAX请求

【摘要】ES6-promise封装AJAX请求考必过小编为大家整理了关于ES6-promise封装AJAX请求的信息&#xff0c;希望可以帮助到大家&#xff01;ES6-promise封装AJAX请求标签&#xff1a;const状态码setreject对象响应状态ISErequest// 接口地址:https://api.apiopen.top/getJoke// 1…

REST和SOAP Web Service的比较(写得非常清晰易懂,转载于此)

本文转载自他人的博客&#xff0c;ArcGIS Server 推出了 对 SOAP 和 REST两种接口&#xff08;用接口类型也许并不准确&#xff09;类型的支持,本文非常清晰的比较了SOAP和Rest的区别联系&#xff01;REST似乎在一夜间兴起了&#xff0c;这可能引起一些争议&#xff0c;反对者可…

LeetCode 1249. 移除无效的括号(栈+set / deque)

1. 题目 给你一个由 (、) 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ &#xff08;可以删除任意位置的括号)&#xff0c;使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求&…

【DKN】(七)dataset.py【未完】

内容 里面有的函数在这里https://blog.csdn.net/qq_35222729/article/details/119882362 try:config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(f"{model_name} not included!")exit()class BaseDa…

php raabitmq中间件_rabbitMQ消息中间件环境配置及原理了解

视频教程一、Docker 入门Docker是什么&#xff1f;Docker 是一个开源的应用容器引擎&#xff0c;你可以将其理解为一个轻量级的虚拟机&#xff0c;开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任 何流行的 Linux 机器上。为什么要使用 Docke…

CSS 中的定位:relative,absolute

今天碰到一个定位问题&#xff0c;问题解决不好&#xff0c;于是花了大量的时间&#xff0c;调试了好久&#xff0c;得出了一些结果&#xff1a;1、如果有两个不交叉的盒子位于一个大盒子里面&#xff0c;位于上边的盒子的定位为relative&#xff0c;而下边的那个盒子的定位则是…

【DKN】(六)KCNN.py

内容 import torch import torch.nn as nn import torch.nn.functional as F from src.model.general.attention.additive import AdditiveAttentiondevice torch.device("cuda:0" if torch.cuda.is_available() else "cpu")class KCNN(torch.nn.Module):…