C++实现Point2D类 有限元基础类

基础类表示的是在有限元计算过程中必要通用的类。

1、Point2D

表示的是二维节点,是组成二维有限元单元的节点。

1.1、public function

1.1.1、构造函数与析构函数

构造函数用来初始化point2D的基本信息,析构函数用来释放内存

Point2D.h声明函数

//***********************构造函数析构函数***********************//
/*
函数名称:		无参构造函数
*/
Point2D();/*
函数名称:		二维节点有参构造函数,初始化节点基本信息,二维杆单元适用
id:				节点ID,作为区分不同节点的唯一标识
x:				节点x坐标
y:				节点y坐标
*/
Point2D(int id, double x, double y);/*
函数名称:		二维节点有参构造函数,初始化节点基本信息,二维梁单元适用
id:				节点ID,作为区分不同节点的唯一标识
x:				节点x坐标
y:				节点y坐标
alphaz:			z方向角度坐标(按照右手定则,转动方向在xy平面)
*/
Point2D(int id, double x, double y, double alphaz);/*
函数名称:		析构函数
*/
~Point2D();

Point2D.cpp函数实现

//***********************构造函数析构函数***********************//
Point2D::Point2D()
{}Point2D::Point2D(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}Point2D::Point2D(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}Point2D::~Point2D()
{}

1.1.2、设置属性函数

用来设置有限元计算中表现在节点上的物理量,比如位置、位移、应力、应变。

Point2D.h声明函数

//*************************设置属性接口*************************//
/*
函数名称:		设置初始化节点基本信息,二维杆单元适用
id:				节点ID,作为区分不同节点的唯一标识
x:				节点x坐标
y:				节点y坐标
*/
void SetPoint(int id, double x, double y);/*
函数名称:		设置初始化节点基本信息,二维梁单元适用
id:				节点ID,作为区分不同节点的唯一标识
x:				节点x坐标
y:				节点y坐标
alphaz:			z方向角度坐标(按照右手定则,转动方向在xy平面)
*/
void SetPoint(int id, double x, double y, double alphaz);/*
函数名称:		设置点x、y坐标
x:				节点x坐标
y:				节点y坐标
*/
void SetCoord(double x, double y);/*
函数名称:		设置点x、y、alphaz坐标
x:				节点x坐标
y:				节点y坐标
alphaz:			z方向角度坐标(按照右手定则,转动方向在xy平面)
*/
void SetCoord(double x, double y, double alphaz);/*
函数名称:		设置节点ID
id:				节点ID,作为区分不同节点的唯一标识
*/
void SetID(int id);/*
函数名称:		设置外载力 x、y方向
fx:				节点x方向力外载
fy:				节点y方向力外载
*/
void SetF(double fx, double fy);/*
函数名称:		设置外载力 x方向
fx:				节点x方向力外载
*/
void SetFx(double fx);/*
函数名称:		设置外载力 y方向
fy:				节点y方向力外载
*/
void SetFy(double fy);/*
函数名称:		设置外载弯矩 z方向
mz:				节点z方向弯矩外载(遵守右手定则)
*/
void SetMz(double mz);/*
函数名称:		设置节点x、y方向位移
u:				节点x方向位移
v:				节点y方向位移
*/
void SetDistance(double u, double v);/*
函数名称:		设置节点x方向线位移
u:				节点x方向位移
*/
void SetU(double u);/*
函数名称:		设置节点y方向线位移
v:				节点y方向位移
*/
void SetV(double v);/*
函数名称:		设置节点z方向转角位移
theatZ:			节点z方向转角位移(遵守右手定则)
*/
void SetTheatZ(double theatZ);/*
函数名称:		设置节点x方向正应力
sigamax:		节点x方向正应力(依附于单元局部坐标系)
*/
void SetSigamaX(double sigamax);/*
函数名称:		设置节点x方向正应变
epsilonx:		节点x方向正应变(依附于单元局部坐标系)
*/
void SetEpsilonX(double epsilonx);

Point2D.cpp函数实现

