三维坐标点按剖面分类

一、写在前面

①配套文件:根据剖面对三维坐标点(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平面方程中的系数

python 复制代码
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)
    # 归一化法向量并计算d
    d = -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个系数;②待求与平面方程距离的点

输出:点到平面距离

python 复制代码
def point2area_distance(Ax, By, Cz, D,p):
    mod_d = Ax * p[0] + By * p[1] + Cz * p[2] + D
    mod_area = np.sqrt(np.sum(np.square([Ax, By, Cz])))
    d = abs(mod_d) / mod_area
    return d

四、完整代码

python 复制代码
dataSample = pd.read_excel(r"C:\Users\zsllsz2022\Desktop\坐标分类.xlsx")

import numpy as np
 
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)
    # 归一化法向量并计算d
    d = -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
 
def point2area_distance(Ax, By, Cz, D,p):
    mod_d = Ax * p[0] + By * p[1] + Cz * p[2] + D
    mod_area = np.sqrt(np.sum(np.square([Ax, By, Cz])))
    d = abs(mod_d) / mod_area
    return d

pointData = 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)]:  #range21
    p1 = 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
相关推荐
小白学大数据1 小时前
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
爬虫·python·ajax
2401_841495642 小时前
【计算机视觉】基于复杂环境下的车牌识别
人工智能·python·算法·计算机视觉·去噪·车牌识别·字符识别
Adorable老犀牛2 小时前
阿里云-ECS实例信息统计并发送统计报告到企业微信
python·阿里云·云计算·企业微信
倔强青铜三2 小时前
苦练Python第66天:文件操作终极武器!shutil模块完全指南
人工智能·python·面试
倔强青铜三2 小时前
苦练Python第65天:CPU密集型任务救星!多进程multiprocessing模块实战解析,攻破GIL限制!
人工智能·python·面试
Panda__Panda3 小时前
docker项目打包演示项目(数字排序服务)
运维·javascript·python·docker·容器·c#
Lris-KK3 小时前
力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历
python·算法·leetcode
zy_destiny4 小时前
【工业场景】用YOLOv8实现抽烟识别
人工智能·python·算法·yolo·机器学习·计算机视觉·目标跟踪
(●—●)橘子……4 小时前
记力扣2009:使数组连续的最少操作数 练习理解
数据结构·python·算法·leetcode
nueroamazing5 小时前
PPT-EA:PPT自动生成器
vue.js·python·语言模型·flask·大模型·项目·ppt