使用Python计算二维截面的惯性矩和面积,中间带洞的截面也可计算,代码

因为最近到土木行业了,所以要计算二维截面的惯性矩和面积,用迈达斯太low了,所以想自己写python代码计算。

前言

主要思路是三角网划分,然后计算每个小三角的惯性矩和面积,求和得到最终截面的惯性矩和面积。
python中可用于三角划分的库有scipy.spatial.Delaunay,pytriangle,triangle,gmsh,pygmsh,shapely等,所有的通过尝试后,建议直接使用triangle,不要再用其他的了,其他的属实不行。这个库的链接以及示例代码和库函数api的链接如下:

https://rufat.be/triangle/examples.html
https://rufat.be/triangle/API.html

代码部分

下面就是最关注的代码部分:

import triangle as tr
import numpy as np
import matplotlib.pyplot as pltdef 面积和惯性矩(a, b):inertia_sum = 0areas = 0for i in range(len(b)):idx1, idx2, idx3 = b[i]point1, point2, point3 = a[idx1], a[idx2], a[idx3]x1, y1 = point1x2, y2 = point2x3, y3 = point3area = 0.5 * abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)))inertia = (area * (x1**2 + x2**2 + x3**2 + x1*x2 + x2*x3 + x1*x3 + y1**2 + y2**2 + y3**2 + y1*y2 + y2*y3 + y1*y3)) / 6areas += areainertia_sum += inertiareturn areas,inertia_sumdef 分割截止线(matrix):num_edges = len(matrix)index_matrix = np.zeros((num_edges, 2), dtype=int)for i in range(num_edges):index_matrix[i] = [i, (i + 1) % num_edges]return index_matrix
# 下面的matrix代表的是二维矩阵,里面包含组成截面的所有顶点坐标,下面matrix1是一个示例
matrix1 = [[6390.000, -1036.050], [6390.000, -1696.033], [3382.499, -3700.000], [2795.000, -3700.000], [2495.000, -3400.000], [2495.000, -961.090], [3398.119, -678.052], [5495.699, -720.004]]
matrix = np.array(matrix1, dtype=float)
A= dict(vertices=matrix)
B= tr.triangulate(A,'a100000qlen',)
area, inertia = 面积和惯性矩(B['vertices'], B['triangles'])
print(area,inertia)
tr.compare(plt, A, B)
plt.show()

除了返回的面积和惯性矩,画出来的图应该是这样的:
在这里插入图片描述

左边图片是顶点位置可视化,右边是划分的三角形。
带洞的话就加个hole和segments两个参数,就可以了,具体可以私信我。

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

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

相关文章

Ubuntu 常用命令之 chown 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 chown 命令在 Ubuntu 系统中用于改变文件或目录的所有者和组。这个命令的基本格式是 chown [选项]... [所有者][:[组]] 文件...。 chown 命令的主要参数有 -c 或 --changes:类似 verbose,但只在发生改变时…

解决xcode 运行不老iPhone 15 iOS 17.1 设备的问题

问题 最近要查看一下ios 17.1的设备的性能,但是当前版本的Xcode运行不了 解决方法 1、更新Xcode版本到15.1以上 2、更新完成后,大概率出现这个情况 原因:在app Store中更新到Xcode15后,运行不了模拟器和真机.需要下载iOS 17对应的模拟器.&…

Linux基本内容学习

Linux 命令 文件命令 命令释义语法格式lslist,用于显示目录中文件及其属性信息ls [参数名] [文件名]cdchange directory,用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前…

前端案例—antdDesign的Select多选框组件加上全选功能

前端案例—antdDesign的Select多选框组件加上全选功能。 实现效果如下: Select 组件里有这个属性,可以利用这个对下拉菜单进行自定义。 const handleChange (e, value) > {setSelectState(e.target.checked)let arr productOptions?productOption…

HarmonyOS应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志,难以识别其中的关键信息。因此,应用开发者需要一种数据打点机制,用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

【JavaWeb学习笔记】14 - 三大组件其二 Listener Filter

API文档JAVA_EE_api_中英文对照版 Listener 一、监听器Listener 1. Listener监听器它是JavaWeb的三大组件之一。 JavaWeb的三大组件分别是: Servlet程序、Listener监听器、Filter过滤器 2. Listener是JavaEE的规范,就是接口 3.监听器的作用是,监听某…

稳定币分析的 3 个关键指标

作者:lesleyfootprint.network 数据源:The Stablecoin Dashboard 稳定币因其固有特性而在加密货币领域中独树一帜,它们的特点是价格与特定的参考资产(通常是美元或欧元等法定货币)锚定。这种锚定机制的目的是缓解数字…

Pytorch常用的函数(五)np.meshgrid()和torch.meshgrid()函数解析

Pytorch常用的函数(五)np.meshgrid()和torch.meshgrid()函数解析 我们知道torch.meshgrid()函数的功能是生成网格,可以用于生成坐标; 在numpy中也有一样的函数np.meshgrid(),但是用法不太一样,我们直接上代码进行解释。 1、两者…

nuxt3快速上手

1.安装&#xff1a; npx nuxi init project-name # project-name 是项目名,如果下载不下来请挂梯子。2.安装依赖&#xff1a; npm install3.运行项目&#xff1a; npm run dev4.代码解释&#xff1a; <template><!-- app.vue 是所有页面的入口&#xff1a; --&g…

力扣题目学习笔记(OC + Swift)19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 此题目为链表题&#xff0c;拿出我们的杀手锏&#xff0c;链表解题经典三把斧&#xff1a; 哑巴节点栈快慢指针 关于内存问题&#xff1a;由于Swift及…

选择移动订货系统源码的四大原因

移动订货系统需要选择源码支持的厂家&#xff0c;有以下四个原因&#xff0c;其中第四个是比较重要的&#xff0c;大家点个关注点个赞&#xff0c;我们接着往下看。 1.可自行定制&#xff1a;支持源码的移动订货系统可以根据企业的具体需求进行定制开发&#xff0c;满足企业特定…

pyqt5实现wget下载视频文件的进度条显示

简介&#xff1a; 最近在写一个项目&#xff0c;用到了wget下载视频&#xff0c;为了更好的视觉效果&#xff0c;所以使用pyqt5中QProgressBar来实现下载进度条。当视频开始下载就会弹出下载进度条&#xff0c;下载完成后进度条消失。效果如下图; 具体代码实现 &#xff1a; …