//*************************设置属性接口*************************//
//设置点 id, xy坐标
void Point2D::SetPoint(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}void Point2D::SetPoint(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}//设置点xy坐标
void Point2D::SetCoord(double x, double y)
{this->m_x = x;this->m_y = y;
}void Point2D::SetCoord(double x, double y, double alphaz)
{this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;
}//设置id
void Point2D::SetID(int id)
{this->ID = id;
}//设置力约束
void Point2D::SetF(double fx, double fy)
{this->m_Fx = fx;this->m_Fy = fy;
}void Point2D::SetFx(double fx)
{this->m_Fx = fx;
}void Point2D::SetFy(double fy)
{this->m_Fy = fy;
}void Point2D::SetMz(double mz)
{this->m_Mz = mz;
}//设置位移约束
void Point2D::SetDistance(double u, double v)
{this->m_u = u;this->m_v = v;
}void Point2D::SetU(double u)
{this->m_u = u;
}void Point2D::SetV(double v)
{this->m_v = v;
}void Point2D::SetTheatZ(double theatZ)
{this->m_theatz = theatZ;
}//设置节点应力
void Point2D::SetSigamaX(double sigamax)
{this->m_SigamaX = sigamax;
}//设置节点应变
void Point2D::SetEpsilonX(double epsilonx)
{this->m_EpsilonX = epsilonx;
}

1.1.3、获取属性函数

用来获取有限元计算中表现在节点上的物理量,比如位置、位移、应力、应变。

Point2D.h声明函数

//*************************获取属性接口*************************//
/*
函数名称:		获取x坐标
*/
double	GetX();/*
函数名称:		获取y坐标
*/
double	GetY();/*
函数名称:		获取alpha坐标
*/
double  GetAlphaZ();/*
函数名称:		获取id
*/
int		GetID();/*
函数名称:		获取x方向受力
*/
double	GetFx();/*
函数名称:		获取y方向受力
*/
double GetFy();/*
函数名称:		获取z方向弯矩
*/
double GetMz();/*
函数名称:		获取x方向位移
*/
double	GetU();/*
函数名称:		获取y方向位移
*/
double GetV();/*
函数名称:		获取z方向转角
*/
double GetTheatZ();/*
函数名称:		获取节点应力
*/
double GetSigamaX();/*
函数名称:		获取节点应变
*/
double GetEpsilonX();

Point2D.cpp函数实现

//获取x坐标
double Point2D::GetX()
{return this->m_x;
}//获取y坐标
double Point2D::GetY()
{return this->m_y;
}//获取alpha坐标
double Point2D::GetAlphaZ()
{return this->m_alphaz;
}//获取id
int Point2D::GetID()
{return this->ID;
}//获取x方向受力
double Point2D::GetFx()
{return this->m_Fx;
}//获取y方向受力
double Point2D::GetFy()
{return this->m_Fy;
}double Point2D::GetMz()
{return this->m_Mz;
}//获取x方向位移
double Point2D::GetU()
{return this->m_u;
}//获取y方向位移
double Point2D::GetV()
{return this->m_v;
}double Point2D::GetTheatZ()
{return this->m_theatz;
}//获取节点应力
double Point2D::GetSigamaX()
{return this->m_SigamaX;
}//获取节点应变
double Point2D::GetEpsilonX()
{return this->m_EpsilonX;
}

1.2、private variable

int		ID;					//节点IDdouble	m_x;				//节点X坐标
double	m_y;				//节点Y坐标
double	m_alphaz;			//节点Z方向转角坐标(初始转角)double	m_u;				//节点X方向位移
double	m_v;				//节点Y方向位移
double	m_theatz;			//节点Z方向转角double	m_Fx;				//节点X方向受力
double	m_Fy;				//节点Y方向受力
double	m_Mz;				//节点Z方向弯矩double	m_SigamaX;			//节点x方向正应力(依附于单元局部坐标系)
double	m_EpsilonX;			//节点x方向正应变(依附于单元局部坐标系)

1.3、全部源码

Point2D.h声明函数

