首页/文章/ 详情

有限元 | 图形的平移有一点复杂

6月前浏览390

有限元分析后处理涉及计算机图形学,以二维梁单元为例,其变形和内力是基于杆的位置    的函数    ,由一系列的离散点组成矩阵

 

绘制平面刚架的变形图和内力图的过程是:以划分的单元为基础逐个完成。在画某一单元的变形或内力图时,通常是以该单元起点为总体坐标系的坐标原点,杆轴沿着总体坐标系的    轴正方向,杆轴上的离散点便是矩阵A的第一行,离散点对应的函数值    便是矩阵A的第二行。

▲图1

矩阵A要通过缩放、旋转、平移操作,使之回到对应的位置上去,即图形与局部坐标一致。对于图1中的单元1,则需要作旋转操作(RA),而单元2则需要作平移操作(TA)。缩放操作则根据图形是否协调适当考虑。

定义缩放矩阵

 

旋转矩阵

 
import matplotlib.pyplot as plt
import numpy as np


def main():
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']    # 这个字体能够支持中英文字符
    plt.rcParams['axes.unicode_minus'] = False      # 正常显示负号


    # 平面刚架
    x = [036]
    y = [044]

    xx = np.linspace(0510)      # 梁划分为10个小段
    # 每一个离散点的弯矩值
    m = [0.0,-0.395-0.690-0.887-0.985,-0.985,-0.887-0.690-0.395-0.0]

    # 旋转矩阵
    R = np.array([[0.6-0.8],[0.80.6]])

    # 旋转变换
    Rxy = R @ np.vstack( (xx,m) )
    
    # 绘制刚架图
    fig, (ax0,ax1) = plt.subplots(nrows=1, ncols=2, sharex=True,
                                    figsize=(84))
    # 绘制刚架图
    ax0.plot(x, y)

    # 绘制单元1未旋转时的弯矩图
    ax0.plot(xx,m)
    ax0.set( title='旋转前的弯矩图')

    # 绘制单元1旋转后的弯矩图
    ax1.plot(x, y)
    ax1.plot(Rxy[0,:], Rxy[1,:])
    ax1.set( title='旋转后的弯矩图')

    fig.savefig("z1.png",dpi=300)
    plt.show()

if __name__ == "__main__":
    main()

▲图2

对于平移来说,按照上述思路,定义平移矩阵

 

却达不到预期效果。比如将一个点    往右平移2,往上平移2,得到新的位置    ,但是,通过平移矩阵计算

 

也就是说,仅凭一个    矩阵是做不到的。

▲图3a

▲图3b

▲图3c

如图3a所示,将平面矩形增加一个维度,成为长方体。这个长方体发生剪切变形,如图3b所示。这个过程在数学上称为剪切变换,所用到的矩阵称为剪切矩阵。然后将三维图形投影到二维平面,即实现了原图像的平移,如图3c所示

因此,需要扩充A矩阵,即增加一行

 

则二维图形的平移矩阵

 

经过矩阵乘法运算    后,再去掉    的第三行,即平移后的图形。这里第三行无实际意义,仅作为辅助计算。

import matplotlib.pyplot as plt
import numpy as np


def main():
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']    # 这个字体能够支持中英文字符
    plt.rcParams['axes.unicode_minus'] = False      # 正常显示负号


    # 平面刚架
    x = [036]
    y = [044]

    xx = np.linspace(0310)      # 梁划分为10个小段
    # 每一个离散点的弯矩值
    m = [0.0,-0.395-0.690-0.887-0.985,-0.985,-0.887-0.690-0.395-0.0]

    
    ones = np.ones(10)
    # 矩阵A增加维度,即第三行全为1
    A = np.vstack( (xx,m, ones) )
    # 平移矩阵
    T = np.array([[10,3],[014], [0,0,1] ])

    # 平移变换
    Txy = T @ A
    
    # 绘制刚架图
    fig, (ax0,ax1) = plt.subplots(nrows=1, ncols=2, sharex=True,
                                    figsize=(84))
    # 绘制刚架图
    ax0.plot(x, y)

    # 绘制单元2未平移时的弯矩图
    ax0.plot(xx,m)
    ax0.set( title='平移前的弯矩图')

    # 绘制单元2平移后的弯矩图
    ax1.plot(x, y)
    ax1.plot(Txy[0,:], Txy[1,:])
    ax1.set( title='平移后的弯矩图')

    fig.savefig("z2.png",dpi=300)
    plt.show()


if __name__ == "__main__":
    main()

▲图4

为了方便编程,将三种矩阵统一定义成    形式。

缩放矩阵

 

旋转矩阵

 

如果是三维图形,则需要将三种矩阵统一定义成    形式。


来源:数值分析与有限元编程
UM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-02-05
最近编辑:6月前
太白金星
本科 慢慢来
获赞 14粉丝 32文章 397课程 0
点赞
收藏
作者推荐

文献 | 桥梁检测中的无人机检测系统应用浅析

DOI:10.13616/j.cnki.gcjsysj.2025.10.234阐述了桥梁检测的重要性,对无人机检测系统进行技术分析,包括无人机三维建模技术和电磁频谱发射源定位技术,从检测流程的制定、无人机路径规划、拍摄图像的预处理3方面研究了桥梁检测中无人机检测系统的实际应用。来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