python一对一辅导教程:PyGeM Tutorials 解析 1

PyGEM、Gempy、PyGeo、GeoPy和PVGeo:一文解析VTK 在Python生态系统中,有几个流行的库和工具,可以与VTK集成,提供更方便的接口和功能。PVGeo是一个专注于地球科学领域的Python库,提供了许多用于处理和可视化地球科学数据的工具和算法。它建立在VTK和ParaView的基础上,并提供了一种更高级的接口,使用户能够更轻松地处理地球科学数据,并使用VTK进行可视化。它提供了一组功能强大的工具,用于创建和操作几何体,进行几何变换,以及进行几何分析和计算。请注意,以上仅是对这几个库的简要介绍,它们各自具有更多的功能和用途。 阅读详情

作者自我介绍:大爽歌, b站小UP主 ,直播编程+红警三 ,python1对1辅导老师 。
本博客为一对一辅导学生python代码的教案, 获得学生允许公开。
目前具体辅导内容为PyGeM

本文为PyGeM tutorial-1-ffd 的讲解与分析
Tutorial 1 shows how to apply the free-form deformation to mesh nodes.

0 准备工作

准备软件

必须安装

  1. python 3.8或以上版本
    https://www.python.org/downloads/
  2. conda
    conda 又分为 Anaconda 和 Miniconda
    电脑性能足够好,推荐安装 Anaconda (这个是一个很大的软件)
    性能一般或者不想安装太多太大的东西,可以尝试安装 Miniconda
    Anaconda: https://www.anaconda.com/products/individual
    Miniconda: https://docs.conda.io/en/latest/miniconda.html

推荐安装
3. Pycharm
https://blog.youkuaiyun.com/python1639er/article/details/122629870

安装第三方库 pygem

PyGeM 不能直接使用pip来安装,需要按如下步骤来。 (准确来讲,是pip安装的不符合需求,版本太老)

推荐先使用Pycharm建立项目,
再在Pycharm的Terminal中安装。(这个也相当于命令行)
Pycharm 建立项目时 Python Interpreter建议选择如下
请添加图片描述
1选Conda
2根据自己电脑上Conda的位置来选

先安装依赖库

  1. 可以直接pip安装的有
    numpy, scipy, matplotlib, sphinx, pytest
    安装命令如下(命令行中运行)
pip install numpy
pip install scipy
pip install matplotlib
pip install sphinx
pip install pytest

安装不上可能需要使用镜像,
具体推荐阅读:
大爽Python入门教程 8-2 Python 库(Library)、包(Package)、模块(Module) 的第三方库部分。

  1. 手动安装 pythonocc-core
    要使用子模块submodule,则需要安装这个。
    可以使用conda命令来安装
    安装命令如下(命令行中运行)
conda install -c conda-forge pythonocc-core=7.4.0
  1. 手动安装 PyGeM

安装命令如下(命令行中运行)

git clone https://github.com/mathLab/PyGeM

然后将控制台当前路径切换到这个项目的文件夹中去
如果在Pycharm的项目的Terminal 中运行的上面的代码的话,
这时Terminal切换路径的命令为

cd PyGeM

然后输入以下命令即可安装PyGeM

python setup.py install

到这里基本就安装好了

1 开头

首段

原文与翻译

Free Form Deformation on a sphere
球体上的自由形式变形
In this tutorial we will show the typical workflow to perform a deformation on a generic geometry using the free-form deformation method implemented within PyGeM.
在本教程中,我们将展示使用 PyGeM 中实现的自由形式变形(FFD)方法对通用几何图形执行变形的典型工作流程。
A brief theoretical overview of the method is introduced in the pygem.ffd module,
pygem.ffd 模块中介绍了该方法的简要理论概述,
while in the README you can find several references that focus on FFD.
而在README中,您可以找到一些关注 FFD 的参考资料。

