MATLAB 之 低层绘图操作和光照及材质处理

这里写目录标题

  • 一、低层绘图操作
    • 1. 曲线对象
    • 2. 曲面对象
    • 3. 文本对象
    • 4. 其他核心对象
      • 4.1 区域块对象
      • 4.2 方框对象
  • 二、光照和材质处理
    • 1. 光照处理
    • 2. 材质处理
      • 2.1 图形对象的反射特性
      • 2.2 material 函数

一、低层绘图操作

  • MATLAB 将曲线、曲面、文本等图形均视为对象,通过句柄设置这些对象的属性,从而绘制出更具个性化的图形。

1. 曲线对象

  • 曲线对象是坐标轴的子对象,它既可以定义在二维坐标系中,也可以定义在三维坐标系中。建立曲线对象使用 line 函数,其调用格式如下:
	句柄变量=line(x,y,z,属性名1,属性值1,属性名2,属性值2,...)
  • 其中,对 x、y、z 的解释与高层曲线函数 plotplot3 等一样,其余参数的解释与前面介绍过的 figureaxes 函数类似。
  • 每个曲线对象也具有很多属性。除公共属性外,其他常用属性如下。
  • (1) Color 属性:该属性的取值是代表某颜色的字符或 RGB 值,用于定义曲线的颜色,默认值为当前坐标轴对象的 ColorOrder 属性定义的颜色。
  • (2) LineStyle 属性:定义线型,默认值为 ‘-’,即实线。
  • (3) LineWidth 属性:定义线宽,默认值为 0.5 磅。
  • (4) Marker 属性:定义数据点标记符号,默认值为 ‘none’。
  • (5) MarkerSize 属性:定义数据点标记符号的大小,默认值为 6 磅。
  • (6) XData、YData、ZData 属性:3 种属性的取值都是数值向量或矩阵,分别代表曲线对象的 3 个坐标轴数据。
  • 例如,我们利用曲线对象绘制曲线 y = sin ⁡ ( 2 π t ) y=\sin (2\pi t) y=sin(2πt) y = 3 2 e − 4 t sin ⁡ ( 4 3 t + π 3 ) y=\frac{\sqrt{3}}{2}e^{-4t}\sin (4\sqrt{3}t+\frac{\pi}{3}) y=23 e4tsin(43 t+3π)
  • 程序如下:
t=0:pi/100:pi/2;
y1=sin(2*pi*t);
y2=sqrt(3)/2*exp(-4*t).*sin(4*sqrt(3)*t+pi/3);
figh=figure;
axes('GridLineStyle',':','XLim',[0,pi/2],'YLim',[-1,1]);
line('XData',t,'YData',y1,'LineWidth',1);
line(t,y2);
grid on
  • 程序运行结果如下图所示。

在这里插入图片描述

2. 曲面对象

  • 曲面对象也是坐标轴的子对象,它定义在三维坐标系中,而坐标系可以在任何视点下。建立曲面对象使用 surface 函数,其调用格式如下:
	句柄变量=surface(x,y,z,属性名1,属性值1,属性名2,属性值2,...)
  • 其中,对 x、y、z 的解释与高层曲面函数 meshsurf 等一样,其余参数的解释与前面介绍过的 figureaxes 等函数类似。
  • 每个曲面对象也具有很多属性。除公共属性外,其他常用属性如下。
  • (1) EdgeColor 属性:该属性的取值是代表某颜色的字符或 RGB 值,还可以是 ‘flat’、‘interp’ 或 ‘none’,默认为黑色。定义曲面网格线的颜色或着色方式。
  • (2) FaceColor 属性:该属性的取值是代表某颜色的字符或 RGB 值,还可以是 ‘flat’(默认值)、‘interp’ 或 ‘none’。 定义曲面网格片的颜色或着色方式。
  • (3) LineStyle 属性:定义曲面网格线的线型,默认为实线。
  • (4) LineWidth 属性:定义曲面网格线的线宽,默认值为 0.5 磅。
  • (5) Marker 属性:定义曲面数据点标记符号,默认值为 ‘none’。
  • (6) MarkerSize 属性:定义曲面数据点标记符号的大小,默认值为 6 磅。
  • (7) XData、YData、ZData 属性:3 种属性的取值都是数值向量或矩阵,分别代表曲面对象的 3 个坐标轴数据。
  • 例如,我们利用曲面对象绘制三维曲面 y = sin ⁡ y cos ⁡ x y=\sin y\cos x y=sinycosx
  • 程序如下:
