三维坐标点按剖面分类

2024-05-03 05:44
文章标签 分类 坐标 三维 剖面

本文主要是介绍三维坐标点按剖面分类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、写在前面

①配套文件:根据剖面对三维坐标点(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.chinasem.cn/article/955948

相关文章

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

用Pytho解决分类问题_DBSCAN聚类算法模板

一:DBSCAN聚类算法的介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,DBSCAN算法的核心思想是将具有足够高密度的区域划分为簇,并能够在具有噪声的空间数据库中发现任意形状的簇。 DBSCAN算法的主要特点包括: 1. 基于密度的聚类:DBSCAN算法通过识别被低密

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用以下哪种方法? 易错14.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。