求平面方程的几种方法_平面及其方程

求平面方程的几种方法_平面及其方程假设在三维世界中存在一个平面,如图  一个平面可以通过如下表达式表达                      (1)其中,(x,y,z)是在该平面上上的点的3D坐标。(A,B,C)能够构成该平面的一个法向量n。 那么,怎么通过一堆离散的点来求解这个平面呢?首先我们可以简单的用一个平面的法向量来表征一个平面。 方法1:假设在某个平面中存在着三个坐标点分别…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

假设在三维世界中存在一个平面,如图

  求平面方程的几种方法_平面及其方程

一个平面可以通过如下表达式表达

求平面方程的几种方法_平面及其方程                                            (1)

其中,(x,y,z)是在该平面上上的点的3D坐标。(A,B,C)能够构成该平面的一个法向量n。

 

那么,怎么通过一堆离散的点来求解这个平面呢?首先我们可以简单的用一个平面的法向量来表征一个平面。

 

方法1:

假设在某个平面中存在着三个坐标点分别是M1(x1,y1,z1),M2(x2,y2,z2),M2(x2,y2,z2),那么我们可以得到该平面上的两个向量

   M1M2=M2-M1

   M1M3=M3-M1

那么,我们需要求解的平面是不是就和这两个向量都平行呢?当然平行!换而言之,这两个向量所构成的平面就是我们所求解的平面。所以我们所求平面的法向量也就必定和这两个向量所构成的平面垂直。最后,也就是说法线必定与上述两个向量垂直。

根据叉积的定义(https://baike.baidu.com/item/%E5%90%91%E9%87%8F%E7%A7%AF/4601007?fr=aladdin&fromid=2812058&fromtitle=%E5%8F%89%E7%A7%AF),我们可以找到和上述两个向量都垂直的向量

   n= M1M2 x M1M3

最终,我们通过平面中的3个点求解出来平面的法向量来表征该平面。

 

方法2:

方法1比较简单,利用高中的几何知识就可以轻易解决,那么大家有没有想过一个问题:在实际情况中,我们得到的某个平面的点集可能是存在一定的误差的,换而言之,某一些点虽然被归为某一个平面,但是由于测量误差的存在,它们可能是在三维坐标系中的位置是高于或者低于我们所求平面的。所以,当我们从中选取3个点去求解平面的时候就会存在比较明显的误差。所以,要是能够充分利用所有测量到的平面中的点的信息,则会增加我们的估计精度。

假如我们有N个点,这N个点都是基本满足公式(1),虽然存在一些误差。那么,它们应该基本满足下面的公式:

 求平面方程的几种方法_平面及其方程

针对上述问题,我们可以将它归为一个最小二乘问题:

 求平面方程的几种方法_平面及其方程

这是一个AX=0的线性欠定方程。在假设法线模为1的前提下,忽略对D的求解,我们可以对左边矩阵进行SVD分解,得到在未知向量模为1下的解。最终实现对平面法线的求解,当然这是一个近似解啦~

 

方法3

那么问题来了,要是这一对点中有少数特别离谱的点怎么办?这肯定会影响我们的求解精度啊!其实也简单,用RANSAC方法(https://en.wikipedia.org/wiki/Random_sample_consensus就可以啦!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234078.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2060s

    2060s2060s老版本三星核心:175显存:2030功耗:125算力:43+镁光核心:-400显存:1050功耗:125算力:37+升级系统后三星核心:1035显存:2030镁光核心:1035显存:1050

    2022年6月22日
    64
  • Python中strip()函数

    Python中strip()函数在pythonAPI中这样解释strip()函数:声明:s为字符串,rm为要删除的字符序列s.strip(rm)删除s字符串中开头、结尾处,位于rm删除序列的字符s.lstrip(rm)删除s

    2022年7月5日
    18
  • 邀您免费加入到程序猿小密圈

    邀您免费加入到程序猿小密圈

    2022年3月13日
    43
  • linux zip文件解压命令详解[通俗易懂]

    linux zip文件解压命令详解[通俗易懂]1、把/home目录下面的mydata目录压缩为mydata.zipzip-rmydata.zipmydata#压缩mydata目录2、把/home目录下面的mydata.zip解压到mydatabak目录里面unzipmydata.zip-dmydatabak3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zipzip-rabc12

    2022年6月7日
    42
  • ES6新特性总结之函数和扩展运算符…

    ES6新特性总结之函数和扩展运算符…

    2021年6月13日
    119
  • 粒子群算法详解

    粒子群算法详解一.产生背景  ❃粒子群算法(particleswarmoptimization,PSO)由Kennedy和Eberhart在1995年提出,该算法对于Hepper的模拟鸟群(鱼群)的模型进行修正,以使粒子能够飞向解空间,并在最好解处降落,从而得到了粒子群优化算法。❃同遗传算法类似,也是一种基于群体叠代的,但并没有遗传算法用的交叉以及变异,而是粒子在解空间追随最优的粒子进行搜索。

    2022年6月10日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号