First of all, we import the required PyGeM class and we set matplotlib for 3D plots.
首先,我们导入所需的 PyGeM 类,并为 3D 绘图设置 matplotlib。
The version of PyGeM we are using in this tutorial is the 2.0.0.
我们在本教程中使用的 PyGeM 版本是 2.0.0。

导入

原文代码

%matplotlib inline
import numpy as np
import mpl_toolkits.mplot3d
import matplotlib.pyplot as plt

import pygem
print(pygem.__version__)
from pygem import FFD

首行的%matplotlib inline是给 Ipython 编译器用的(可以在网页中做内嵌画图),
常常是Jupyter或colab 的ipynb笔记本会用到。

一般.py文件不需要这个命令,注释或者删掉最好。

大爽Python入门教程 8-1 导入import

import math
print(math.pi)
from math import pi
print(pi)
import math as m
print(m.pi)

2 mesh_points

Then, the other ingredient is the original geometry we want to deform.
然后,另一个成分是我们想要变形的原始几何体。
In this simple tutorial we just span some points around a sphere and morph their coordinates using the FFD class.
在这个简单的教程中,我们只是跨越一个球体周围的一些点,并使用 FFD 类改变它们的坐标。

def mesh_points(num_pts = 2000):
    indices = np.arange(0, num_pts, dtype=float) + 0.5

    phi = np.arccos(1 - 2*indices/num_pts)
    theta = np.pi * (1 + 5**0.5) * indices

    return np.array([np.cos(theta) * np.sin(phi), np.sin(theta) * np.sin(phi), np.cos(phi)]).T

mesh = mesh_points()
plt.figure(figsize=(8,8)).add_subplot(111, projection='3d').scatter(*mesh.T);
plt.show()
phi

numpy.arange(start, stop, dtype = None)
Return evenly spaced values within a given interval.
在给定的间隔内返回均匀间隔的值。

>>> import numpy as np
>>> np.arange(0, 5, dtype=float)
array([0., 1., 2., 3., 4.])
np.arange(0, 5, dtype=float) + 0.5
array([0.5, 1.5, 2.5, 3.5, 4.5])
>>> np.arange(0, 2000, dtype=float) + 0.5
array([5.0000e-01, 1.5000e+00, 2.5000e+00, ..., 1.9975e+03, 1.9985e+03,
       1.9995e+03])

关于e: 大爽Python入门教程 1-2 数与字符串

num_pts取默认值2000
indices = np.arange(0, 2000, dtype=float) + 0.5
得到了 0.5, 1.5, 2.5 一直到 1999.5 构成的数组

indices/num_pts 得到一个 1 分成 num_pts 份的数组
1 - 2* indices/num_pts得到一个[-1, 1]之间分成num_pts 份的数组

np.arccos(1 - 2*indices/num_pts)得到的是 [ 0 , π ] [0, \pi] [0,π]之间的的数构成的数组(此时不是均等分隔的了)
是如图y轴上均等分隔的点对应到曲线上的点的横坐标。

请添加图片描述

phi 对应球坐标系的 ϕ \phi ϕ
具体见后面的椭球公式

theta

np.pi * (1 + 5**0.5) * indices
这个就是 π ∗ ( 1 + 5 ) \pi * (1+ \sqrt 5) π∗(1+5 ​)

这个是用于去得到坐标得,
采用得大概是黄金螺旋线法
详细原理我也不太明白,
这里就不深究了,能用就行。

感兴趣可以去看下这个:
evenly-distributing-n-points-on-a-sphere

return

np.array([np.cos(theta) * np.sin(phi), np.sin(theta) * np.sin(phi), np.cos(phi)])
会得到一个3行num_pts列的

[[ 0.05111927 -0.21801231  0.29980505 -0.19082906  ......  -0.17335079  0.14097948]
 [-0.13147935  0.10756687  0.08727502 -0.31414053  ......  0.17043915 -0.0049786 ]
 [ 0.99        0.97        0.95        0.93        ......  -0.97       -0.99      ]]

加个 .T得到 num_pts行3列的

