已知平面内三点,求其平面的法向量
三点平面法向量
设三点坐标为A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3)
向量AB=(x2-x1,y2-y1,z2-z1),AC=(x3-x1,y3-y1,z3-z1)
AB、AC所在平面的法向量即AB×AC=(a,b,c),其中:
a=(y2-y1)(z3-z1)-(z2-z1)(y3-y1)
b=(z2-z1)(x3-x1)-(z3-z1)(x2-x1)
c=(x2-x1)(y3-y1)-(x3-x1)(y2-y1)
设 a=(ax,ay,az), b=(bx,by,bz)。i,j,k分别是X,Y,Z轴方向的单位向量,则:
a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k
a·b=(axbx+ayby+az*bz)
Python代码
def normal_vector(p1, p2, p3):x1, y1, z1 = p1x2, y2, z2 = p2x3, y3, z3 = p3a = (y2 - y1) * (z3 - z1) - (z2 - z1) * (y3 - y1)b = (z2 - z1) * (x3 - x1) - (x2 - x1) * (z3 - z1)c = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)return (a, b, c)if __name__ == '__main__':p1 = 1.0, 5.2, 0.0p2 = 2.8, 3.9, 1.0p3 = 7.6, 8.4, 2.0p4 = normal_vector(p1, p2, p3)print(p4)# output (-5.800000000000001, 3.0, 14.340000000000002)
C++代码
#include<iostream>using namespace std;//三维double矢量
struct Vec3d
{double x, y, z;Vec3d(){x = 0.0;y = 0.0;z = 0.0;}Vec3d(double dx, double dy, double dz){x = dx;y = dy;z = dz;}void Set(double dx, double dy, double dz){x = dx;y = dy;z = dz;}
};//计算三点成面的法向量
void Cal_Normal_3D(const Vec3d& v1, const Vec3d& v2, const Vec3d& v3, Vec3d &vn)
{//v1(n1,n2,n3);//平面方程: na * (x – n1) + nb * (y – n2) + nc * (z – n3) = 0 ;double na = (v2.y - v1.y)*(v3.z - v1.z) - (v2.z - v1.z)*(v3.y - v1.y);double nb = (v2.z - v1.z)*(v3.x - v1.x) - (v2.x - v1.x)*(v3.z - v1.z);double nc = (v2.x - v1.x)*(v3.y - v1.y) - (v2.y - v1.y)*(v3.x - v1.x);//平面法向量vn.Set(na, nb, nc);
}int main()
{ // Vec3d v1(1.0, 5.2, 3.7);// Vec3d v2(2.8, 3.9, 4.5);// Vec3d v3(7.6, 8.4, 6.2); // 法向量为:-5.81 0.78 14.34;Vec3d v1(1.0, 5.2, 0.0);Vec3d v2(2.8, 3.9, 1.0);Vec3d v3(7.6, 8.4, 2.0);// 法向量为:-5.8 3 14.34Vec3d vn;Cal_Normal_3D(v1, v2, v3, vn);// cout <<"法向量为:"<< vn.x << '\t' << vn.y << '\t' << vn.z << '\n';cout <<"法向量为:"<< vn.x << " " << vn.y << " " << vn.z << '\n';return 0;
}
相关文章:
已知平面内三点,求其平面的法向量
三点平面法向量 设三点坐标为A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3) 向量AB(x2-x1,y2-y1,z2-z1),AC(x3-x1,y3-y1,z3-z1) AB、AC所在平面的法向量即ABAC(a,b,c),其中: a(y2-y1)(z3-z1)-(z2-z1)(y3-y1) b(z2-z1)(x3-x1)-(z3-z1)(x2-x1) c(x2-x1)(y3-y1)-(x3-x1)(y2-y1)…...
HTML
HTML 1.HTML结构 1.1认识HTML HTML是超文本标记语言,电脑上看到的所有网站都是html实现的 HTML代码是“标签”构成的,简单来说,html就是一堆标签的组合 形如 <body>hello</body>标签名 (body) 放到 < > 中 大部分标签成…...
Java手写最大子数组和算法(如Kadane算法)和最大子数组和算法(如Kadane算法)应用拓展案例
Java手写最大子数组和算法(如Kadane算法)和最大子数组和算法(如Kadane算法)应用拓展案例 1. 算法思维导图 以下是使用mermaid代码表示的Kadane算法的实现原理: #mermaid-svg-rI7hVAVsP1qtjZK7 {font-family:"tr…...
掌握NVM、NRM和NPM:Node.js开发的利器
**掌握NVM、NRM和NPM:Node.js开发的利器** 背景介绍:如何使用NVM:在Windows上安装NVM:在macOS上安装NVM:配置NVM:常用NVM命令: 如何使用NRM:安装NRM:配置全局NRM…...
Nacos 2.2.3 部署到linux
到https://github.com/alibaba/nacos/releases 下载编译后压缩包,如nacos-server-2.2.3.tar.gz这种,里面包含有nacos的jar包,不然启动不了 1.新建并初始化数据库 创建nacos数据库,执行mysql-schema.sql文件,这个文件…...
设计模式之十:状态模式
状态模式通过改变对象内部的状态来帮助对象控制自己的行为。 这是一张状态图,其中每个圆圈都是一个状态。 最简单,第一反应的实现就是使用一个变量来控制状态值,并在方法内书写条件代码来处理不同情况。 package headfirst.designpatterns.…...
Python 的运算符和语句(条件、循环、异常)基本使用指南
运算符的分类 算数运算符赋值运算符复合赋值运算符比较运算符逻辑运算符 算数运算符 运算符描述实例加1 1 输出结果为 2-减1 - 1 输出结果为 0*乘2 * 2 输出结果为 4/除10 / 2 输出结果为 5//整除9 // 4 输出结果为 2%取余9 % 4 输出结果为 1**指数2 ** 4 输出结果为 16&…...
文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题
三、用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本。 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示。这个版本使用 Go 语言编写,利用随机化来选择一个元素,并在循环中不断地调整选择的元素&#x…...
React中组件通信01——props
React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子(…...
接口测试——接口协议抓包分析与mock_L1
目录: 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口:不同的系统之间相互连接的部分,是一个传递数据的通道接口测试:检查数据的交换、传递和控制…...
四种常用的自动化测试框架
一直想仔细研究框架,写个流水账似的测试程序不难,写个低维护成本的测试框架就很难了,所以研究多种测试框架还是很有必要的,知道孰优孰劣,才能在开始编写框架的时候打好基础,今天读到了KiKi Zhao的翻译文章&…...
Fuxploider:一款针对文件上传漏洞的安全检测与研究工具
Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…...
Unity 安装及运行MLAgents
1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…...
LightDB-A 兼容oracle支持mod操作符
LightDB-A 兼容oracle支持mod操作符 LightDB-A 为了兼容oracle,从23.3版本开始支持mod操作符,其语义同 ‘%’ 操作符,使用案例如下: select 5 mod 2;?column? ----------1 (1 row)select 0 % 0; ERROR: division by zerosel…...
SpringMVC之自定义注解
目录 一、Java注解 1.1 注解简介 1.2 注解分类 1.3 JDK基本注解 1.4 JDK元注解 1.5 自定义注解 1.5.1 标记注解 1.5.2 元数据注解 1.6 如何自定义注解 二、自定义注解的基本案例 2.1 案例一(获取类、方法以及属性上的注解) 2.1.1 Ingerited的…...
QT:使用普通按钮、网格布局管理器、标签、行编辑器、水平布局管理器、垂直布局管理器做一个小项目
widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //普通按钮 #include <QGridLayout> //网格布局管理器 #include <QLabel> //标签 #include <QLineEdit> //行编辑器 #include <QHBoxLayo…...
【小沐学写作】程序员必备技能:在线协作文档汇总
文章目录 1、简介2、微软Office在线文档2.1 功能简介2.2 使用费用2.3 用户体验 3、石墨文档3.1 功能简介3.2 使用费用 4、腾讯文档4.1 功能简介4.2 使用费用 5、语雀5.1 功能简介5.2 使用费用 6、飞书6.1 功能简介6.2 使用费用 7、印象笔记7.1 功能简介7.2 使用费用 结语 1、简…...
「工具|数据接口」免费公开的REST API 如何借助github搭建自己的fake API接口
本文主要介绍日常开发、测试、教学或者分享中,可能遇到的模拟数据问题。分享免费开发的测试数据接口,以及如何利用github快速搭建定制化的接口数据,避免使用真实数据的风险以及自己现编数据的麻烦。 文章目录 一、场景说明二、免费公开的Fak…...
leetcode 18. 四数之和
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 < a,…...
树上背包问题动态规划
目录 树状动态规划概述 示例 求解思路 树状动态规划概述 树状动态规划(Tree DP)是一种在树结构上进行动态规划的方法。在树状DP中,我们利用树的特殊结构性质,通过递归地向下更新子节点的状态,最终得到整个树的最…...
linux查看进程对应的线程(数)
首先,top或ps查看进程列表,确定要查看的进程pid,如下面40698 查看进程的线程情况 查看进程:top -p 40698 查看线程:top -p 40698 -d 3 -H 其中-d是刷新频率 可看到此进程共211个线程,运行中的是211个。…...
Python中的桌面应用开发库有哪些?
Python中有几个受欢迎的桌面应用开发库。以下是其中一些: Tkinter:这是Python的标准GUI库,它提供了构建简单的桌面应用程序的基本组件和功能。 PyQt:这是一个成熟的、功能强大的跨平台图形用户界面框架,它是Python绑定…...
【大数据】Neo4j 图数据库使用详解
目录 一、图数据库介绍 1.1 什么是图数据库 1.2 为什么需要图数据库 1.3 图数据库应用领域 二、图数据库Neo4j简介 2.1 Neo4j特性 2.2 Neo4j优点 三、Neo4j数据模型 3.1 图论基础 3.2 属性图模型 3.3 Neo4j的构建元素 3.3.1 节点 3.3.2 属性 3.3.3 关系 3.3.4 标…...
Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案
说明: 1. 博主电脑为Windows11操作系统,亲测有效,修改后无任何影响,软件都可以正常运行! 2. Windows10系统还不知道可不可行,因为Windows11的计算机管理中没有本地用户和组,博主在csdn上看到很…...
Python正则表达式(re)
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为…...
【PyTorch 08】如果要手动安装对应的包
例如有时候我们要下载 PyG ,但是需要手动下载,需要进行以下步骤: 网站链接:https://data.pyg.org/whl/ 首先查看当前安装好的Pytorch版本和对应的cuda版本 1. pip list:查看torch版本 2. torch.version.cuda…...
黑马JVM总结(十二)
(1)五种引用_强软弱 实线箭头表示强引用,虚心线表示软弱虚终结器引用 在平时我们用的引用,基本都为强引用 ,比如说创建一个对象通过运算符赋值给了一个变量,那么这个变量呢就强引用了刚刚的对象 强引用的…...
彻底搞懂线程池原理以及创建方式
1. 为什么要使用线程池 在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处: 降低资源消耗。通过复用…...
FreeSWITCH 1.10.10 简单图形化界面9 - 鼎兴FXO网关SIP中继内网IPPBX落地
FreeSWITCH 1.10.10 简单图形化界面9 - 鼎兴FXO网关SIP中继内网IPPBX落地 0、 界面预览1、创建一个话务台2、创建PBX SIP中继并设置呼入权限3、设置呼出规则4、设置分机呼出权限5、设置FXO 网关相关信息6、设置FXO网关端口组呼入号码7、设置FXO网关的SIP中继8、设置FXO网关呼叫…...
Oracle数据如何迁移导入到MySQL
使用Navicat工具建立数据连接,进行数据传输 1、打开Navicat工具,分别连接Oracle数据库和MySQL数据库。 2、连接源选择你的oracle数据,目标选mysql 即可成功导入...
怎么做独立网站/网站设计制作哪家好
c2自r120之后允许用户自己添加插件 插件的目录为 info.xml files\myplugin\common.js files\myplugin\edittime.js files\myplugin\PluginIcon.ico files\myplugin\runtime.js info.xml文件主要是插件的基本信息 <?xml version"1.0" encoding"UTF-8…...
电脑课做网站所需的软件/自己怎么做网站
前言: 在使用gitLab中时遇到一个问题,就是我在gitLab新建分支后,在本地切换分支不成功,遇到了这个问题,在大佬的博客的指点下,顺利解决这个问题,记录下我一步一步解决问题的过程,最后…...
做教学的视频网站有哪些/seo查询 工具
为什么80%的码农都做不了架构师?>>> 一、什么是sandbox 每个iOS应用都被限制在“沙盒”中,“沙盒”相当于一个加了仅主人可见权限的文件夹,苹果对沙盒主要有以下限制。 1、应用程序可以在自己的沙盒里运作,但是不能访…...
泰安网站建设公司/怎么找关键词
全景制作其实并不难,掌握要点你也能成为制作高手,下面为大家盘点一下制作流程。首先了解一下全景图片是什么.全景图片是指从多种角度拍摄的一组或多组图片经过后期加工制作而成的图像,制作全景图片分为前期拍摄和后期制作两个部分。 1.前期拍…...
软件开发包含网站开发/网站域名费一年多少钱
SPI全名Service Provider Interface(服务提供者接口),SPI的主要目的是实现服务的热插拔效果,主要应对的场景是设计者提供一个接口,这个接口的具体实现由不同厂商提供,设计者只要引入厂商提供的实现jar包就可…...
网站怎么推广软文/百度如何免费推广
2019独角兽企业重金招聘Python工程师标准>>> 当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。 JDBC的批量处理语句包括下面两个方法: addBa…...