//2d点单元
class Point2D
{
public://***********************构造函数析构函数***********************///*函数名称:		无参构造函数*/Point2D();/*函数名称:		二维节点有参构造函数,初始化节点基本信息,二维杆单元适用id:				节点ID,作为区分不同节点的唯一标识x:				节点x坐标y:				节点y坐标*/Point2D(int id, double x, double y);/*函数名称:		二维节点有参构造函数,初始化节点基本信息,二维梁单元适用id:				节点ID,作为区分不同节点的唯一标识x:				节点x坐标y:				节点y坐标alphaz:			z方向角度坐标(按照右手定则,转动方向在xy平面)*/Point2D(int id, double x, double y, double alphaz);/*函数名称:		析构函数*/~Point2D();//*************************设置属性接口*************************///*函数名称:		设置初始化节点基本信息,二维杆单元适用id:				节点ID,作为区分不同节点的唯一标识x:				节点x坐标y:				节点y坐标*/void SetPoint(int id, double x, double y);/*函数名称:		设置初始化节点基本信息,二维梁单元适用id:				节点ID,作为区分不同节点的唯一标识x:				节点x坐标y:				节点y坐标alphaz:			z方向角度坐标(按照右手定则,转动方向在xy平面)*/void SetPoint(int id, double x, double y, double alphaz);/*函数名称:		设置点x、y坐标x:				节点x坐标y:				节点y坐标*/void SetCoord(double x, double y);/*函数名称:		设置点x、y、alphaz坐标x:				节点x坐标y:				节点y坐标alphaz:			z方向角度坐标(按照右手定则,转动方向在xy平面)*/void SetCoord(double x, double y, double alphaz);/*函数名称:		设置节点IDid:				节点ID,作为区分不同节点的唯一标识*/void SetID(int id);/*函数名称:		设置外载力 x、y方向fx:				节点x方向力外载fy:				节点y方向力外载*/void SetF(double fx, double fy);/*函数名称:		设置外载力 x方向fx:				节点x方向力外载*/void SetFx(double fx);/*函数名称:		设置外载力 y方向fy:				节点y方向力外载*/void SetFy(double fy);/*函数名称:		设置外载弯矩 z方向mz:				节点z方向弯矩外载(遵守右手定则)*/void SetMz(double mz);/*函数名称:		设置节点x、y方向位移u:				节点x方向位移v:				节点y方向位移*/void SetDistance(double u, double v);/*函数名称:		设置节点x方向线位移u:				节点x方向位移*/void SetU(double u);/*函数名称:		设置节点y方向线位移v:				节点y方向位移*/void SetV(double v);/*函数名称:		设置节点z方向转角位移theatZ:			节点z方向转角位移(遵守右手定则)*/void SetTheatZ(double theatZ);/*函数名称:		设置节点x方向正应力sigamax:		节点x方向正应力(依附于单元局部坐标系)*/void SetSigamaX(double sigamax);/*函数名称:		设置节点x方向正应变epsilonx:		节点x方向正应变(依附于单元局部坐标系)*/void SetEpsilonX(double epsilonx);//*************************获取属性接口*************************///*函数名称:		获取x坐标*/double	GetX();/*函数名称:		获取y坐标*/double	GetY();/*函数名称:		获取alpha坐标*/double  GetAlphaZ();/*函数名称:		获取id*/int		GetID();/*函数名称:		获取x方向受力*/double	GetFx();/*函数名称:		获取y方向受力*/double GetFy();/*函数名称:		获取z方向弯矩*/double GetMz();/*函数名称:		获取x方向位移*/double	GetU();/*函数名称:		获取y方向位移*/double GetV();/*函数名称:		获取z方向转角*/double GetTheatZ();/*函数名称:		获取节点应力*/double GetSigamaX();/*函数名称:		获取节点应变*/double GetEpsilonX();private:int		ID;					//节点IDdouble	m_x;				//节点X坐标double	m_y;				//节点Y坐标double	m_alphaz;			//节点Z方向转角坐标(初始转角)double	m_u;				//节点X方向位移double	m_v;				//节点Y方向位移double	m_theatz;			//节点Z方向转角double	m_Fx;				//节点X方向受力double	m_Fy;				//节点Y方向受力double	m_Mz;				//节点Z方向弯矩double	m_SigamaX;			//节点x方向正应力(依附于单元局部坐标系)double	m_EpsilonX;			//节点x方向正应变(依附于单元局部坐标系)			
};

Point2D.cpp函数实现