[[ 0.05111927 -0.13147935  0.99      ]
 [-0.21801231  0.10756687  0.97      ]
 [ 0.29980505  0.08727502  0.95      ]
 [-0.19082906 -0.31414053  0.93      ]
 ......
 [-0.17335079  0.17043915 -0.97      ]
 [ 0.14097948 -0.0049786  -0.99      ]]
椭球公式

椭球

球坐标系,其中 φ \varphi φ是天顶角, θ \theta θ是方位角,则椭球可以表示为以下的参数形式:
x = a sin ⁡ φ cos ⁡ θ ; y = b sin ⁡ φ sin ⁡ θ ; z = c cos ⁡ φ ; 0 ≤ φ ≤ 18 0 ∘ ; 0 ≤ θ ≤ 36 0 ∘ ; x = a \sin \varphi \cos \theta; \\ y = b \sin \varphi \sin \theta;\\ z = c \cos \varphi;\\ 0 \leq \varphi \leq 180 ^\circ ; 0 \leq \theta \leq 360 ^\circ ; \\ x=asinφcosθ;y=bsinφsinθ;z=ccosφ;0≤φ≤180∘;0≤θ≤360∘;

在这里插入图片描述

3 第一张图

原文代码

import numpy as np
import matplotlib.pyplot as plt

def mesh_points(num_pts = 2000):
    indices = np.arange(0, num_pts, dtype=float) + 0.5

    phi = np.arccos(1 - 2*indices/num_pts)
    theta = np.pi * (1 + 5**0.5) * indices

    return np.array([np.cos(theta) * np.sin(phi), np.sin(theta) * np.sin(phi), np.cos(phi)]).T

mesh = mesh_points()
plt.figure(figsize=(8,8)).add_subplot(111, projection='3d').scatter(*mesh.T);
plt.show()

运行效果如图

在这里插入图片描述

这里来详细看下绘图部分代码

plt.figure(figsize=(8,8)).add_subplot(111, projection='3d').scatter(*mesh.T);
plt.show()
figure

plt.figure(figsize=(8,8))
Create a new figure, or activate an existing figure.
figsize 指定 Width, height in inches.

figure可以认为是绘图的窗口。

示例代码

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8))
plt.show()

运行效果如下

在这里插入图片描述

一个空的绘图窗口

subplot

该方法用于在窗口figure里面添加或规划轴线axes的

plt.subplot(*args, **kwargs)
Add an Axes to the current figure or retrieve an existing Axes.
将轴添加到当前图窗或检索现有轴。
This is a wrapper of Figure.add_subplot which provides additional behavior when working with the implicit API (see the notes section).
这是 Figure.add_subplot 的包装器,它在使用隐式 API 时提供额外的行为(请参阅注释部分)。

Call signatures:

subplot(nrows, ncols, index, **kwargs)  # 位置
subplot(pos, **kwargs)  # 位置
subplot(**kwargs)
subplot(ax)

示例: tutorial_101d.py如下

import matplotlib.pyplot as plt

# 按 三行x二列 的布局分割窗口,
# 得到总共六块区域
# 在第1个区域,放下第1个轴线 ax1
# plt.subplot(321)
# 下面的和上面的效果相同,下面的写法更正式
ax1 = plt.subplot(3, 2, 1)

# 在第2个区域,放下第2个轴线 ax2
# 该轴线无边框
ax2 = plt.subplot(322, frameon=False)

# 在第3个区域,放下第3个轴线 ax3
# 该轴线为极坐标轴线
ax3 = plt.subplot(323, projection='polar')

# 在第4个区域,放下第4个轴线 ax4
# 该轴线背景色为红色
ax4 = plt.subplot(325, facecolor='red')

plt.show()

运行效果如下图

在这里插入图片描述

3d

fig.add_subplot(111, projection='3d')

  • 111:在窗口中按一行x一列布局,在第一块区域放置轴线,
  • projection='3d': 一个3d图轴线

实例代码

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection='3d')

plt.show()

运行效果如下图

在这里插入图片描述

3d图的三轴具体如下

