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

求平面方程的几种方法_平面及其方程假设在三维世界中存在一个平面,如图  一个平面可以通过如下表达式表达                      (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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 权限不足

    权限不足

    2022年1月21日
    40
  • 个人渗透笔记_web渗透

    个人渗透笔记_web渗透【拿shell】1.直接上传aspasajspcerphpaspxhtrcdx格式的木马,不行就利用IIS6.0解析漏洞”:1.asp;1.jpg/1.asp;.jpg/1.asp;jpg/1.asp;.xls2.上传图片木马遇到拦截系统,连图片木马都上传不了,记事本打开图片木马在代码最前面加上gif89a,一般就能逃过拦截系统了。3.上传图片木马把地址复制到数据库

    2022年9月21日
    0
  • ubuntu更改内核版本_ubuntu切换内核进入系统

    ubuntu更改内核版本_ubuntu切换内核进入系统背景新安装的ubuntu20内核版本是5.8,对于我个人来说太高了,需要安全地更换内核到低版本。如果是需要内核升级的,本文也适用。多内核并存或者删除其他内核方法同样适用。一、检查自己的内核版本uname-aLinuxlinux5.4.0-66-generic#74-UbuntuSMPWedJan2722:54:38UTC2021x86_64x86_64x86_64GNU/Linux我的内核也就是5.4二、下载所需内核选择1:安装apt最新的内核版本sudo

    2022年8月23日
    65
  • mysql—mysql中如何存储日期数据

    mysql—mysql中如何存储日期数据

    2020年11月12日
    188
  • 配置Elasticsearch挂掉后自动重启,ES Service配置

    配置Elasticsearch挂掉后自动重启,ES Service配置elasticsearch.service文件[Unit]Description=elasticsearchDocumentation=http://www.elastic.coWants=network-online.targetAfter=network-online.targetStartLimitIntervalSec=0[Service]LimitMEMLOCK=infinityUser=elasticGroup=elasticLimitNOFILE=65536Limit

    2022年6月11日
    47
  • finalize方法作用_Java finalize

    finalize方法作用_Java finalize关于object类中的finalize()方法。1、在object类中的源代码:protectedvoidfinalize()throwsThrowable{}2、finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。3、这个方法不需要程序员手动调用,JvM的垃圾回收器负责调用这个方法。4、finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize()方法。5、finalize()方法实际上

    2022年9月19日
    0

发表回复

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

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