#include "Point.h"//************************************point2D*********************************//
//***********************构造函数析构函数***********************//
Point2D::Point2D()
{}Point2D::Point2D(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}Point2D::Point2D(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}Point2D::~Point2D()
{}//*************************设置属性接口*************************//
//设置点 id, xy坐标
void Point2D::SetPoint(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}void Point2D::SetPoint(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}//设置点xy坐标
void Point2D::SetCoord(double x, double y)
{this->m_x = x;this->m_y = y;
}void Point2D::SetCoord(double x, double y, double alphaz)
{this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;
}//设置id
void Point2D::SetID(int id)
{this->ID = id;
}//设置力约束
void Point2D::SetF(double fx, double fy)
{this->m_Fx = fx;this->m_Fy = fy;
}void Point2D::SetFx(double fx)
{this->m_Fx = fx;
}void Point2D::SetFy(double fy)
{this->m_Fy = fy;
}void Point2D::SetMz(double mz)
{this->m_Mz = mz;
}//设置位移约束
void Point2D::SetDistance(double u, double v)
{this->m_u = u;this->m_v = v;
}void Point2D::SetU(double u)
{this->m_u = u;
}void Point2D::SetV(double v)
{this->m_v = v;
}void Point2D::SetTheatZ(double theatZ)
{this->m_theatz = theatZ;
}//设置节点应力
void Point2D::SetSigamaX(double sigamax)
{this->m_SigamaX = sigamax;
}//设置节点应变
void Point2D::SetEpsilonX(double epsilonx)
{this->m_EpsilonX = epsilonx;
}//获取x坐标
double Point2D::GetX()
{return this->m_x;
}//获取y坐标
double Point2D::GetY()
{return this->m_y;
}//获取alpha坐标
double Point2D::GetAlphaZ()
{return this->m_alphaz;
}//获取id
int Point2D::GetID()
{return this->ID;
}//获取x方向受力
double Point2D::GetFx()
{return this->m_Fx;
}//获取y方向受力
double Point2D::GetFy()
{return this->m_Fy;
}double Point2D::GetMz()
{return this->m_Mz;
}//获取x方向位移
double Point2D::GetU()
{return this->m_u;
}//获取y方向位移
double Point2D::GetV()
{return this->m_v;
}double Point2D::GetTheatZ()
{return this->m_theatz;
}//获取节点应力
double Point2D::GetSigamaX()
{return this->m_SigamaX;
}//获取节点应变
double Point2D::GetEpsilonX()
{return this->m_EpsilonX;
}

写在后面:

Point2D类并没有进行计算,只是对数据做了赋值与传递,但它是有限元最基础的部分,后续的单元组成、网格划分、后处理都需要对节点进行大量操作,所以构建好节点类是十分关键的。

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

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

相关文章

51c自动驾驶~合集48

我自己的原文哦~ https://blog.51cto.com/whaosoft/13133866 #UDMC 考虑轨迹预测的统一决策控制框架 论文:https://arxiv.org/pdf/2501.02530 代码:​​https://github.com/henryhcliu/udmc_carla.git​​ 1. 摘要 当前的自动驾驶系统常常在确…

LeetCode hot 力扣热题100 排序链表