在这里插入图片描述

scatter

scatter(xs, ys, zs)
绘制散点图
根据指定的x, y, z 坐标

示例tutorial_101f.py如下

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8))

ax = fig.add_subplot(111, projection='3d')

xs = [i for i in range(10)]
ys = [0 for i in range(10)]
zs = [0 for i in range(10)]

ax.scatter(xs, ys, zs)

plt.show()

运行效果如下

在这里插入图片描述

绘图代码拆解
plt.figure(figsize=(8,8)).add_subplot(111, projection='3d').scatter(*mesh.T);

这一句长代码,拆解成一步一步的话,
等价于如下代码

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection='3d')
xs, ys, zs = mesh.T
ax.scatter(xs, ys, zs)

还可以写成如下形式。

plt.figure(figsize=(8,8))
plt.add_subplot(111, projection='3d')
xs, ys, zs = mesh.T
plt.scatter(xs, ys, zs)
PyGeM:Python几何变形 (Python几何变形)是一个python软件包,可让您使用FFD,RBF和IDW等不同的变形技术来变形给定的几何或网格。 目录 PyGeM最近的作品 作者和贡献者 如何贡献 执照 描述 PyGeM是一个python软件包,使用自由形式变形,径向基函数和反距离权重来参数化和变形复杂的几何形状。 它可以处理以下问题,因此非常适合实际的工业问题: 计算机辅助设计文件(.iges,.step和.stl格式) 网格文件(.unv,Elmer和OpenFOAM格式) 输出文件(.vtk格式) LS-Dyna关键字文件(.k格式) 到目前为止,它已用于具有多达14百万个单元的网格。 尝试使用越来越复杂的输入文件! 请参阅下面的示例部分和教程,以了解此软件包的潜力。 依赖项和安装 PyGeM需要numpy , scipy , matplotlib , sphinx (对于文档)和nose 立即下载

相关推荐

Python库 | gem-v0.1.9.tar.gz

资源分类:Python库 所属语言:Python 资源全名:gem-v0.1.9.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.youkuaiyun.com/article/details/101784059

pygem gempy pygeo geopy pvgeo 都是什么

pygem PyGeM是一个python库,使用自由形式变形、径向基函数和反距离加权来参数化和变形复杂几何体。它非常适合实际的工业问题,因为它允许处理: 计算机辅助设计文件(以.iges、.step和.stl格式) 网格文件(采用.unv、Elmer和OpenFOAM格式) 输出文件(以.vtk格式) LS Dyna关键字文件(.k格式) 到目前为止,它已被用于多达1400万个单元的网格。尝试使用越来越复杂的输入文件!请参阅下面的教程部分,了解该软件包的潜力。 gempy GemPy是用Python生

weixin_44445649的博客 1819

Unity游戏开发客户端面经——网络(初级)

Unity游戏开发客户端面经 之 网络 篇

Sea3752的博客 1万+

【亲测免费】 PyGeM 开源项目安装与使用指南

PyGeM 开源项目安装与使用指南 1. 项目目录结构及介绍 PyGeM项目在GitHub上的仓库遵循清晰的组织结构,便于开发者和用户快速定位所需组件。以下是项目的主要目录结构及其简介: docs: 包含项目文档和手册,使用Sphinx构建,帮助用户理解PyGeM的功能和用法。 pygem: 核心代码库,包含了所有几何变形相关的算法实现。 tests: 测试套件,用于确保代码质量,包含各种测试案...

gitblog_01150的博客 540

EWF写保护功能详解:从安装到实战操作指南

本文详细介绍了EWF写保护功能的安装与实战操作指南。EWF(Enhanced Write Filter)通过重定向写入操作保护硬盘分区,特别适合需要长期稳定运行的系统场景。文章涵盖从安装准备、图形界面操作到命令行高级管理的全流程,并提供了常见问题的解决方案,帮助用户轻松掌握这一实用工具。

weixin_28710999的博客 446

