三维坐标点按剖面分类

一、写在前面

①配套文件:根据剖面对三维坐标点(X,Y,Z)分类资源-CSDN文库

②脱敏处理:蚀变数据已采用随机数生成覆盖

③剖面坐标按顺序排列在“剖面坐标点.xlsx”文件中

二、3点确定空间中平面方程

原理:

设3点A,B,C
计算向量AB和AC
法向量n = AB × AC (叉乘
得到n(ni,nj,nk)后,设方程为
ni * X + nj * Y + nk * Z = D
代入A,B,C任意一点的坐标得出D值后就可以得到平面方程

代码:

输入:p1、p2、p3为平面上的3个点

输出:Ax+By+Cz+D=0平面方程中的系数

def plane_from_points(p1, p2, p3):# 将点转换为numpy数组,如果已经是数组则不转换a = np.array(p1)b = np.array(p2)c = np.array(p3)# 计算法向量normal = np.cross(b - a, c - a)# 归一化法向量并计算dd = -np.dot(normal, a)print("平面方程: {}x + {}y + {}z + {} = 0".format(normal[0],normal[1],normal[2],d))return normal[0], normal[1], normal[2], d

三、确定空间中一点到平面的距离

原理:点到平面距离_百度百科 (baidu.com)

代码:

输入:①平面方程中的4个系数;②待求与平面方程距离的点

输出:点到平面距离

def point2area_distance(Ax, By, Cz, D,p):mod_d = Ax * p[0] + By * p[1] + Cz * p[2] + Dmod_area = np.sqrt(np.sum(np.square([Ax, By, Cz])))d = abs(mod_d) / mod_areareturn d

四、完整代码

dataSample = pd.read_excel(r"C:\Users\zsllsz2022\Desktop\坐标分类.xlsx")import numpy as npdef plane_from_points(p1, p2, p3):# 将点转换为numpy数组,如果已经是数组则不转换a = np.array(p1)b = np.array(p2)c = np.array(p3)# 计算法向量normal = np.cross(b - a, c - a)# 归一化法向量并计算dd = -np.dot(normal, a)print("平面方程: {}x + {}y + {}z + {} = 0".format(normal[0],normal[1],normal[2],d))return normal[0], normal[1], normal[2], ddef point2area_distance(Ax, By, Cz, D,p):mod_d = Ax * p[0] + By * p[1] + Cz * p[2] + Dmod_area = np.sqrt(np.sum(np.square([Ax, By, Cz])))d = abs(mod_d) / mod_areareturn dpointData = data = pd.read_excel(r"C:\Users\zsllsz2022\Desktop\剖面坐标点.xlsx")point = []for index in range(63):     x = pointData["X"].iloc[index]y = pointData["Y"].iloc[index]z = pointData["Z"].iloc[index]point.append([x,y,z])fileIndex = 1
for x in [3*x for x in range(3,4)]:  #range21p1 = point[x]p2 = point[x+1]p3 = point[x+2]a,b,c,d = plane_from_points(p1, p2, p3)dataSample = pd.read_excel(r"C:\Users\zsllsz2022\Desktop\坐标分类.xlsx")classifyIndex = []for index in range(len(dataSample)):xTo = dataSample["Xto"].iloc[index]yTo = dataSample["Yto"].iloc[index]zTo = dataSample["Zto"].iloc[index]toPoint = [xTo,yTo,zTo]xFrom = dataSample["Xfrom"].iloc[index]yFrom = dataSample["Yfrom"].iloc[index]zFrom = dataSample["Zfrom"].iloc[index]fromPoint = [xFrom,yFrom,zFrom]if point2area_distance(a,b,c,d,toPoint) < 5:classifyIndex.append(index)if point2area_distance(a,b,c,d,fromPoint) < 5:classifyIndex.append(index)dataSample = dataSample.iloc[classifyIndex]list_to_append = [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,dataSample["Dep2200"].mean(),dataSample["IC"].mean(),dataSample["Pos2200"].mean(),dataSample["Dep2250"].mean(),dataSample["Pos2250"].mean(),dataSample["Dep1900"].mean()]new_row = pd.DataFrame([list_to_append], columns=list(dataSample.columns))dataSample = dataSample.append(new_row,ignore_index=True)print("剖面完成:",fileIndex)dataSample.to_excel(r"C:\Users\zsllsz2022\Desktop\剖面{}.xlsx".format(fileIndex))fileIndex += 1

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

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

相关文章

YOLOv8主要命令讲解

YOLOv8主要有三个常用命令&#xff0c;分别是&#xff1a;train&#xff08;训练&#xff09;、predict&#xff08;预测&#xff09;、export&#xff08;转化模型格式&#xff09;&#xff0c;下面我将展开讲讲三个常用命令的常用参数与具体使用方法。 一、训练 通过自己标…

Docker容器---Harbor私有仓库部署与管理

一、搭建本地私有仓库 1、本地私有仓库简介 有时候使用Docker Hub这样的公共仓库可能不方便&#xff0c;这种情况下用户可以使用registry创建一个本地仓库供私人使用&#xff0c;这点跟Maven的管理类似。 2、使用私有仓库的优点 节省网络带宽&#xff0c;针对于每个镜像不用…

知乎广告开户流程,知乎广告的优势是什么?

社交媒体平台不仅是用户获取知识、分享见解的场所&#xff0c;更是品牌展示、产品推广的重要舞台。知乎作为国内知名的知识分享社区&#xff0c;以其高质量的内容生态和庞大的用户基础&#xff0c;成为了众多企业进行广告投放的优选之地。云衔科技通过其专业服务&#xff0c;助…

【ZIP技巧】zip压缩包太大,怎么缩小?

如果文件压缩成zip压缩包&#xff0c;但是压缩之后&#xff0c;体积仍然很大&#xff0c;该如何解决呢&#xff1f;今天分享ZIP压缩包太大的几个缩小方法。 方法一&#xff1a; 适当减少文件内的不必要文件。 方法二&#xff1a; 使用7-zip格式压缩包&#xff0c;会比zip格…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

【PHP】安装指定版本Composer

1、下载指定版本composer.phar文件&#xff1a;https://github.com/composer/composer/releases 2、将下载的文件添加到全局路径&#xff1a; sudo mv composer.phar /usr/local/bin/composer 3、赋予权限&#xff1a; sudo chmod x /usr/local/bin/composer 4、查看compos…

Linux进程——进程的创建(fork的原理)

前言&#xff1a;在上一篇文章中&#xff0c;我们已经会使用getpid/getppid函数来查看pid和ppid,本篇文章会介绍第二种查看进程的方法&#xff0c;以及如何创建子进程&#xff01; 本篇主要内容&#xff1a; 查看进程的第二种方法创建子进程系统调用函数fork 在开始前&#xff…

一文了解双向链表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、链表分类二、双向链表是什么&#xff1f;三、功能函数实现1.申请一个节点2.初始化3.尾插4.头插5.尾删6.头删7.在指定位置后插入8.删除指定位置数据9.查找10…

带环链表问题

带环链表就是字面意思带环的链表&#xff0c;例如以下这三种情况 练习题 1.给定一个链表&#xff0c;判断链表中是否带环. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;快慢指针&#xff0c;慢指针走一步&#xff0c;快指针走两步&#xff0c;两个指针从链表的起…

nginx的前世今生(二)

书接上回&#xff1a; 上回书说到&#xff0c;nginx的前世今生&#xff0c;这回我们继续说 3.缓冲秘籍&#xff0c;洪流控水 Nginx的缓冲区是其处理数据传输和提高性能的关键设计之一&#xff0c;主要用于暂存和管理进出的数据流&#xff0c;以应对不同组件间速度不匹配的问题…

池化整合多元数据库,zData X 一体机助力证券公司IT基础架构革新

引言 近期&#xff0c;云和恩墨 zData X 多元数据库一体机&#xff08;以下简称 zData X&#xff09;在某证券公司的OA、短信和CRM业务系统中成功上线&#xff0c;标志着其IT基础架构完成从集中式存储向池化高性能分布式存储的转变。zData X 成功整合了该证券公司使用的达梦、O…

Windows php 安装 Memcached扩展、php缺失 Memcached扩展、Class ‘Memcached‘ not found

在Windows系统下如何安装 php Memcached 扩展 下载dll文件 pecl地址&#xff1a;https://pecl.php.net/package/memcached 根据版本进行选择 &#xff1a; 解压下载的文件后得到了这么样的文件结构&#xff1a; 配置 移动dll文件到相应文件位置 重点&#xff1a; libme…

FreeRTOS队列集(1-15)

队列集定义&#xff1a;def 队列集只允许任务间传递消息为同一种数据类型&#xff0c;如果需要在任务间传递不同数据类型的消息时&#xff0c;就可以使用队列集。 用于对多个信号量进行监听&#xff0c;其中不管哪一个消息到来&#xff0c;都可以让任务退出阻塞状态 假设&am…

如何利用MCU自动测量单元提高大坝安全监测效率

大坝作为重要的水利基础设施&#xff0c;其安全性直接关系到人民群众的生命财产安全和社会的稳定发展。因此&#xff0c;对大坝进行实时、准确的安全监测至关重要。近年来&#xff0c;随着微控制器单元(MCU)技术的不断发展&#xff0c;其在大坝安全监测领域的应用也越来越广泛。…

【PCL】教程 supervoxel_clustering执行超体聚类并可视化点云数据及其聚类结果

[done, 417.125 ms : 307200 points] Available dimensions: x y z rgba 源点云milk_cartoon_all_small_clorox.pcd > Loading point cloud... > Extracting supervoxels! Found 423 supervoxels > Getting supervoxel adjacency 这段代码主要是使用PCL&#xff08;Po…

【Linux】创建/扩容swap交换空间swap优化

一、当前交换空间大小 目前交换空间大小为2G 二、创建swap交换空间 #创建大小为2G的交换空间 [roothadoop01 data1]# dd if/dev/zero of/data1/swapfile bs1M count2048 #将文件设置为交换空间 [roothadoop01 data1]# mkswap /data1/swapfile #启用交换空间 [roothadoop01 da…

Java Web 开发 - 掌握拦截器和监听器

目录 深入了解Java Web的拦截器和监听器 拦截器&#xff08;Interceptor&#xff09; 拦截器的使用场景 拦截器实例 思维导图 ​编辑 监听器&#xff08;Listener&#xff09; 监听器的使用场景 监听器类型 监听器实例 思维导图​编辑 总结 深入了解Java Web的拦截器…

在UI界面中播放视频_unity基础开发教程

在UI界面中播放视频_unity基础开发教程 前言操作步骤结语 前言 之前我写过一篇在场景中播放视频的文章&#xff0c;但是在开发中有时候也会在UI的界面中播放视频&#xff0c;这期我们做一下在UI的界面中播放视频。 操作步骤 首先在场景中创建一个Raw Image&#xff0c;UI->…

0418EmpTomCat项目 初次使用ajax实现局部动态离职

0418EmpTomCat项目包-CSDN博客 数据库字段&#xff1a; 员工部门表 分页查询&#xff1b; 多条件查询&#xff1b; 添加新员工&#xff1b; ajax点击离职操作效果&#xff1a;

【CTF Web】BUUCTF BUU CODE REVIEW 1 Writeup(代码审计+PHP弱类型漏洞+MD5的0e绕过+反序列化)

BUU CODE REVIEW 1 1 https://github.com/glzjin/buusec_2019_code_review_1 解法 <?php /*** Created by PhpStorm.* User: jinzhao* Date: 2019/10/6* Time: 8:04 PM*/highlight_file(__FILE__);class BUU {public $correct "";public $input ""…