x=0:0.1:2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
axes('view',[-37.5,30]);
hs=surface(x,y,z,'FaceColor','w','EdgeColor','flat');
grid on; 
xlabel('x-axis');
ylabel('y-axis');
zlabel('z-axis');
title('mesh-surf');
pause;
set(hs,'FaceColor','flat');
  • 开始网格片的颜色设置为白色,实际上得到的是网格图,如下图所示,这与高层函数 mesh 所画曲面相同。

在这里插入图片描述

  • 暂停后,诚信设置网格片的颜色,得到着色表面图,如下图所示。

在这里插入图片描述

3. 文本对象

  • 文本对象主要用于给图形添加文字标注。在文本对象中除使用一般的文本以外,还允许使用 LaTeX 字符。
  • 使用 text 函数可以根据指定位置和属性值添加文本说明,并保存句柄。该函数的调用格式如下:
	句柄变量=text(x,y,z,说明文字,属性名1,属性值1,属性名2,属性值2,...)
  • 其中,说明文字中除使用标准的 ASCII 字符外,还可使用 LaTeX 格式的控制字符。例如:
>> h=text(0.5,0.5,'{\gamma}={\rho}^2');
  • 将得到标注效果: γ = ρ 2 \gamma =\rho ^{2} γ=ρ2
  • 除公共属性外,文本对象的其他常用属性如下。
  • (1) Color 属性:定义文本对象的显示颜色,默认为黑色。
  • (2) String 属性:该属性的取值是字符串或字符串矩阵,它记录着文字标注的内容。
  • (3) Interpreter 属性:该属性的取值是 ‘tex’(默认值)或 ‘none’,该属性控制对文字标注内容的解释方式,即 LaTeX 方式或 ASCII 方式。
  • (4) FontSize 属性:定义文本对象的大小,其默认值为 10 磅。
  • (5) Rotation 属性:该属性的取值是数值量,默认值为 0。它定义文本对象的旋转角度,取正值时表示逆时针方向旋转,取负值时表示顺时针方向旋转。
  • 例如,我们利用曲线对象绘制 y = sin ⁡ θ y=\sin \theta y=sinθ y = cos ⁡ θ y=\cos \theta y=cosθ 并利用文字对象完成标注。
  • 程序如下:
theta=-pi:.1:pi;
y1=sin(theta);
y2=cos(theta);
h=line(theta,y1,'LineStyle',':','Color','g');
line(theta,y2,'LineStyle','--','Color','b');
xlabel('-\pi \leq \theta \leq \pi')
ylabel('sin\theta')
title('Plot of sin\theta')
text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4) ', 'FontSize',12)
set(h,'Color','r','LineWidth',2)   %改变曲线1的颜色和线宽
  • 程序运行结果如下图所示。

在这里插入图片描述

4. 其他核心对象

4.1 区域块对象

  • 区域块对象是指一个任意多边形区域。在 MATLAB 中,可以使用 patch 函数创建一个或多个多边形。有两种形式的 patch 函数,一种是高级语法形式,另一种是低级语法形式。
  • 前者通过指定每个小面的顶点坐标和颜色来创建区域块对象,后者通过指定所有顶点的坐标和各小面的顶点和颜色来创建。
  • 使用高级语法形式时,patch 函数的调用格式如下:
	patch(x,y,z,c)
  • 该函数在当前坐标轴中创建二维或三维空间中带填充模式的区域块对象。x、y、z 确定顶点坐标。如果 x、y、z 为矩阵,则 MATLAB 按列创建多个多边形。c 指定每一区 域块对象的颜色,它既可以用字符表示,也可以用 RGB 三元组表示。
  • 例如,我们将绘制一个用红色填充的正方形区域。
  • 程序如下:
x=[10, 10,25,25];
y=[10,25,25,10];
patch(x,y,[1,0,0])
  • 程序运行结果如下所示。

在这里插入图片描述

  • 例如,我们生成一个正十边形,其中用黄色填充。
  • 程序如下:
t=0:pi/5:2*pi;
patch(sin(t),cos(t),'y');
axis equal
  • 程序运行结果如下图所示。

