IGA_PLSM3D的理解1

news/2024/4/28 22:12:43/文章来源:https://blog.csdn.net/mw_1422102031/article/details/130093029

文章目录

  • 前言
  • 一、IgaTop3D_FAST.m给的参数
  • 二、Material properties 材料特性
    • 对Geom_Mod3D的理解
    • 对Pre_IGA3D的理解
      • 输出1-----CtrPts:
      • 输出2-----Ele:
      • 输出3-----GauPts:


前言

只是为方便学习,不做其他用途

一、IgaTop3D_FAST.m给的参数

%老师给的初始参数:IgaTop3D_FAST(32,8,16,[1 1 1],[32 8 16], 1,0.3,1.2);
clear;
% clc;
L = 32;
W = 8;
H = 16;
Order = [1 1 1]; 
Num = [32 8 16];
BoundCon = 1;
Vmax = 0.3;
rmin = 1.2;

二、Material properties 材料特性

path = genpath(pwd);  %系统自带函数 :PWD显示当前工作目录
addpath(path); 
E0 = 1; Emin = 1e-3; nu = 0.3; 
DH=E0*(1-nu)/(1+nu)/(1-2*nu)*...[1 nu/(1-nu) nu/(1-nu) 0 0 0;nu/(1-nu) 1 nu/(1-nu) 0 0 0; nu/(1-nu) nu/(1-nu) 1 0 0 0;0 0 0 (1-2*nu)/2/(1-nu) 0 0;0 0 0 0 (1-2*nu)/2/(1-nu) 0;0 0 0 0 0 (1-2*nu)/2/(1-nu)];
NURBS = Geom_Mod3D(L, W, H, Order, Num, BoundCon); close all

在这里插入图片描述
path =

D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\Results;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\nurbs1.3.13;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\nurbs1.3.13\inst;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\nurbs-1.3.13\src;

对Geom_Mod3D的理解

function NURBS = Geom_Mod3D(L, W, H, Order, Num, BoundCon)
switch BoundConcase {1, 2, 3}knots{1} = [0 0 1 1]; knots{2} = [0 0 1 1]; knots{3} = [0 0 1 1];ControlPts(:,:,1,1) = [0 L; 0 0; 0 0; 1 1]; % 下边界:[控制点的X坐标排序;控制点Y坐标排序;控制点Z坐标排序;加权参数坐标排序]ControlPts(:,:,2,1) = [0 L; W W; 0 0; 1 1]; % 上边界:。。。。。ControlPts(:,:,1,2) = [0 L; 0 0; H H; 1 1];ControlPts(:,:,2,2) = [0 L; W W; H H; 1 1];case 4knots{1} = [0 0 0.5 1 1]; knots{2} = [0 0 1 1];ControlPts(:,:,1) = [0 0 L; L 0 0; 0 0 0; 1 1 1];ControlPts(:,:,2) = [W W L; L W W; 0 0 0; 1 1 1];case 5W = W/2;knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 1 1];ControlPts(:,:,1) = [0 W W; W W 0; 0 0 0; 1 sqrt(2)/2 1]; % 内边界:[控制点1的x,y,z方向坐标;控制点2的xyz坐标,控制点3的xyz坐标]ControlPts(:,:,2) = [0 L L; L L 0; 0 0 0; 1 sqrt(2)/2 1]; % 外边界:。。。。。。。。。。。。。。。
end
coefs = zeros(size(ControlPts));
coefs(1,:,:,:) = ControlPts(1,:,:,:).*ControlPts(4,:,:,:);
coefs(2,:,:,:) = ControlPts(2,:,:,:).*ControlPts(4,:,:,:);
coefs(3,:,:,:) = ControlPts(3,:,:,:).*ControlPts(4,:,:,:);
coefs(4,:,:,:) = ControlPts(4,:,:,:);
NURBS = nrbmak(coefs, knots); % 构造NURBS数据结构
NURBS = nrbdegelev(NURBS,Order); % 升阶
nrbplot(NURBS,[Num(1)-1 Num(2)-1 Num(3)-1]); %  ,'light','on') % 绘制设计域几何
iknot_u = linspace(0,1,Num(1)); iknot_v = linspace(0,1,Num(2)); iknot_w = linspace(0,1,Num(3));
NURBS = nrbkntins(NURBS,{setdiff(iknot_u,NURBS.knots{1}),setdiff(iknot_v,NURBS.knots{2}),setdiff(iknot_w,NURBS.knots{3})}); % 插入knots
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行完Geom_Mod3D函数后得到一个NURBS体:

在这里插入图片描述

对Pre_IGA3D的理解

function [CtrPts, Ele, GauPts] = Pre_IGA3D(NURBS)
%% 注释
%{目标:生成NURBS实体
------------------------------------------------------------------------------------------------------------------------Input:NURBS   ----------  初步生成的NURBS实体Output:CtrPts   ----------  NURBS实体的控制点信息Ele      ----------  NURBS实体的单元信息GauPts   ----------  NURBS实体对应的参数空间中高斯点的信息
------------------------------------------------------------------------------------------------------------------------------注:以IgaTop3D_FAST(32,8,16,[1 1 1],[6 4 3], 1,0.3,1.2);为例CtrPts结构体:CtrPts.Cordis ----------      控制点坐标  4*140CtrPts.Num    ----------      控制点总数  140      CtrPts.NumU   ----------      U方向控制点个数 7              CtrPts.NumV   ----------      V方向控制点个数 5               CtrPts.Seque  ----------      三个方向控制点对应生成的序列  7*5*4  Ele结构体:CtrPts.NumU/V/W  ----------   分别表示三个方向的区间个数(单元个数)Ele.Num          ----------   单元总数Ele.KnotsU/V/W   ----------   分别表示三个方向去掉重节点的节点向量Ele.CtrPtsNum    ----------   单元上的控制点个数Ele.CtrPtsCon    ----------   单元信息---每个单元包含的全局节点编号GauPts结构体:GauPts.Weigh     ----------  一个单元(3D)上27个控制点在 标准区间[-1,1] 上的高斯权重GauPts.QuaPts    ----------  一个单元(3D)上27个控制点在 标准区间[-1,1] 上的高斯点GauPts.Num       ----------  单元个数*高斯点个数 30*27=810GauPts.Seque     ----------  将GauPts.Num排序---没有理解GauPts.CorU/V/W  ----------  标准高斯单元[-1,1]变换到单元对应的参数域对应生成的高斯点              ------------------------------------------------------------------------------------------------------------------------------ 孟伟, 大连理工大学- 1475207248@qq.com / mw21933005@mail.dlut.edu.cn
------------------------------------------------------------------------------------------------------------------------------
%}
%% 将节点向量的重节点去掉
Knots.U = unique(NURBS.knots{1})';%unique() 将重节点保留一个
Knots.V = unique(NURBS.knots{2})';
Knots.W = unique(NURBS.knots{3})';
%% 控制点的信息,包括 笛卡尔坐标、坐标个数、对应生成的序列
CtrPts.Cordis = NURBS.coefs(:,:);%将NURBS的控制点转化成一个4*140行的向量
CtrPts.Cordis(1,:) = CtrPts.Cordis(1,:)./CtrPts.Cordis(4,:);   % 控制点的 X 笛卡尔坐标;
CtrPts.Cordis(2,:) = CtrPts.Cordis(2,:)./CtrPts.Cordis(4,:);   % 控制点的 Y 笛卡尔坐标;
CtrPts.Cordis(3,:) = CtrPts.Cordis(3,:)./CtrPts.Cordis(4,:);   % 控制点的 Z 笛卡尔坐标;
CtrPts.Num = prod(NURBS.number);                               % 控制点或基函数的总数
CtrPts.NumU = NURBS.number(1);                                 % U方向的控制点或基函数的总数
CtrPts.NumV = NURBS.number(2);                                 % V方向的控制点或基函数的总数
CtrPts.NumW = NURBS.number(3);
CtrPts.Seque = reshape(1:CtrPts.Num,CtrPts.NumU,CtrPts.NumV,CtrPts.NumW);
%% 参数空间中单元(节点区间)的信息,包括单元个数、单元对应生成的序列
Ele.NumU = numel(unique(NURBS.knots{1}))-1;                    % 第一参数(U)方向的单元个数
Ele.NumV = numel(unique(NURBS.knots{2}))-1;                    % 第二参数(V)方向的单元个数
Ele.NumW = numel(unique(NURBS.knots{3}))-1;
Ele.Num = Ele.NumU*Ele.NumV*Ele.NumW;                          % 单元总数
Ele.Seque = reshape(1:Ele.Num, Ele.NumU, Ele.NumV, Ele.NumW);
Ele.KnotsU = [Knots.U(1:end-1) Knots.U(2:end)];                % 元素在第一参数方向上的唯一节点---不太理解为什么这样分
Ele.KnotsV = [Knots.V(1:end-1) Knots.V(2:end)];                % 元素在第二参数方向上的唯一节点---不过会在划分单元信息的时候用到
Ele.KnotsW = [Knots.W(1:end-1) Knots.W(2:end)];
Ele.CtrPtsNum = prod(NURBS.order);
Ele.CtrPtsNumU = NURBS.order(1); Ele.CtrPtsNumV = NURBS.order(2); Ele.CtrPtsNumW = NURBS.order(3);
[~, Ele.CtrPtsCon] = nrbbasisfun({(sum(Ele.KnotsU,2)./2)', (sum(Ele.KnotsV,2)./2)', (sum(Ele.KnotsW,2)./2)'}, NURBS);
% Ele.CtrPtsCon: 单元信息---每个单元包含的全局节点编号
% [B, id] = nrbbasisfun (points, nrb) ----自己感觉 id表示控制点的全局编号  具体原理不理解
%% 参数空间中高斯正交点的信息
[GauPts.Weigh, GauPts.QuaPts] = Guadrature3D(3, numel(NURBS.order));
%[GauPts.Weigh, GauPts.QuaPts]:  一个单元(3D)上27个控制点的  标准区间[-1,1] 上的高斯权重和高斯点
Ele.GauPtsNum = numel(GauPts.Weigh);  %高斯点个数   numel(A):表示A中矩阵元素总数   A的行数 * A的列数
GauPts.Num = Ele.Num*Ele.GauPtsNum;
GauPts.Seque = reshape(1:GauPts.Num,Ele.GauPtsNum,Ele.Num)';
GauPts.CorU = zeros(Ele.Num,Ele.GauPtsNum); % GauPts.CorU矩阵大小: 单元数*高斯点个数
GauPts.CorV = zeros(Ele.Num,Ele.GauPtsNum); % 第i行,表示 变换到单元对应的参数域   对应生成的高斯点
GauPts.CorW = zeros(Ele.Num,Ele.GauPtsNum);
for ide = 1:Ele.Num  % ide:第ide个单元idw = ceil(ide/Ele.NumU/Ele.NumV);idv = ceil((ide - (idw-1)*Ele.NumU*Ele.NumV)/Ele.NumU);idu = ide - (idw-1)*Ele.NumU*Ele.NumV - (idv-1)*Ele.NumU;
%     [idv, idu] = find(Ele.Seque == ide);                       % The two idices in two parametric directions for an elementEle_Knot_U = Ele.KnotsU(idu,:);                            % The knot span in the first parametric direction for an elementEle_Knot_V = Ele.KnotsV(idv,:);                            % The knot span in the second parametric direction for an elementEle_Knot_W = Ele.KnotsW(idw,:);for i = 1:Ele.GauPtsNumGauPts.CorU(ide,i) = ((Ele_Knot_U(2)-Ele_Knot_U(1)).*GauPts.QuaPts(i,1) + (Ele_Knot_U(2)+Ele_Knot_U(1)))/2;%单元上的高斯点GauPts.CorV(ide,i) = ((Ele_Knot_V(2)-Ele_Knot_V(1)).*GauPts.QuaPts(i,2) + (Ele_Knot_V(2)+Ele_Knot_V(1)))/2;GauPts.CorW(ide,i) = ((Ele_Knot_W(2)-Ele_Knot_W(1)).*GauPts.QuaPts(i,3) + (Ele_Knot_W(2)+Ele_Knot_W(1)))/2;end
end
end

输出1-----CtrPts:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

%% 将节点向量的重节点去掉
Knots.U = unique(NURBS.knots{1})';%unique() 将重节点保留一个
Knots.V = unique(NURBS.knots{2})';
Knots.W = unique(NURBS.knots{3})';
%% 控制点的信息,包括 笛卡尔坐标、坐标个数、对应生成的序列
CtrPts.Cordis = NURBS.coefs(:,:);%将NURBS的控制点转化成一个4*140行的向量
CtrPts.Cordis(1,:) = CtrPts.Cordis(1,:)./CtrPts.Cordis(4,:);   % 控制点的 X 笛卡尔坐标;
CtrPts.Cordis(2,:) = CtrPts.Cordis(2,:)./CtrPts.Cordis(4,:);   % 控制点的 Y 笛卡尔坐标;
CtrPts.Cordis(3,:) = CtrPts.Cordis(3,:)./CtrPts.Cordis(4,:);   % 控制点的 Z 笛卡尔坐标;
CtrPts.Num = prod(NURBS.number);                               % 控制点或基函数的总数
CtrPts.NumU = NURBS.number(1);                                 % U方向的控制点或基函数的总数
CtrPts.NumV = NURBS.number(2);                                 % V方向的控制点或基函数的总数
CtrPts.NumW = NURBS.number(3);
CtrPts.Seque = reshape(1:CtrPts.Num,CtrPts.NumU,CtrPts.NumV,CtrPts.NumW);

在这里插入图片描述

输出2-----Ele:

%% 参数空间中单元(节点区间)的信息,包括单元个数、单元对应生成的序列
Ele.NumU = numel(unique(NURBS.knots{1}))-1;                    % 第一参数(U)方向的单元个数
Ele.NumV = numel(unique(NURBS.knots{2}))-1;                    % 第二参数(V)方向的单元个数
Ele.NumW = numel(unique(NURBS.knots{3}))-1;
Ele.Num = Ele.NumU*Ele.NumV*Ele.NumW;                          % 单元总数
Ele.Seque = reshape(1:Ele.Num, Ele.NumU, Ele.NumV, Ele.NumW);
Ele.KnotsU = [Knots.U(1:end-1) Knots.U(2:end)];                % 元素在第一参数方向上的唯一节点---不太理解为什么这样分
Ele.KnotsV = [Knots.V(1:end-1) Knots.V(2:end)];                % 元素在第二参数方向上的唯一节点---不过会在划分单元信息的时候用到
Ele.KnotsW = [Knots.W(1:end-1) Knots.W(2:end)];
Ele.CtrPtsNum = prod(NURBS.order);
Ele.CtrPtsNumU = NURBS.order(1); Ele.CtrPtsNumV = NURBS.order(2); Ele.CtrPtsNumW = NURBS.order(3);
[~, Ele.CtrPtsCon] = nrbbasisfun({(sum(Ele.KnotsU,2)./2)', (sum(Ele.KnotsV,2)./2)', (sum(Ele.KnotsW,2)./2)'}, NURBS);
% Ele.CtrPtsCon: 单元信息---每个单元包含的全局节点编号
% [B, id] = nrbbasisfun (points, nrb) ----自己感觉 id表示控制点的全局编号  具体原理不理解

在这里插入图片描述
在这里插入图片描述

输出3-----GauPts:

在这里插入图片描述

%% 参数空间中高斯正交点的信息
[GauPts.Weigh, GauPts.QuaPts] = Guadrature3D(3, numel(NURBS.order));
%[GauPts.Weigh, GauPts.QuaPts]:  一个单元(3D)上27个控制点的  标准区间[-1,1] 上的高斯权重和高斯点
Ele.GauPtsNum = numel(GauPts.Weigh);  %高斯点个数   numel(A):表示A中矩阵元素总数   A的行数 * A的列数
GauPts.Num = Ele.Num*Ele.GauPtsNum;
GauPts.Seque = reshape(1:GauPts.Num,Ele.GauPtsNum,Ele.Num)';
GauPts.CorU = zeros(Ele.Num,Ele.GauPtsNum); % GauPts.CorU矩阵大小: 单元数*高斯点个数
GauPts.CorV = zeros(Ele.Num,Ele.GauPtsNum); % 第i行,表示 变换到单元对应的参数域   对应生成的高斯点
GauPts.CorW = zeros(Ele.Num,Ele.GauPtsNum);
for ide = 1:Ele.Num  % ide:第ide个单元idw = ceil(ide/Ele.NumU/Ele.NumV);idv = ceil((ide - (idw-1)*Ele.NumU*Ele.NumV)/Ele.NumU);idu = ide - (idw-1)*Ele.NumU*Ele.NumV - (idv-1)*Ele.NumU;
%     [idv, idu] = find(Ele.Seque == ide);                       % The two idices in two parametric directions for an elementEle_Knot_U = Ele.KnotsU(idu,:);                            % The knot span in the first parametric direction for an elementEle_Knot_V = Ele.KnotsV(idv,:);                            % The knot span in the second parametric direction for an elementEle_Knot_W = Ele.KnotsW(idw,:);for i = 1:Ele.GauPtsNumGauPts.CorU(ide,i) = ((Ele_Knot_U(2)-Ele_Knot_U(1)).*GauPts.QuaPts(i,1) + (Ele_Knot_U(2)+Ele_Knot_U(1)))/2;%单元上的高斯点GauPts.CorV(ide,i) = ((Ele_Knot_V(2)-Ele_Knot_V(1)).*GauPts.QuaPts(i,2) + (Ele_Knot_V(2)+Ele_Knot_V(1)))/2;GauPts.CorW(ide,i) = ((Ele_Knot_W(2)-Ele_Knot_W(1)).*GauPts.QuaPts(i,3) + (Ele_Knot_W(2)+Ele_Knot_W(1)))/2;end
end

在这里插入图片描述

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

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

相关文章

Python爬虫-某跨境电商(AM)搜索热词

前言 本文是该专栏的第42篇,后面会持续分享python爬虫干货知识,记得关注。 关于某跨境电商(AM),本专栏前面有单独详细介绍过,获取配送地的cookie信息以及商品库存数据,感兴趣的同学可往前翻阅。 1. python爬虫|爬取某跨境电商AM的商品库存数据(Selenium实战) 2. Seleni…

5.39 综合案例2.0 - STM32蓝牙遥控小车1(手机APP遥控)

综合案例2.0 - 蓝牙遥控小车1- 手机APP遥控成品展示案例说明器件说明连线小车源码手机遥控APPAPP使用说明成品展示 案例说明 用STM32单片机做了一辆蓝牙控制的麦轮小车,分享一下小车的原理和制作过程。 控制部分分为手机APP,语音模块控制,Ha…

15-721 chapter2 内存数据库

Background 随着时代的发展,DRAM可以容纳足够的便宜,容量也变大了。对于数据库来说,数据完全可以fit in memory,但同时面向disk的数据库架构不能很好的发挥这个特性 这张图是disk database的cpu instruction cost 想buffer pool…

第5章 继承-Java核心技术·卷1

文章目录Java与C不同基本概念继承:基于已有的类创建新的类。构造器多态定义超类变量可以引用所有的子类对象,但子类变量不能引用超类对象。子类引用的数组可以转换成超类引用的数组覆写返回子类型强制类型转换阻止继承:final类和方法多态 vs …

ROS学习-ROS简介

文章目录1.ROS1.1 ROS概念1.2 ROS特征1.3 ROS特点1.4 ROS版本1.5 ROS程序其他名词介绍1. 元操作系统2. IDL 接口定义语言一些网站1.ROS 1.1 ROS概念 ROS(Robot Operating System,机器人操作系统) ROS 是一个适用于机器人的开源的元操作系统,提供一系列…

linux驱动开发 - 04_Linux 设备树学习 - DTS语法

文章目录Linux 设备树学习 - DTS语法1 什么是设备树?2 DTS、DTB和DTC3 DTS 语法3.1 dtsi 头文件3.2 设备节点3.3 标准属性1、compatible 属性2、model 属性3、status 属性4、#address-cells 和#size-cells 属性5、reg 属性6、ranges 属性7、name 属性8、device_type…

人工智能专题-知识表示

文章目录人工智能专题-知识表示大纲2.1 知识表示的概念2.1.1 知识表示观点2.1.2 知识表示的要求2.2 一阶谓词逻辑表示法2.2.1 一阶谓词概念2.2.2 谓词逻辑表示方法2.3 产生式表示法2.4 语义网络表示法2.5 框架表示法人工智能专题-知识表示 大纲 大纲:掌握知识表示方…

思科路由器发现重大漏洞,解决方法是……

晚上好,我是老杨。 思科知名度高,待遇也好,很多网工心生向往,也有很多人考过思科认证的相关证书,对思科的印象还是不错吧? 而且,作为美国著名的网络设备厂商,思科是全球路由器巨头…

【面试】如何设计SaaS产品的数据权限?

文章目录前言数据权限是什么?设计原则整体方案RBAC模型怎么控制数据权限?1. 数据范围权限控制2. 业务对象操作权限控制3. 业务对象字段权限控制总结前言 一套系统的权限可以分为两类,数据权限和功能权限,今天我们从以下几个点&am…

【RabbitMQ】初识消息中间件MQ

目录 一、什么是MQ 二、MQ的优缺点 1、MQ的优点 1.应用解耦 2.削峰填谷 3.异步提速 2、MQ的缺点 1.可用性低 2.系统复杂度高 3.数据一致性问题 三、MQ使用场景 四、常见的MQ 一、什么是MQ MQ(Message Queue):消息队列&#xff0c…

代码随想录_二叉树_leetcode654 617

leetcode654 最大二叉树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 …

【FPGA实验4】举重比赛机制

举重比赛有三名裁判,当运动员将杠铃举起后,须有两名或两名以上裁判认可,方可判定试举成功,若用A、B、C分别代表三名裁判的意见输入,同意为1,否定为0;F为裁判结果输出,试举成功时F1,试…

iPhone如何不用iTunes将视频传输到电脑上?

随着智能手机的普及,iPhone已经成为了人们生活中必不可少的一部分。而随着iPhone摄像功能的逐渐完善,越来越多的用户开始将iPhone作为拍摄视频的工具。 但是,将iPhone中的视频传输到电脑并进行后续编辑处理或者备份储存,对于许多…

社科院与杜兰大学中外合作办学金融管理硕士项目——比起过往,前路更值得期待

当结束一天工作陷入沉思时,你有没有特别遗憾的事情呢,人生有太多的不确定性,比起过往,未知的人生更值得我们期待。与其懊恼没完成的遗憾,不如珍惜当下,努力创造未来。人生没有太晚的开始,在职读…

人工智能发展到GPT4经历了什么,从专家系统到机器学习再到深度学习,从大模型到现在的GPT4

大家好,我是微学AI,今天给大家讲一下人工智能的发展,从专家系统到机器学习再到深度学习,从大模型到现在的GPT4,讲这个的目的是让每个人都懂得人工智能,每个人都懂得人工智能的发展,未来人工智能…

openpnp - 顶部相机辅助光的选择

文章目录openpnp - 顶部相机辅助光的选择概述折腾的过程简易灯板市售的环形灯(不带漫射板)市售的环形灯(不带漫射板) LED单色光调光控制器.市售的环形灯(带漫射板)市售的环形灯(带漫射板) 自己拆解(降低LED灯路数)ENDopenpnp - 顶部相机辅助光的选择 概述 终于将顶部相机辅…

数值区间的模糊匹配,二分查找的应用

先看图: 需求很明确,要根据左边的值,显示右边的值。 比如,现在拿到的值是 17.12,那么应该显示成 15;拿到 17.599 ,那么应该显示成 20. 先找规律: 为了便于说明,暂且将左边的值设为 x, 右边的值设为 y. 第一行和最后一行可以写死成 0 与 1500;余下的每行,x 的区间是…

【华为机试真题详解JAVA实现】—学英语

目录 一、题目描述 二、解题代码 一、题目描述 Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 具体规则如下: 1.在英语读法中三位数字看成一整体,后面再加一个计数单位。从最右边往左数,三位一单位,例如12,345 等 2.每三位数后记得带上计数单位 分别是…

四、数组、切片,映射

一、一维数组 //声明一个包含5个元素的整型数组 var array [5]int //具体数值填充数组 array : [5]int{1, 2, 3, 4, 5} //容量由初始化值的数量决定 array : [...]int{1, 2, 3, 4, 5) //只初始化索引为1和2的元素 array : [5]int{1: 10, 2: 20} //修改索引为2的元素的值 array…

Spring学习(五):一篇讲清楚动态代理(jdk和cglib)的使用、原理和源码

目录 一、jdk动态代理的基本使用 二、cglib动态代理的基本使用 2.1 方法一:method.invoke() 方法反射调用 2.2 方法二(spring使用的这个方法): methodProxy.invoke() 2.3 方法三:methodProxy.invokeSuper() 三、…