华为鸿蒙系统也能用!5分钟搞定谷歌三件套安装(附最新APK下载链接)

本文为华为鸿蒙系统用户提供了一份详尽的谷歌三件套(Google Play服务、商店及框架)手动安装指南。文章核心在于无需Root,通过ADB命令获取设备信息,并从可靠来源下载匹配版本的APK,按照正确顺序安装,从而解决海外应用依赖问题,实现5分钟快速部署。

c7d8e9的博客 6499

【亲测免费】 PyGeM: 用于几何 morphing 的 Python 包

PyGeM: 用于几何 morphing 的 Python 包 PyGeM 是一个开源的 Python 包,主要使用 Python 编程语言开发。该项目的目的是通过不同的变形技术,如自由形式变形(FFD)、径向基函数(RBF)和反距离加权(IDW),对给定的几何形状或网格进行变形。 核心功能 PyGeM 的核心功能是参数化和 morph 复杂的几何结构。它特别适合解决实际的工业问题,因为它能够处理...

gitblog_00231的博客 462

别再只盯着内存溢出了!从Unity崩溃日志中揪出AssetBundle.LoadAsset_Internal的真凶

本文深入解析Unity崩溃日志中AssetBundle.LoadAsset_Internal错误的真实原因,帮助开发者超越内存溢出的表象,识别文件损坏、热更新陷阱等核心问题。通过日志分析技巧、最佳实践和高级调试方法,提供系统化的解决方案,确保Unity资源加载的稳定性。

weixin_42676824的博客 250

PyGeM网格工具介绍和使用

几何/网格变形:通过参数化方法(如自由形变 FFD、径向基函数 RBF、样条等)对已有网格进行变形。支持多种变形方法:基于控制点的自由形变,适合全局或局部几何控制。:基于插值的变形方法,适用于复杂边界变形。:反距离加权插值。与主流仿真软件兼容:可读写多种网格格式(如 STL、OpenFOAM、SU2、Nastran、VTK 等)。轻量级、纯 Python 实现:易于集成到自动化流程中。

weixin_42849849的博客 867

从零搭建高通8255车载开发环境:QNX SDP、SDK配置与镜像编译全流程

本文详细介绍了如何从零搭建高通SA8255P车载开发环境,涵盖QNX SDP部署、SDK工具链配置到多系统镜像编译的全流程。特别针对SAIL安全岛镜像构建、QNX系统优化及Android系统资源分配等关键技术点提供实战指导,帮助开发团队高效完成车载系统开发与调试。

weixin_33582311的博客 364

告别Modern Standby噩梦:Win11睡眠断网冻结的根源剖析与S3睡眠回归实战

本文深入剖析了Windows 11中Modern Standby(现代待机)模式导致睡眠后断网、系统冻结等问题的根源,指出其与硬件驱动、后台活动的兼容性矛盾。文章提供了通过修改注册表键值强制系统回归稳定S3睡眠状态的详细实战步骤,帮助用户彻底解决睡眠故障,实现可靠的远程访问与挂机任务。

weixin_29210727的博客 606

PyGeM 开源项目常见问题解决方案

PyGeM 开源项目常见问题解决方案 1. 项目基础介绍和主要编程语言 PyGeM(Python Geometrical Morphing)是一个Python包,它允许用户使用不同的变形技术(如自由形式变形(FFD)、径向基函数(RBF)和反距离加权(IDW))对给定的几何体或网格进行变形。该项目非常适合解决实际的工业问题,因为它可以处理计算机辅助设计文件(如iges、step和stl格式)、网格...

gitblog_01111的博客 683

Ubuntu18.04下Carla安装——经验史

Ubuntu下的Carla安装

m0_51267207的博客 2679

用Python的PyGem库5分钟搞定3D模型捏脸:RBF变形实战与半径参数调优

本文详细介绍了如何使用Python的PyGem库通过径向基函数(RBF)技术快速实现3D模型捏脸,包括基础操作、半径参数调优和多控制点协同变形等实战技巧。通过PyGem的RBF变形功能,开发者可以高效调整3D面部特征,适用于游戏开发和数字人创作,大幅提升工作效率。