在这里插入图片描述

  • patch 函数的低级语法格式只接受属性名和属性值配对参数,其调用格式如下:
	句柄变量=patch(属性名1,属性值1,属性名2,属性值2,...)
  • 除公共属性外,区域块对象的其他常用属性如下。
  • (1) Faces 属性:定义各小面的顶点。
  • (2) Vertices 属性:定义各顶点的坐标。
  • (3) FaceColor 属性:该属性的取值是代表某颜色的字符或 RGB 值,还可以是 ‘flat’、‘interp’ 或 ‘none’,默认为黑色。定义小面的颜色。
  • (4) EdgeColor 属性:该属性的取值是代表某颜色的字符或 RGB 值,还可以是 'flat、‘interp’ 或 ‘none’,默认为黑色。定义小面边缘的颜色。
  • (5) FaceVertexCData 属性:定义用 Faces/Vertices 方法所需要的颜色数据,其值是元素为 RGB 值的 n × 3 n×3 n×3 矩阵。
  • 例如,我们绘制一个用红色填充的正方形区域,可用 patch 函数的低级形式。
  • 程序如下:
>> vert=[10,10;10,25;25,25;25,10];
>> fac=[1,2,3,4];
>> patch('Faces',fac,'Vertices',vert,'FaceColor','r');
  • 程序运行结果如下图所示。

在这里插入图片描述

  • 例如,我们为说明 patch 函数的用法,下 面用它两种不同的格式来绘制一个由4个小面组成的扇面。
  • 首先通过小面顶点坐标和颜色进行创建,用 x、y、z 定义小面的顶点坐标,用 c 定义小面的颜色,程序如下:
x=[0,0,0,0;1,0.8,0.5,0;1,1,0.8,0.5];
y=[0,0,0,0;0.5,0.8,1,1;0,0.5,0.8,1];
z=[0.5,0.5,0.5,0.5;1.5,1.5,1.5,1.5;1.5,1.5,1.5,1.5];
mc=jet(4);      %定义色图矩阵
c(1,1,1:3)=mc(1,:);
c(1,2,1:3)=mc(2,:);
c(1,3,1:3)=mc(3,:);
c(1,4,1:3)=mc(4,:);
patch(x,y,z,c);
axis([0,1,0,1,0,2]);
grid
  • 程序运行后,生成如下图所示的 4 个小三角形组成的扇面。

在这里插入图片描述

  • 下面使用 patch 函数的第二种格式,用 vert 定义各顶点的坐标,用 fac 定义组成各小面的顶点的编号。程序如下:
vert=[0,0,0.5;1,0,1.5;1,0.5,1.5;0.8,0.8,1.5;0.5,1,1.5;0,1,1.5];
fac=[1,3,2;1,4,3;1,5,4;1,6,5];
mc=jet(4);
patch('Faces',fac,'Vertices',vert,'FaceVertexCData',mc, ...
    'FaceColor', 'Flat') ;
axis([0,1,0,1,0,2]);
grid
  • 程序运行后,生成如下图所示的图形。采用第 2 种格式建立区域块的时候,需要的数据更少,多个小面的公共顶点只需定义一次就够了,所以对于有多个小面的区域快更合适。

在这里插入图片描述

4.2 方框对象

  • 在 MATLAB 中,矩形、椭圆以及两者之间的过渡图形,如圆角矩形都称为方框对象。创建方框对象的低层函数是 rectangle,其调用格式如下:
	句柄变量=rectangle(属性名1,属性值1,属性名2,属性值2,...)
  • 除公共属性外,方框对象的其他常用属性如下。
  • (1) Position 属性:与坐标轴的 Position 属性基本相同,相对坐标轴原点定义方框的位置。该属性的取值格式为 [x, y, w, h],(x, y) 确定方框对象的左下角坐标,w、 h 分别指定方框的宽和高。
  • (2) Curvature 属性:定义方框边的曲率。该属性指定曲率,其取值格式为 [x, y],其中 x 为水平曲率,y 为垂直曲率。
  • 当值为 [0, 0] 时,创建矩形;当值为 [1, 1] 时,创建椭圆。
  • 如果只指定一个值,则水平边和垂直边都会发生相同长度的弯曲。曲率的大小由短的边确定。
  • 不带任何参数的 rectangle 函数绘制一个单位正方形,左下角坐标为 [0, 0],右上角坐标为 [1,1],曲率为 [0,0](即没有曲率)。
  • (3) LineStyle 属性:定义线型,默认为实线。
  • (4) LineWidth 属性:定义线宽,默认值为 0.5 磅。
  • (5) EdgeColor 属性:定义边框线的颜色,默认为黑色。
  • (6) FaceColor 属性:定义填充颜色,默认值为 ‘none’。
  • 例如,我们在同一个图形窗口种创建矩形、圆角矩形、椭圆和圆各一个,并使用不同的线型和线宽。
  • 程序如下:
