简介

如何通过三个点计算一个平面的的方程。

数学相关

A(0,1,0);

B(1,0,0);

C(1,1,0);

\[\vec{AB} = B - A = (1,-1,0)
\]
\[\vec{AC} = C - A = (1,0,0)
\]
\[\begin{equation}
\vec{AB} \times \vec{AC} =
\left(
\begin{array}{ccc}
i & j & k\\
1 & -1 & 0\\
1 & 0 & 0
\end{array}
\right)
\]

=

\left(

\begin{array}{cc}

-1 & 0\

0 & 0

\end{array}

\right){i}

+

\left(

\begin{array}{cc}

1 & 0\

1 & 0

\end{array}

\right)


+

\left(

\begin{array}{cc}

1 & -1\

1 & 0

\end{array}

\right)_

(0,0,1) = (a,b,c)

\end{equation}$ % 注意观察计算某个向量就把某一列遮住,然后即可计算

得到

a(x - x_{0}) + b(y - y_{0}) + c(z- z_{0}) = 0

==>

0(x - x_{0}) + 0(y - y_{0}) + 1(z- z_{0}) = 0

==> 带入 A 点的坐标

z = 0 即标准答案~~

C++ 实现

void SimpleMesh::computeABCD(Mesh::Point &point1, Mesh::Point &point2, Mesh::Point &point3, double& a, double& b, double & c, double &d)
{
Mesh::Normal vecP1P2 = point2 - point1;
Mesh::Normal vecP1P3 = point3 - point1;
Mesh::Normal vecNormal = vecP1P2 % vecP1P3;
double length = getDis(vecNormal, vecNormal);
a = vecNormal[0] / length;
b = vecNormal[1] / length;
c = vecNormal[2] / length;
// 带入point1
//a * ( x - point1[0] ) + b * (y - point1[1]) + c * (z - point1[2]) = 0
d = a * (-1) * point1[0] + b * (-1) * point1[1] + c * (-1) * point1[2];
}

通过三点计算一个平面 ax+by+cz+d = 0的更多相关文章

  1. KnockoutJS 3.X API 第三章 计算监控属性(5) 参考手册

    计算监控属性构造参考 计算监控属性可使用以下形式进行构造: ko.computed( evaluator [, targetObject, options] ) - 这种形式是创建一个计算监控属性最常 ...

  2. 【翻译自mos文章】怎么正确的计算一个ip地址的subnet id?

    怎么正确的计算一个ip地址的subnet id? 来源于: How to calculate the correct subnet for an interface (文档 ID 1059759.1) ...

  3. python 练习题:定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程ax^2+bx+c=0的两个解

    请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2+bx+c=0的两个解. 提示: 一元二次方程的求根公式为: x1 = (-b + math.sqrt((b ...

  4. Python程序计算ax^2+bx+c=0方程根

    程序用来计算ax^2+bx+c=0的两个根,有些异常暂时无法处理: #!/usr/bin/python # -*- coding: utf-8 -*- #当程序存在中文时,注释表明使用utf-8编码解 ...

  5. webrtc QOS笔记三 RTT计算,SRS增加XR

    webrtc QOS笔记三 RTT计算,SRS增加XR RTT计算方式 WebRTC中目前有两种方式计算RTT: 基于媒体流发送端的计算(默认开启).通过Sender Report(SR)与Recei ...

  6. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  7. js字符串长度计算(一个汉字==两个字符)和字符串截取

    js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\ ...

  8. 用Regex类计算一个字符串出现次数是最好方法【转载】

    我的一个朋友问我,怎么在c#或vb.net中,计算一个字符串中查找另一个字符串中出现的次数,他说在网上打了好多方法,我看了一下,有的是用replace的方法去实现,这种方法不是太好,占资源太大了.其实 ...

  9. PHP计算一个目录文件大小方法

    <?php $dirfile='../hnb'; /** *计算一个目录文件大小方法 *$dirfile:传入文件目录名 **/ function dirSize($dirfile) { $di ...

  10. Python计算一个项目中含有的代码行数

    最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...

随机推荐

  1. 如何在Uniapp项目中引入uni_modules中的依赖?

    在Uniapp项目中引入uni_modules中的依赖分为以下几种情况: 对于通用组件: 如果你已经通过HBuilderX插件市场安装了某个uni_modules组件,通常只需在页面的.vue文件中按 ...

  2. SaltStack 远程命令执行中文乱码问题

    问题 我在一台服务器上写了一个简单的 Python 脚本 haha.py,内容如下: [root@localhost ~]# cat haha.py print("你好") 当我在 ...

  3. Linux操作系统(中)

    上一篇分享了一些Linux操作系统最基本的一些命令和基础知识,下面,要分享的还是Linux操作系统的一些内容,因为在做网安这方面,Linux会经常用到而且也很重要,好了,废话不多说,要开始了. 在Li ...

  4. K8s新手系列之Pod容器中的command和args指令

    概述 command和args是containers下的两个指令,类似Dockerfile中的ENTRYPONIT和CMD指令. 官方文档地址:https://kubernetes.io/zh-cn/ ...

  5. Vue之“表单修饰符”

    1.lazy:失去焦点时处理 案例1 2.number:限制只能输入数字 案例1 3.trim:去掉前后空格 案例1

  6. 【译】.NET Aspire 和 Azure Functions 集成预览版

    您是否曾经为 serverless 技术集成到您现有的 .NET 项目中而挣扎过?Visual Studio 的最新更新已经覆盖了该领域.向 .NET Aspire 与 Azure Functions ...

  7. Spring 注解之@RequestHeader注解:获取请求头参数

    基本用法   Spring MVC提供了 @RequestHeader注解,其作用是将请求头中的参数值映射到控制器的参数中.常用属性如下: name:header值被绑定到的参数名称(The name ...

  8. RabbitMq安装、配置

    #安装 apt install rabbitmq #启动 rabbitmqctl start_app #查看状态 rabbitmqctl status #退出 rabbitmqctl stop #gu ...

  9. 处理日期和时间的chrono库

    C++11中提供了日期和时间相关的库chrono,通过chrono库可以很方便地处理日期和时间,为程序的开发提供了便利.chrono库主要包含三种类型的类:时间间隔duration.时钟clocks. ...

  10. 一文搞懂K8s中的RBAC认证授权

    概述 官方文档: https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authorization/ https://kubern ...