归并忘了 直接抄! class Solution { // 定义一个 Solution 类,包含链表排序的相关方法。// 使用快慢指针找到链表的中间节点,并断开链表为两部分ListNode* middleNode(ListNode* head) { ListNode* slow head; // 慢指针 slow 初始化为链表…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户,包括以下功能: 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

力扣动态规划-5【算法学习day.99】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关…

国内汽车法规政策标准解读:GB 44495-2024《汽车整车信息安全技术要求》

目录 背景 概述 标准适用范围 汽车信息安全管理体系要求(第5章) 信息安全基本要求(第6章) 信息安全技术要求(第7章) ◆ 外部连接安全要求: ◆通信安全要求: ◆软件升级安全…

Apache SeaTunnel 2.3.9 正式发布:多项新特性与优化全面提升数据集成能力

近日,Apache SeaTunnel 社区正式发布了最新版本 2.3.9。本次更新新增了Helm 集群部署、Transform 支持多表、Zeta新API、表结构转换、任务提交队列、分库分表合并、列转多行 等多个功能更新! 作为一款开源、分布式的数据集成平台,本次版本通过…

EasyControl:首个登陆AWS Marketplace的中国MDM先锋

在全球数字化与移动化浪潮中,企业对安全、高效的移动设备管理(MDM)需求日益增长。EasyControl作为国内MDM领域的佼佼者,凭借成熟的技术和创新的解决方案,成为国内首个成功上线亚马逊AWS Marketplace的MDM产品&#xff…

OpenCV简介、OpenCV安装

OpenCV简介、OpenCV安装 本文目录: 零、时光宝盒 一、OpenCV简介 二、OpenCV图像处理基础知识 三、OpenCV-Python环境安装 2.1、纯python环境下安装OpenCV 2.2、Anaconda管理环境下安装 OpenCV 四、如何用OpenCV 中进行读取展示图像 五、OpenCV读取图像、显…

【语言处理和机器学习】概述篇(基础小白入门篇)

前言 自学笔记,分享给语言学/语言教育学方向的,但对语言数据处理感兴趣但是尚未入门,却需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)&#xff…

ARP 表、MAC 表、路由表、跨网段 ARP

文章目录 一、ARP 表1、PC2、路由器 - AR22203、交换机 - S57004、什么样的设备会有 ARP 表? 二、MAC 表什么样的设备会有 MAC 表? 三、路由表什么样的设备会有路由表? 四、抓取跨网段 ARP 包 所谓 “透明” 就是指不用做任何配置 一、ARP 表…

Spring的IoC、Bean、DI的简单实现,难度:※※※

目录 场景描述 第一步:初始化Maven项目 第二步:Maven导入Spring包(给代码) 第三步:创建Spring配置文件 第四步 创建Bean 第五步 简单使用Bean (有代码) 第六步 通过依赖注入使用Bean&…

wireshark工具简介

目录 1 wireshark介绍 2 wireshark抓包流程 2.1 选择网卡 2.2 停止抓包 2.3 保存数据 3 wireshark过滤器设置 3.1 显示过滤器的设置 3.2 抓包过滤器 4 wireshark的封包列表与封包详情 4.1 封包列表 4.2 封包详情 参考文献 1 wireshark介绍 wireshark是非常流行的网络…

C# OpenCvSharp 部署文档矫正,包括文档扭曲/模糊/阴影等情况

目录 说明 效果 模型 项目 代码 下载 参考 C# OpenCvSharp 部署文档矫正,包括文档扭曲/模糊/阴影等情况 说明 地址:https://github.com/RapidAI/RapidUnDistort 修正文档扭曲/模糊/阴影等情况,使用onnx模型简单轻量部署&#xff0c…

编辑器Vim基本模式和指令 --【Linux基础开发工具】

文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…

LeetCode 110.平衡二叉树

题目描述 给定一个二叉树,判断它是否是平衡二叉树。 示例 1: 示例 2: 输入:root [1,2,2,3,3,null,null,4,4] 输出:false 示例 3: 输入:root [] 输出:true 提示: …

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的…

Express中间件

目录 Express中间件 中间件的概念 next函数 全局中间与局部中间件 多个中间件 中间的5个注意事项 中间的分类 应用级中间件 路由级中间件 错误级中间件 Express内置中间件 express.json express.urlencoded 第三方中间件​编辑 自定义中间件 Express中间件 中间…

Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽

大家读完记得觉得有帮助记得关注和点赞!!! 此分享内容比较专业,很多与硬件和通讯规则及队列,比较底层需要有技术功底人员深入解读。 Linux 的带宽管理能力 足以媲美许多高端、专用的带宽管理系统。 1 队列&#xff0…

要获取本地的公网 IP 地址(curl ifconfig.me)

文章目录 通过命令行查询(适用于 Linux/Mac/Windows)Linux/MacWindows 注意事项 要获取本地的公网 IP 地址,可以通过以下简单的方法: 通过命令行查询(适用于 Linux/Mac/Windows) Linux/Mac 打开终端。输入…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(七)

文章目录 一、题库管理模块实现1、新增题目功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、题目列表功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询题目列表接口实现2.3.2 后端编辑试题接口实现2.4 效果展示二、代码下载一、题库管…