subplot(2,2,1);
rectangle('Position',[2,3,25,15],'LineWidth',3);
subplot(2,2,2);
rectangle('Position',[3,5,15,8],'Curvature',0.4,'LineWidth',2);
subplot(2,2,3);
rectangle('Position',[5,3,10,15],'Curvature',[1,1]);
subplot(2,2,4);
rectangle('Position',[5,3,10,10],'Curvature',[1,1],...
    'LineStyle', '--','FaceColor','r');
axis equal

  • 程序运行结果如下图所示。

在这里插入图片描述

二、光照和材质处理

  • 使用光源对象实现光照处理,可以将图形表现得更加真实,使图形表面微妙的差异更清楚。光源对象是不可见的,但是可以像设置其他图形对象的属性那样设置光源对象的类型、颜色、位置和其他属性。
  • 材质体现了图形对象的反射特性,修改区域块和曲面对象的反射特性,可以改变在场景中应用光照时对象的显示外观。

1. 光照处理

  • MATLAB 提供 light 函数创建光源对象,其调用格式如下:
	句柄变量=light(属性名1,属性值1,属性名2,属性值2,...)
  • 发光对象有如下 3 个重要属性。
  • (1) Color 属性:设置光的颜色,默认为白色。
  • (2) Style 属性:设置光源对象是否在无穷远,可取值为 ‘infinite’(默认值)和 ‘local’,分别表示无穷远光和近光。
  • (3) Position 属性:该属性的取值是数值向量,取三维坐标点组成的向量形式 [x, y, z],用于设置光源对象与坐标轴原点的距离,发光对象的位置与 Style 属性有关。
  • 若 Style 属性为 ‘local’,则设置的是光源的实际位置。
  • 若Style 属性为 ‘infinite’,则设置的是光线射过来的方向,表示穿过该点射向原点。
  • 假如函数不包含任何参数,则采用默认设置:白光、无穷远、穿过 (1,0,1) 点射向坐标原点。
  • 利用 lighting 命令可以设置光照模式,其格式如下:
	lighting选项
  • 其中,选项有 4 种取值:flat、gouraud、phong、none。 flat 选项使得入射光均匀洒落在图形对象的每个面上,是默认选项;gouraud 选项先对顶点颜色插补,再对顶点勾画的面上颜色进行插补,用于表现曲面;phong 选项对顶点处的法线插值,再计算各个像素的反光,它生成的光照效果好,但更费时;none 选项关闭所有光源。
  • 例如,我们绘制光照处理后的球面并观察不同光照模式下的效果。
  • 程序如下:
[x,y,z]=sphere(20);
subplot(1,4,1);
surf(x,y,z);
axis equal;
shading interp;
hold on;
subplot(1,4,2);
surf(x,y,z);
axis equal;
light('Position',[0,1,1]);
shading interp;
lighting flat;
hold on;
plot3(0,1,1,'p');
text(0,1,1,'light');
subplot(1,4,3);
surf(x,y,z);
axis equal;
light('Position',[0,1,1]);
shading interp;
lighting gouraud;
hold on;
subplot(1,4,4);
surf(x,y,z);
axis equal;
light('Position',[0,1,1]);
shading interp; 
lighting phong;
  • 程序运行结果如下。4 个球分别是没有使用光照,使用 flat 光照,使用 gouraud 光照和使用 phong 光照时的显示效果,第二个球还标出了光源的位置

在这里插入图片描述

2. 材质处理

  • 材质体现了图形对象的反射特性,修改区域块和曲面对象的反射特性,可以改变在场景中应用光照时对象的显示外观。

2.1 图形对象的反射特性

  • 图形对象的反射特性包括镜面反射和漫反射、环境光、镜面反射指数、镜面反射光的颜色和背面光照,可以组合使用这几种特性来生成特殊的显示结果。
  • (1) 镜面反射和漫反射。区域块和曲面对象的 SpecularStrength 属性用来控制对象表面镜面反射的强度,属性值取 0~1 之间的数,默认取 0.9。DiffuseStrength 属性用来控制对象表面漫反射的强度,属性值取 0~1 之间的数,默认值取 0.6。
  • (2) 环境光。环境光不是镜面光,它均匀地洒在场景中的所有对象上。只有在坐标系中有 Light 对象时环境光才可见。AmbientStrength 属性是一个用于区域块和曲面对象的属性,确定特定对象上环境光的强度,属性值取 0~1 之间的数,默认值取 0.3。
  • (3) 镜面反射指数。镜面反射光的大小与区域块和曲面对象的 SpecularExponent 属性有关,该属性的值介于 1~500 之间,默认值为 10。
  • (4) 镜面反射光的颜色。镜面反射光的颜色可以有一个变化范围,即从对象颜色与光源颜色的组合色变到只有光源颜色。区域块和曲面对象的 SpecularColorReflectance 属性控制这个颜色,属性值取 0~1 之间的数,默认值为 1。
  • (5) 背面光照。背面光照可用于显示对象内表面和外表面的差别。区域块和曲面对象的 BackFaceLighting 属性控制该效果,属性取值为 ‘unlit’、‘lit’ 和 ‘reverselit’(默认值)。

