大连理工大学选修课——图形学:第五章 二维变换及二维观察
第五章 二维变换及二维观察
二维变换
基本几何变换
图形的几何变换是指对图形的几何信息经过平移、比例、旋转等变换后产生新的图形。
基本几何变换都是相对于坐标原点和坐标轴进行的几何变换。
平移变换
推导:
x ′ = x + T x y ′ = y + T y x'=x+T_x\\ y'=y+T_y x′=x+Txy′=y+Ty
矩阵形式
[ x ′ y ′ ] = [ x y ] ⋅ [ S x 0 0 S y ] [x'\quad y']=[x\quad y]\cdot \begin{bmatrix} S_x & 0\\ 0 & S_y \end{bmatrix} [x′y′]=[xy]⋅[Sx00Sy]
比例变换
比例变换是指对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。
推导(极坐标):
x = r cos α y = r sin α x ′ = r cos ( α + θ ) = x cos θ − y sin θ y ′ = r sin ( α + θ ) = x sin θ + y cos θ x=r\cos\alpha\qquad y=r\sin\alpha\\ x'=r\cos(\alpha+\theta)=x\cos\theta-y\sin\theta\\ y'=r\sin(\alpha+\theta)=x\sin\theta+y\cos\theta x=rcosαy=rsinαx′=rcos(α+θ)=xcosθ−ysinθy′=rsin(α+θ)=xsinθ+ycosθ
矩阵:逆时针旋转 θ \theta θ角
[ x ′ y ′ ] = [ x y ] ⋅ [ cos θ sin θ − sin θ cos θ ] [x'\quad y']=[x\quad y]\cdot \begin{bmatrix} \cos\theta & \sin\theta\\ -\sin\theta & \cos\theta \end{bmatrix} [x′y′]=[xy]⋅[cosθ−sinθsinθcosθ]
平移、缩放、旋转变换的矩阵表示:
P ′ = P ⋅ T 1 + T 2 P'=P\cdot T_1+T_2 P′=P⋅T1+T2
其中Sx和Sy称为比例系数。
规范化齐次坐标
齐次坐标表示就是用 n + 1 n+1 n+1维向量表示一个 n n n维向量
( x , y ) ← ( x , y , 1 ) (x,y)\leftarrow(x,y,1) (x,y)←(x,y,1)
平移:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ 1 0 0 0 1 0 T x T y 1 ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0\\T_x& T_y & 1 \end{bmatrix} [x′y′1]=[xy1]⋅ 10Tx01Ty001
比例:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ S x 0 0 0 S y 0 0 0 1 ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}S_x & 0 & 0\\ 0 & S_y & 0\\0& 0 & 1 \end{bmatrix} [x′y′1]=[xy1]⋅ Sx000Sy0001
整体比例变换:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ 1 0 0 0 1 0 0 0 S ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0\\0& 0 & S \end{bmatrix} [x′y′1]=[xy1]⋅ 10001000S
旋转变换:
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ cos θ sin θ 0 − sin θ cos θ 0 0 0 1 ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} \cos\theta & \sin\theta & 0\\ -\sin\theta & \cos\theta & 0\\ 0& 0 & 1 \end{bmatrix} [x′y′1]=[xy1]⋅ cosθ−sinθ0sinθcosθ0001
普通变换:
x ′ = a x + c y + l p x + q y + s y ′ = b x + d y + m p x + q y + s x'=\frac{ax+cy+l}{px+qy+s}\quad y'=\frac{bx+dy+m}{px+qy+s} x′=px+qy+sax+cy+ly′=px+qy+sbx+dy+m
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ a b p c d q l m s ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} a & b & p\\ c & d & q\\ l & m & s \end{bmatrix} [x′y′1]=[xy1]⋅ aclbdmpqs
关于x轴对称
[ 1 0 0 0 − 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} 1000−10001
关于y轴对称
[ − 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} −100010001
关于原点对称
[ − 1 0 0 0 − 1 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} −1000−10001
关于 y = x y=x y=x轴对称
[ 0 1 0 1 0 0 0 0 1 ] \begin{bmatrix} 0 & 1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} 010100001
关于 y = − x y=-x y=−x轴对称
[ 0 − 1 0 − 1 0 0 0 0 1 ] \begin{bmatrix} 0 & -1 & 0\\ -1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} 0−10−100001
错切变换
错切变换,也称为剪切、错位变换,用于产生弹性物体的变形处理。
其变换矩阵为:
[ 1 b 0 c 1 0 0 0 1 ] \begin{bmatrix} 1 & b & 0\\ c & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} 1c0b10001
二维图形几何变换的计算
- 点的变换
[ x ′ y ′ 1 ] = [ x y 1 ] ⋅ [ a b p c d q l m r ] [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} a & b & p\\ c & d & q\\ l & m & r \end{bmatrix} [x′y′1]=[xy1]⋅ aclbdmpqr
-
直线的变换
$$
\begin{bmatrix}
x_1’&y_1’&1\
x_2’&y_2’&1
\end{bmatrix}\begin{bmatrix}
x_1&y_1&1\
x_2&y_2&1
\end{bmatrix}
\cdot
\begin{bmatrix}
a &b &p\
c &d &q\
l &m &r
\end{bmatrix}
$$ -
多边形的变换
复合变换
复合变换具有形式:
P ′ = P ⋅ T 1 ⋅ T 2 ⋅ T 3 ⋯ T n P'=P\cdot T_1\cdot T_2\cdot T_3\cdots T_n P′=P⋅T1⋅T2⋅T3⋯Tn
二维复合平移:
[ 1 0 0 0 1 0 T x 1 + T x 2 T y 1 + T y 2 1 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ T_{x1}+T_{x2} & T_{y1}+T_{y2} & 1 \end{bmatrix} 10Tx1+Tx201Ty1+Ty2001
二维复合比例
[ S x 1 ⋅ S x 2 0 0 0 S y 1 ⋅ S y 2 0 0 0 1 ] \begin{bmatrix} S_{x1}\cdot S_{x2} & 0 & 0\\ 0 & S_{y1}\cdot S_{y2} & 0\\ 0 & 0 & 1 \end{bmatrix} Sx1⋅Sx2000Sy1⋅Sy20001
二维复合旋转
[ cos ( θ 1 + θ 2 ) sin ( θ 1 + θ 2 ) 0 − sin ( θ 1 + θ 2 ) cos ( θ 1 + θ 2 ) 0 0 0 1 ] \begin{bmatrix} \cos(\theta_1+\theta_2) & \sin(\theta_1+\theta_2) & 0\\ -\sin(\theta_1+\theta_2) &\cos(\theta_1+\theta_2) & 0\\ 0 & 0 & 1 \end{bmatrix} cos(θ1+θ2)−sin(θ1+θ2)0sin(θ1+θ2)cos(θ1+θ2)0001
相对任意一点的二维几何变换
相对某个参考点(xF,yF)作二维几何变换,其变换过程为:
- 平移/旋转。
- 针对原点进行二维几何变换。
- 反平移/反旋转。
光栅变换
直接对帧缓存中象素点进行操作的变换称为光栅变换。
光栅平移变换:
任意角度的光栅旋转变换:
光栅比例变换:进行区域的映射处理
变换的性质:
二维仿射变换是具有如下形式的二维坐标变换:
x ′ = a x + b y + m y ′ = c x + d y + n x'=ax+by+m\\ y'=cx+dy+n x′=ax+by+my′=cx+dy+n
平移、比例、旋转、错切和反射等变换均是二维仿射变换的特例,反过来,任何常用的二维仿射变换总可以表示为这五种变换的复合。
- 仅包含旋转、平移和反射的仿射变换维持角度和长度的不变性。
- 比例变换可改变图形的大小和形状。
- 错切变换引起图形角度关系的改变,甚至导致图形发生畸变。
二维观察
一些定义
窗口:将在用户坐标系中需要进行观察和处理的一个坐标区域。
视区:将窗口映射到显示设备上的坐标(NDC)区域。
观察变换: 为了将窗口内的图形在视区中显示出来,经过将窗口到视区的变换处理。
观察坐标系: 依据窗口的方向和形状在用户坐标平面中定义的直角坐标系。
规格化设备坐标系:将二维的设备坐标系规格化到(0.0,0.0)到(1.0,1.0)的坐标范围内形成的坐标系。
二维观察流程:
引入了观察坐标系和规格化设备坐标系后,观察变换分为如下图所示的几个步骤:
应用程序→图形的用户坐标→观察坐标系→对窗口进行裁剪→视区(依据设备规范化坐标系定义)→设备坐标系→在图形设备上输出
整体缩放效果:
用户坐标系到观察坐标系的变换
用户坐标系到观察坐标系的变换分由两个变换步骤合成:
- 将观察坐标系原点移动到用户坐标系原点
- 绕原点旋转使两坐标系重合
窗口到视区的变换
将窗口内的点(xw,yw)映射到相对应的视区内的点(xv,yv)需进行以下步骤:
- 将窗口左下角点移至用户系统系的坐标原点。
- 针对原点进行比例变换。
- 进行反平移。
裁剪
定义:在观察坐标系下对窗口进行裁剪,即只保留窗口内的那部分图形,去掉窗口外的图形。
已知:
- 窗口边界wxl,wxr,wyb,wyt的坐标值。
- 直线段端点p1p2的坐标值x1,y1,x2,y2。
实交点:直线段与窗口矩形边界的交点。
虚交点:处于直线段延长线或窗口边界延长线上的交点。
Cohen-Sutherland 算法
编码:对于任一端点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码D3D2D1D0。
编码规则如下:
- 若x<wxl,D0=1,否则D0=0;
- 若x>wxr,D1=1,否则D1=0;
- 若y<wyb,D2=1,否则D2=0;
- 若y>wyt,D3=1,否则D3=0。
步骤:
-
判断:裁剪一条线段时,先求出直线段端点p1和p2的编码code1和code2“
a. 若code1=code2=0,对直线段简取之;
b. 若code1&code2≠0,对直线段简弃之; -
求交点:若上述判断条件不成立,则需求出直线段与窗口边界的交点。
a. 左、右边界交点的计算:y = y1 + k(x - x1);
b. 上、下边界交点的计算:x = x1 + (y-y1)/k。(其中,k=(y2-y1)/(x2-x1))
(+)用编码方法实现了对完全可见和不可见直线段的快速接受和拒绝;
(–)求交过程复杂,有冗余计算,并且包含浮点运算,不利于硬件实现。
Liang-Barsky 算法
直线的参数方程:
x = x 1 + u ⋅ ( x 2 − x 1 ) y = y 1 + u ⋅ ( y 2 − y 1 ) \begin{align} x =& x_1 + u \cdot (x_2 - x_1) \\ y =& y_1 + u \cdot (y_2 - y_1) \end{align} x=y=x1+u⋅(x2−x1)y1+u⋅(y2−y1)
对于直线上一点(x,y),若它在窗口内则有:
w x l < = x 1 + u ⋅ ( x 2 − x 1 ) < = w x r w x b < = y 1 + u ⋅ ( y 2 − y 1 ) < = w y t \begin{align} wxl <= x_1 + u\cdot(x_2 - x_1) <= wxr\\ wxb <= y_1 + u\cdot(y_2 - y_1) <= wyt \end{align} wxl<=x1+u⋅(x2−x1)<=wxrwxb<=y1+u⋅(y2−y1)<=wyt
令:
则有:
- 任何平行于剪切边界之一的直线 p k = 0 p_k = 0 pk=0, 其中 k 对应于该剪切边界(k=1,2,3,4 对应于左、右、下、上边界)
- 如果 q k > = 0 q_k > = 0 qk>=0 ,则线段位于边界之内。
- 如果还满足 q k < 0 q_k < 0 qk<0 ,则线段完全在边界之外,因此舍弃该线段。
- 当pk<0, 线段从剪切边界延长线的外部延长到内部。
- 当pk>0,线段从剪切边界延长线的内部延长到外部。
- 当pk≠0,可以计算出线段与边界k的延长线的交点的u值:
算法步骤
- 输入直线段的两端点坐标:(x1,y1)和(x2,y2),以及窗口的四条边界坐标:wyt、wyb、wxl和wxr。
- 若Δx=0,则p1=p2=0。此时进一步判断是否满足q1<0或q2<0,若满足,则该直线段不在窗口内,算法结束。否则,满足q1>0且q2>0,则进一步计算u1和u2。算法转(5)。
- 若Δy=0,则p3=p4=0。此时进一步判断是否满足q3<0或q4<0,若满足,则该直线段不在窗口内,算法结束。否则,满足q3>0且q4>0,则进一步计算u3和u4。算法转(5)。
- 若上述两条均不满足,则有pk≠0(k=1,2,3,4)。此时计算u1u2,u3和u4。求出(umax,umin)赋值给(u1,u2)
- 求得u1和u2后,进行判断:若u1>u2,或者u1>1,则直线段在窗口外,算法结束。若u1<u2,利用直线的参数方程求得直线段在窗口内的两端点坐标。
- 利用直线的扫描转换算法绘制在窗口内的直线段。算法结束。
多边形裁剪
基本思想:
- 将多边形的边界作为一个整体。
- 每次用窗口的一条边界对要裁剪的多边形进行裁剪。
- 体现分而治之的思想。
策略:
- 为窗口各边界裁剪的多边形存储输入与输出顶点表。
- 在窗口的一条裁剪边界处理完所有顶点后,其输出顶点表将用窗口的下一条边界继续裁剪。
- 窗口的一条边以及延长线构成的裁剪线把平面分为两个区域
- 包含窗口区域的区域称为可见侧。
- 不包含窗口区域的域为不可见侧。
Weiler-Atherton多边形裁剪
思想:
-
假定按顺时针方向处理顶点,且将用户多边形定义为Ps,窗口矩形为Pw。
-
从Ps的任一点出发,跟踪检测Ps的每一条边,当Ps与Pw相交时(实交点),按如下规则处理:
- 若是由不可见侧进入可见侧,则输出可见直线段,转(3)
- 若是由可见侧进入不可见侧,从当前交点开始,沿窗口边界顺时针检测Pw的边,用窗口的有效边界去裁剪Ps的边,找到Ps与Pw最靠近当前交点的另一交点,输出可见直线段和由当前交点到另一交点之间窗口边界上的线段,然后返回处理的当前交点
- 沿着Ps处理各条边,直到处理完Ps的每一条边,回到起点为止
相关文章:
大连理工大学选修课——图形学:第五章 二维变换及二维观察
第五章 二维变换及二维观察 二维变换 基本几何变换 图形的几何变换是指对图形的几何信息经过平移、比例、旋转等变换后产生新的图形。 基本几何变换都是相对于坐标原点和坐标轴进行的几何变换。 平移变换 推导: x ′ x T x y ′ y T y xxT_x\\ yyT_y x′xT…...
观察者模式(Observer Pattern)详解
文章目录 1. 什么是观察者模式?2. 为什么需要观察者模式?3. 观察者模式的核心概念4. 观察者模式的结构5. 观察者模式的基本实现简单的气象站示例6. 观察者模式的进阶实现推模型 vs 拉模型6.1 推模型(Push Model)6.2 拉模型(Pull Model)7. 观察者模式的复杂实现7.1 在线商…...
复刻低成本机械臂 SO-ARM100 标定篇
视频讲解: 复刻低成本机械臂 SO-ARM100 标定篇 组装完机械臂后,要进行初始标定,参考github的markdown lerobot/examples/10_use_so100.md at main huggingface/lerobot 只有从臂,所以arms里面只填follower即可 python lerobot…...
idea创建springboot工程-指定阿里云地址创建工程报错
idea创建springboot工程-指定阿里云地址创建工程报错 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】࿱…...
OpenStack HA高可用集群Train版-0集群环境准备
OpenStack HA高可用集群Train版-0集群环境准备 目录 主机配置1.主机名2.网卡配置网卡UUID配置主机名解析配置免密登录防火墙相关配置时间同步配置 二、基础软件安装数据库构建数据库集群设置心跳检测clustercheck准备脚本创建心跳检测用户,(任意控制节点)检测配置文件每个控制节…...
Python3与Dubbo3.1通讯解决方案(dubbo-python)
【文章非VIP可读,如果发现阅读限制为系统自动修改阅读权限,请留言我改回】 概述 最近AI项目需要java与python通讯,两边都是比较新的版本。因此需要双方进行通讯,在这里记录一下所采用的方案和关键点。 JAVA调用Python python通…...
深入探索 Java 区块链技术:从核心原理到企业级实践
一、Java 与区块链的天然契合 1.1 区块链技术的核心特征 区块链作为一种分布式账本技术,其核心特征包括: 去中心化:通过 P2P 网络实现节点自治,消除对中央机构的依赖。不可篡改性:利用哈希链和共识机制确保数据一旦…...
NV214NV217美光闪存固态NV218NV225
NV214NV217美光闪存固态NV218NV225 在当今数据驱动的时代,固态硬盘(SSD)的性能直接决定了计算系统的效率上限。美光科技作为全球存储解决方案的领军者,其NV系列产品凭借尖端技术持续刷新行业标准。本文将围绕NV214、NV217、NV218、…...
第三方组件库:element-uiiviewVant
第三方组件库:element-ui 使用方法: 1.引入样式 <!-- 引入element-ui样式 --><link rel"stylesheet" type"text/css" href"http://unpkg.com/view-design/dist/styles/iview.css">2.引入vue <!-- 引入Vue …...
Qt实现 hello world + 内存泄漏(5)
文章目录 实现hello world的两种方式通过图形化的方式通过纯代码的方式1. 新老头文件的说明2.堆或栈上创建对象的选择3.QString的说明 内存泄漏问题 实现hello world的两种方式 通过图形化的方式 通过图形化的方式,在界面上创建出一个控件,显示出hello …...
13:图像处理—畸变矫正详解
1.制作标定板和描述文件 (用PS软件打印) * 0.00375 mark 点间距 , 不是 点的直径//倒数第二个就是描述文件 gen_caltab(7,7,0.00375,0.5,caltab_30mm.descr,30-30.ps) * 1 比 1 打印 。Photoshop 格式 2.把标定板调正 调正的目的是为了…...
Prompt compress 技术探究-LLMLingua
Prompt summary:是通过精心设计的提示词(prompt)引导大型语言模型(如 GPT-4)生成特定风格或结构的摘要。其目标不仅是压缩信息,还包括满足特定的格式要求、风格偏好或任务需求,所以和一般的文本…...
Python|Pyppeteer实现自动登录小红书(32)
前言 本文是该专栏的第32篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 本文中,笔者以小红书为例,基于Pyppeteer实现自动登录“小红书”。 需要注意的是,对Pyppeteer不太熟悉的同学,可往前翻阅本专栏前面介绍的Pyppeteer知识点,本专栏将带你了解并熟练使…...
Milvus(13):自定义分析器、过滤器
1 自定义分析器 1.1 标准标记符 Milvus 中的standard 令牌分割器根据空格和标点符号分割文本,适用于大多数语言。要配置使用standard 令牌转换器的分析器,请在analyzer_params 中将tokenizer 设置为standard 。 analyzer_params {"tokenizer&quo…...
调试Cortex-M85 MCU启动汇编和链接命令文件 - 解题一则
调试Cortex-M85 MCU启动汇编和链接命令文件 - 解题一则 苏勇 Andrew, 2025-05 最近在Keil中调试一款新的Cortex-M85内核MCU的SDK代码时,从原有其它芯片的工程中引入了汇编语言编写的启动代码和配套的sct文件,结果总是报错,清理到最后&#…...
SpringMVC——第五章:视图View
一、SpringMVC中视图的实现原理 1.Spring MVC视图支持可配置 在Spring MVC中,视图View是支持定制的,例如我们之前在 springmvc.xml 文件中进行了如下的配置: <!--视图解析器--> <bean id"thymeleafViewResolver" class…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.4 数据重复与去重(IDENTITY COLUMN/UNIQUE约束)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:数据质量分析之数据重复与去重(IDENTITY COLUMN/UNIQUE约束)3.4 数据重复与去重3.4.1 数据重复的影响与识别3.4.…...
数据分析之药物-基因-代谢物
记录一下最近的数据分析过程: 假如我有一个Dataframe,有两列[Drug, Gene],我想构造一个矩阵,行名为Drug,列名为Gene,值为0或者1,其中0表示药物的靶点是该基因,0表示不是靶点。 &am…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.2 缺失值检测与处理(NULL值填充/删除策略)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 缺失值检测与处理全攻略:NULL值填充与删除策略实战3.2 缺失值检测与处理3.2.1 缺失值类型与业务影响3.2.1.1 缺失值的三种形态3.2.1.2 业务影响分级 3.2.2 缺失值…...
科普简洁版:同态加密——密码学的未来瑰宝
文章目录 一、同态加密的基本概念1.1 什么是同态加密1.2 同态加密的数学本质1.3 同态加密的类型 二、主要同态加密方案详解2.1 ElGamal加密2.2 Paillier加密2.3 Gentry的完全同态加密方案2.4 BGV方案2.5 BFV方案2.6 CKKS方案 三、同态加密的关键技术3.1 噪声管理技术3.2 多项式…...
时序分解 | Matlab基于WOA-MVMD鲸鱼算法优化多元变分模态分解
时序分解 | Matlab基于WOA-MVMD鲸鱼算法优化多元变分模态分解 目录 时序分解 | Matlab基于WOA-MVMD鲸鱼算法优化多元变分模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 WOA-MVMD鲸鱼算法优化多元变分模态分解时间序列信号分解 可直接运行 分解效果好 适合作为创…...
模型部署与提供服务
工具准备 FastApi (提供接口服务) LLamafactory(模型测试) AutoDL-SSH(隧道工具) 结构目录 app ├── api.sh ├── lawbot_infer.py ├── main.py ├── models.py ├── prompts │ ├── chat.jinja2 │ ├── prediction.jinja2 │…...
【Linux】深入理解程序地址空间
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、什么是程序地址空间 二、深入理解程序地址空间 1. 引例 2. 理解地址转化 3. 再谈程序地址空间 4. 补充知识 总结 前言 在现代操作系…...
基于AWS Marketplace的快速解决方案:从选型到部署实战
1. 引言:为什么选择AWS Marketplace? 在数字化转型的背景下,企业需要快速获取成熟的软件工具和服务以降低开发成本。AWS Marketplace 作为亚马逊云科技的官方应用商店,提供超过万款预配置的第三方和AWS原生解决方案,涵…...
Android 常用输入控件
一 控件名称 TextView二 示例代码 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.a…...
ubuntu修改时区和设置24小时格式时间
这里写目录标题 一、修改时区二、设置24小时格式时间endl 一、修改时区 使用timedatectl命令更改当前时区为东八区[rootubuntu24-16:~]# timedatectl list-timezones | grep -i shanghai Asia/Shanghai [rootubuntu24-16:~]# timedatectl set-timezone Asia/Shanghai [rootubu…...
Android之Button、ImageButton、ChipGroup用法
一 控件名称及UI代码 Button、ImageButton、ChipGroup <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app=&qu…...
【中间件】brpc_基础_用户态线程中断
bthread之用户态线程中断 源码 1 简介 interrupt_pthread 核心功能是 通过信号机制中断阻塞的 pthread 线程,以实现线程的协作式中断。 2 核心功能与设计 2.1 信号选择与注册 信号选择:使用 SIGURG 作为中断信号。 原因:SIGURG 通常用于…...
MATLAB中tabulate函数——先验概率的简单估计
load fisheriris X meas(:,1:2); Y species; labels unique(Y); tabulate(Y)ValueCountPercentsetosa5033.33%versicolor5033.33%virginica5033.33%...
修复笔记:SkyReels-V2 项目中的 torch.load 警告
#工作记录 一、问题描述 在运行项目时,出现以下警告: FutureWarning: You are using torch.load with weights_onlyFalse (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pic…...
[特殊字符] 人工智能大模型之开源大语言模型汇总(国内外开源项目模型汇总) [特殊字符]
Large Language Model (LLM) 即大规模语言模型,是一种基于深度学习的自然语言处理模型,它能够学习到自然语言的语法和语义,从而可以生成人类可读的文本。 所谓 "语言模型",就是只用来处理语言文字(或者符号…...
自监督学习(Self-supervised Learning)李宏毅
目录 Self-supervised Learning简介: BERT : How to use BERT case1:sequence to class 语言积极性OR消极性判断 case2:sequence to sequence句子中的词语词性标注 case3:sequence2 to class两个句子是不是一个为前提一个为…...
数字化时代下,软件测试中的渗透测试是如何保障安全的?
在如今数字化与信息化的时代,软件测试中存在渗透测试,其位置十分重要,它借助模拟恶意攻击的方式,去发现软件系统所存在的漏洞以及安全问题,这是保障软件安全的关键环节,接下来我会对它的各个方面进行详细介…...
内容中台的AI中枢是什么?
智能算法与知识图谱融合引擎 现代内容中台的核心竞争力在于智能算法与知识图谱的深度融合,这种技术组合构建了动态演化的认知网络。通过将机器学习模型与领域知识图谱进行耦合,系统不仅能识别文本、图像、视频等多模态数据的关联特征,还能实…...
PostgreSQL 的 REINDEX 命令
PostgreSQL 的 REINDEX 命令 REINDEX 是 PostgreSQL 中用于重建索引的重要命令,它可以解决索引损坏、索引膨胀或性能下降等问题。 一 REINDEX 基本语法 -- 重建单个索引 REINDEX [ ( option [, ...] ) ] { INDEX | TABLE | SCHEMA } [ CONCURRENTLY ] name REIND…...
GNOME扩展:Bing壁纸
难点 网络请求(Soup) 下载文件(Soup) 读写设置(Gio.Settings) 源码 import GLib from "gi://GLib"; import Gio from gi://Gio; import St from gi://St; import Soup from gi://Soup;import { Extension } from resource:///org/gnome/shell/extensions/extens…...
BUUCTF——Fake XML cookbook
BUUCTF——Fake XML cookbook 进入靶场 只有一个登录框 先弱口令万能密码试一下吧 弱口令和万能密码都失败了 找其他突破口 F12看看 发现xml代码 function doLogin(){var username $("#username").val();var password $("#password").val();if(user…...
【数据结构】线性表--链表
【数据结构】线性表--链表 一.前情回顾二.链表的概念三.链表的实现1.链表结点的结构:2.申请新结点函数:3.尾插函数:4.头插函数:5.尾删函数:6.头删函数:7.在指定结点之前插入:8.在指定结点之后插…...
2022年第十三届蓝桥杯省赛B组Java题解
2022年第十三届蓝桥杯省赛B组Java题解 个人心得: 2022年蓝桥杯省赛Java B组共包含10道题目,其中填空题2道(A、B),编程题8道(C-J)。题目覆盖数论、字符串处理、动态规划、数据结构等核心知识点…...
【操作系统】死锁
1. 定义 死锁是指两个或多个进程(或线程)在执行过程中,因争夺资源而造成的一种僵局,每个进程都无限期地等待其他进程释放它们所持有的资源。在这种情况下,没有任何进程能够继续执行,除非有外部干预。 2. …...
Ubuntu22.04及以上版本buildroot SIGSTKSZ 报错问题
本文提供一种解决 Buildroot SIGSTKSZ 报错途径 解决途径来源参考:Buildroot error when building with Ubuntu 21.10 其出现原因在于 GNU C Library 2.34 release announcement: Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ. When _DYNAMIC_STACK_SIZE_SOU…...
postgresql数据库基本操作
1. 连接 PostgreSQL 数据库 首先,使用 psql 命令行工具连接到数据库。如果是本地连接,命令格式如下: psql -U postgres -d <数据库名称> -h <主机地址>其中: -U postgres:表示以 postgres 用户身份登录…...
【运维】构建基于Python的自动化运维平台:用Flask和Celery打造高效管理工具
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着企业IT基础设施的复杂性不断增加,手动运维已无法满足高效管理的需求。本文详细介绍如何基于Python构建一个自动化运维平台,利用Flask…...
ES6入门---第三单元 模块三:async、await
async function fn(){ //表示异步:这个函数里面有异步任务 let result await xxx //表示后面结果需要等待 } 读取文件里数据实例: const fs require(fs);//简单封装 fs封装成一个promise const readFile function (fileName){return…...
洛谷 P2866 [USACO06NOV] Bad Hair Day S
题目描述 农夫约翰有 N 头奶牛正在过乱头发节。 每一头牛都站在同一排面朝右,它们被从左到右依次编号为 1,2,⋯,N。编号为 i 的牛身高为 hi。第 N 头牛在最前面,而第 1 头牛在最后面。 对于第 i 头牛前面的第 j 头牛,如果 hi>hi1…...
TS 变量类型生成
TS简单类型注解 let count:number 15 let myName:string MIO let isLoading:boolean false let a:null null let b:undefined undefined let s:symbol Symbol()console.log(hello ts)TS数组类型 数组类型两种写法: 问题:数组中只能存在单一类型数…...
工业大模型:从设备诊断到工艺重构
引言 工业大模型正在引发制造业认知革命。据埃森哲研究,到2026年全球工业大模型市场规模将突破280亿美元,其中工艺优化应用占比达42%。本文将系统解析工业大模型的"预训练-领域适配-应用落地"技术路径,并通过设备健康诊断与工艺参数生成的实践案例,展示如何构建…...
【项目篇之统一内存操作】仿照RabbitMQ模拟实现消息队列
我们的操作分为两种,一种是在内存上进行统一的操作,一种是在硬盘上面操作,今天我写的文章是编写了一个MemoryDataCenter类来实现了 在内存上面的统一操作: 实现统一内存操作 如何使用内存来组织数据 创建一个类来统一管理内存上的…...
强化学习机器人模拟器——GridWorld:一个用于强化学习的 Python 环境
GridWorld 是一个为强化学习(Reinforcement Learning, RL)实验设计的多功能 Python 环境。它提供了一个可定制的二维网格,智能体(agent)需要从起始位置导航到目标位置,避开障碍物、穿越泥泞单元格并收集奖励。本篇博客将详细介绍 grid_world.py 代码中实现的 GridWorld 环…...
DeepSeek Copilot idea插件推荐
🌌 DeepSeek Copilot for IntelliJ IDEA 让 AI 成为你的编程副驾驶,极速生成单元测试 & 代码注释驱动开发! 🚀 简介 DeepSeek Copilot 是一款为 IntelliJ IDEA 打造的 AI 编程助手插件,它能够智能分析你的代码逻辑…...