weixin_26824299的博客 205

国产上位机软件突围:适配统信UOS/麒麟OS的跨平台开发技术与实践(2026年信创实战指南)

(航天科技集团CTO):“在信创战场上,1ms的延迟意味着1个卫星的控制失效。2026年,C#/.NET MAUI不是选择,而是我们守护卫星的‘生命线’。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 412

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

FFD(Free-Form Deformation)自由变形

FFD(Free-Form Deformation)自由变形                       Deformation)自由变形" title="FFD(Free-Form Deformation)自由变形" style="margin:0px; padding:0px; border:0px; list-style:none"> 图1 一、简介      

qq_31785865的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

人脸矫正工程实现

Face Landmark [1]. mtcnn-pytorch|Joint Face Detection and Alignment usingMulti-task Cascaded Convolutional Networks[2016] [2]. mtcnn-blog:https://blog.youkuaiyun.com/On_theway10/article/details/1026...

On_theway10的博客 946

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【6PACK代码注解】测试过程数据处理eval_dataset_nocs.py

6PACK代码注解

weixin_44695308的博客 861

PCL写的区域生长点云分割算法——CC插件

基于CC写的插件,利用PCL中算法实现: void qLxPluginPCL::doRegionGrowing() { assert(m_app); if (!m_app) return; const ccHObject::Container& selectedEntities = m_app->getSelectedEntities(); size_t selN...

asiya的博客 1037

pythonocc安装 (anaconda)

搜索最新版的pythonocc,找到安装命令行。——安装pythoocc最新版。

m0_47014884的博客 3157

【免费下载】 PythonOCC-Core 安装和配置指南

### 项目基础介绍 PythonOCC-Core 是一个用于 3D 几何 CAD/BIM/CAM 的 Python 包。它提供了 3D 建模和数据交换功能,旨在为 CAD/PDM/PLM 和 BIM 相关的开发提供支持。PythonOCC-Core 基于 OpenCascade Technology 建模内核,允许开发者通过 Python 访问几乎所有 OpenCascade 的 C++ 类。 ...

gitblog_09321的博客 1万+

使用conda环境安装pythonocc-core

pythonocc安装验证

youlinhuanyan的博客 2879

第一章:pythonocc7.4.1安装及开发环境搭建

pythonocc的安装需要使用anaconda或者miniconda。这两个都受限与版权和开源协议,假如后期要对产品进行商业化会有一定的困扰。所以我个人建议使用BSD协议的minigorge,也是基于conda的软件包安装管理软件。体积比anaconda小,但是功能是一模一样。 1.先从github下载miniforge:https://github.com/conda-forge/miniforge 2.选择合适的操作系统: 3.进行安装: (所有选项均为默认) 备注:修改自己要安装的目录

loujiand的博客 1万+

PythonOCC 安装方法

如题

qq_26545507的博客 3210

探索Python的宝石库:Python Gems

探索Python的宝石库:Python Gems 去发现同类优质开源项目:https://gitcode.com/ 在这个充满创新和无限可能的编程世界里,有一份宝藏等待着您的发掘——那就是Python Gems。这是一个精心策划的Python脚本集合,每一个脚本都是为了解决特定问题或提供独特功能而诞生的。无论您是初涉Python的新手,还是经验丰富的开发者,这个项目都将为您带来启发和实用的价值。 ...

gitblog_00042的博客 402

pythonocc的安装

https://pythonocc.wordpress.com/2013/03/04/installing-on-ubuntu-12-04/ 官方教程 https://github.com/tpaviot/oce/blob/master/BUILD.Unix.md https://github.com/tpaviot/pythonocc-core/blob/master/INSTALL.md ...

a1099313374的博客 4068
上一篇: 大爽Python入门教程 0-4 安装Pycharm
下一篇: React 入门实例 学习笔记 目录
大爽歌
博客等级 码龄9年 422粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值