2.2 material 函数

  • 使用 material 函数也可以设置区域块和曲面对象的表面反射特性,其调用格式如下:
  • (1) material shiny:镜面反射光的强度比漫反射光和环境光的强度要高得多,镜面光的颜色只决定于光源的颜色。
  • (2) material dull:要进行漫反射,没有镜面反射,但是反射光的颜色只与光源有关。
  • (3) material metal:镜面反射很强,环境光和漫反射光较弱,反射光的颜色与光源和对象的颜色都有关系。
  • (4) material([ka,kd,ks]):设置对象的环境光、漫反射光和镜面光的强度。
  • (5) material([ka,kd,ks,n]):设置环境光、漫反射光、镜面光的强度以及对象的镜面反射指数。
  • (6) material([ka,kd,ks,n,sc]):设置环境光、漫反射光、镜面光的强度、对象的镜面反射指数以及镜面反射光的颜色。
  • (7) material default:将环境光、漫反射光、镜面光的强度、对象的镜面反射指数和镜面反射光的颜色设置为默认值。
  • 这里需要注意的是,material 函数设置坐标系中所有区域块和曲面对象的 AmbientStrength、 DiffuseStrength、SpecularStrength、 SpecularExponent 和 SpecularColorReflectance 属性。坐标系中必须有一个可见的 Light 对象。
  • 例如,我们生成一个球体和一个立方体,观察表面反射特性设置效果。
  • 程序如下:
sphere(36);
h=findobj('Type','surface');
set (h,'FaceLighting','phong','FaceColor','interp', ...
    'EdgeColor',[0.4,0.4,0.4],'BackFaceLighting','lit')
hold on
vert=[2,0,-1;2,1,-1;3,0,0;3,0,-1;2,0,0;2,1,0;3,1,0;3,0,0];
fac=[1,2,3,4;2,6,7,3;4,3,7,8;1,5,8,4;1,2,6,5;5,6,7,8];
patch('Faces',fac,'Vertices',vert,'FaceColor','y');
light('Position',[1,3,2]);
light('Position',[-3,-1,3]);
material shiny
axis equal
hold off
  • 程序中用 findobj 函数查找 Type 属性为 surface 的对象,从而可以获取该球面的句柄,进而设置其属性。
  • 球面使用了 phong FaceLighting 属性值,因为生成了最平滑的光照插值效果。
  • vertfac 定义立方体。默认时,立方体使用 flat Facelighting 属性值增强每个边的可见性。
  • material shiny 命令会影响立方体和球体的反射属性。因为球体是闭合的,所以 BackFaceLighting 属性从默认设置变成了正常光照,删除了不必要的边缘效应。程序运行后,生成的图形效果如下图所示。
    在这里插入图片描述

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

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

相关文章

【MySQL数据库 | 第十九篇】SQL性能分析工具

目录 前言: SQL执行频率: 慢查询日志: profile: profile各个指令: 总结: 前言: 本篇我们将为大家讲解SQL性能的分析工具,而只有熟练的掌握了性能分析的工具,才可以更…

【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

💧 S p r i n g C l o u d S l e u t h 分布式链路跟踪 \color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} SpringCloudSleuth分布式链路跟踪💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云…

力扣 257. 二叉树的所有路径

题目来源:https://leetcode.cn/problems/binary-tree-paths/description/ C题解1:使用递归,声明了全局变量result,遇到叶子节点就将字符串添加到result中。 递归三步法: 1. 确认传入参数:当前节点已有路径…

如何保证API接口的安全性

API接口的安全性是非常重要的,以下是一些保证API接口安全性的措施: 用户认证、授权:接口的调用者必须提供有效的身份认证信息,包括用户名、密码、密钥等,以保证接口的调用者的身份有效性。同时,需要在接口的…

echarts的基础知识和配置项

异步数据加载和更新 ECharts 中在异步更新数据的时候需要通过series的name属性对应到相应的系列,如果没有name,series就会根据数组的顺序索引,把数据跟前面的配置对应上 loading动画 如果数据加载时间较长,一个空的坐标轴放在画…

基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标,利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

《面试1v1》Redis持久化

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

<Oracle>《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》(第一部分)

《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》(第一部分) 1 说明1.1 前言1.2 资源下载 2 安装步骤2.1 上传安装包2.2 下载数据库预安装包2.3 安装数据库预安装包 1 说明 1.1 前言 本文是Linux系统命令行模式安装Oracle数据库的学习实验记录…

【C++实现二叉树的遍历】

目录 一、二叉树的结构二、二叉树的遍历方式三、源码 一、二叉树的结构 二、二叉树的遍历方式 先序遍历: 根–>左–>右中序遍历: 左–>根–>右后序遍历:左–>右–>根层次遍历:顶层–>底层 三、源码 注&am…

云原生监控平台 Prometheus 从部署到监控

1.监控系统架构设计 角色 节点 IP地址 监控端 Prometheus ,Grafana,node_exporter ,Nginx 47.120.35.251 被监控端1 node_exporter 47.113.177.189 被监控端2 mysqld_exporter,node_exporter,Nginx&#xff…

ivx低代码开发平台

前言 低代码开发平台(Low-Code Development Platform, LCDS)为企业和开发者提供了高效的应用开发方式。在2023年,中国的低代码开发平台正在快速发展,以下是其中最受关注的十大平台: iVX:iVX是一款新型的低代…

react总结

一、React 入门 1.1 特点 高性能、声明式、组件化、单向响应的数据流、JSX扩展、灵活 1.2 React初体验 <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&quo…

跨越时空限制,酷暑天气用VR看房是一种什么体验?

近年来&#xff0c;全球厄尔尼诺现象越来越频繁&#xff0c;夏季温度不断创下新高&#xff0c;持续大范围的高温天气让人们对出门“望而生畏”。很多购房者也不愿意在如此酷暑期间&#xff0c;四处奔波看房&#xff0c;酷暑天气让带看房效率大大降低&#xff0c;更有新闻报道&a…

VSCode+GDB+Qemu调试ARM64 linux内核

俗话说&#xff0c;工欲善其事 必先利其器。linux kernel是一个非常复杂的系统&#xff0c;初学者会很难入门。 如果有一个方便的调试环境&#xff0c;学习效率至少能有5-10倍的提升。 为了学习linux内核&#xff0c;通常有这两个需要 可以摆脱硬件&#xff0c;方便的编译和…

基于open62541库的OPC UA协议节点信息查询及多节点数值读写案例实践

目录 一、OPC UA协议简介 二、open62541库简介 三、 opcua协议的多点查询、多点读写案例服务端opcua_server 3.1 opcua_server工程目录 3.2 程序源码 3.3 工程组织文件 3.4 编译及启动 四、opcua协议的多点查询、多点读写案例客户端opcua_client 4.1 opcua_client工程目录 4…

使用 Jetpack Compose 构建 Spacer

欢迎阅读本篇关于如何使用 Jetpack Compose 构建 Spacer 的博客。Jetpack Compose 是 Google 的现代 UI 工具包&#xff0c;主要用于构建 Android 界面。其声明式的设计使得 UI 开发更加简洁、直观。 一、什么是 Spacer&#xff1f; 在 UI 设计中&#xff0c;我们通常需要在不…

CSS之平面转换

简介 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; 平面转换也叫 2D 转换&#xff0c;属性是 transform 平移 transform: translate(X轴移动距离, Y轴移动距…

【SpringCloud——Elasticsearch(下)】

一、数据聚合 聚合&#xff0c;可以实现对文档数据的统计、分析、运算。常见的聚合有三类&#xff1a; ①、桶聚合&#xff1a;用来对文档做分组 TermAggregation&#xff1a;按照文档字段值分组。Date Histogram&#xff1a;按照日期解题分组&#xff0c;例如一周为一组&am…

javaee sql注入问题

jsp页面 <% page language"java" contentType"text/html; charsetutf-8"pageEncoding"utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> &…

QT树的实现

理论 在Model/View结构中&#xff0c;数据模型为视图组件和代理组件提供存取数据的标准接口。在QT中&#xff0c;所有的数据模型类都从QAbstactItemModel继承而来&#xff0c;不管底层的数据结构是如何组织数据的&#xff0c;QAbstractItemModel的子类都以表格的层次结构表示数…