碰撞检测GJK算法论文解析三

article/2025/9/25 0:24:52

碰撞检测GJK算法论文解析三

  • 再探Appendix Ⅱ
    • 内容详解
  • 再探The Distance Subalgorithm
    • 内容详解
      • 过程1
      • 过程2
      • 过程3

这里要先纠正上篇文章的一些错误,就是上篇文章的最后其实并没有证明定理3,而只是给出了仿射集系数向量 λ \lambda λ的解的形式,而没有进一步说明如何从定理3的各个条件推导出结论;然后是之前把余子式和代数余子式的概念混杂在一起了,所以文中有些描述也错了。对于以上两点疏忽,我向大家道个歉。我修改了上篇文章的一些描述,整体内容没有变化,所以这篇文章继续从附录二开始,然后讲完第五部分。
为防止混乱,我这里先说明一下,文章内有时候会用 y i y_i yi表示点,有时候又会用 x i x_i xi表示点,但无论如何,只要是同一类型的符号就代表是在同一个集合内的,关键是抓住定义,所以不用纠结用的是哪一个符号。

再探Appendix Ⅱ

内容详解

在上一篇文章的最后,我们得到了仿射集系数 λ i \lambda^i λi的形式,即下式:
λ i = Δ i ( Y S ) / Δ ( Y S ) \lambda^i = \Delta_i(Y_S) / \Delta(Y_S) λi=Δi(YS)/Δ(YS)然后进入引理1的分析。
引理1:当且仅当 Y S Y_S YS是仿射独立时,行列式 Δ ( Y S ) > 0 \Delta(Y_S) \gt 0 Δ(YS)>0。要证明这条引理,首先需要回顾(40)式和(41)式:
公式
然后将 A S A_S AS第一列除第一个元素外都变成0,也就是论文里提到的第二行之后每一行加上 ( x 1 − x i ) ⋅ x 1 (x_1 - x_i) · x_1 (x1xi)x1(看到 ( x 1 − x i ) ⋅ x 1 (x_1 - x_i) · x_1 (x1xi)x1和第一列的元素有什么区别吗?就是差一个负号)。这样的话 A S A_S AS就会变成下面的矩阵:
∣ 1 1 . . . 1 0 ( x 2 − x 1 ) ⋅ x 2 − ( x 2 − x 1 ) ⋅ x 1 . . . ( x 2 − x 1 ) ⋅ x r − ( x 2 − x 1 ) ⋅ x 1 . . . . . . . . . . . . 0 ( x r − x 1 ) ⋅ x 2 − ( x r − x 1 ) ⋅ x 1 . . . ( x r − x 1 ) ⋅ x r − ( x r − x 1 ) ⋅ x 1 ∣ = ∣ 1 1 . . . 1 0 ( x 2 − x 1 ) ⋅ ( x 2 − x 1 ) . . . ( x 2 − x 1 ) ⋅ ( x r − x 1 ) . . . . . . . . . . . . 0 ( x r − x 1 ) ⋅ ( x 2 − x 1 ) . . . ( x r − x 1 ) ⋅ ( x r − x 1 ) ∣ \begin{vmatrix} 1 & 1 & ... & 1 \\ 0 & (x_2 - x_1)·x_2- (x_2 - x_1)·x_1& ... & (x_2 - x_1)·x_r- (x_2 - x_1)·x_1\\ ...& ... & ... & ...\\ 0 & (x_r - x_1)·x_2- (x_r - x_1)·x_1 & ... & (x_r - x_1)·x_r- (x_r - x_1)·x_1 \end{vmatrix} = \\ \begin{vmatrix} 1 & 1 & ... & 1 \\ 0 & (x_2 - x_1)·(x_2-x_1)& ... & (x_2 - x_1)·(x_r- x_1)\\ ...& ... & ... & ...\\ 0 & (x_r - x_1)·(x_2- x_1) & ... & (x_r - x_1)·(x_r- x_1) \end{vmatrix} 10...01(x2x1)x2(x2x1)x1...(xrx1)x2(xrx1)x1............1(x2x1)xr(x2x1)x1...(xrx1)xr(xrx1)x1=10...01(x2x1)(x2x1)...(xrx1)(x2x1)............1(x2x1)(xrx1)...(xrx1)(xrx1)等式的右边是不是很有规律?它可以变成 Q S T Q S Q^T_SQ_S QSTQS,其中 Q S Q_S QS是矩阵:
在这里插入图片描述
这里要注意, x i x_i xi是列主序的向量,所以 Q S Q_S QS确实是一个矩阵。当然你可以把 x i x_i xi都拆开再进行矩阵的乘法,不过得到的是一样的结果。根据行列式的计算公式有: d e t ( A S ) = d e t ( Q S T Q S ) det(A_S) = det(Q^T_SQ_S) det(AS)=det(QSTQS),所以 d e t ( A S ) ⩾ 0 det(A_S) \geqslant 0 det(AS)0,并且矩阵 r a n k ( A S ) = r a n k ( Q S ) rank(A_S) = rank(Q_S) rank(AS)=rank(QS)(rank代表矩阵的秩),如果 d e t ( A S ) > 0 det(A_S) \gt 0 det(AS)>0那么代表 r a n k ( A S ) = r a n k ( Q S ) = r − 1 rank(A_S) = rank(Q_S) = r-1 rank(AS)=rank(QS)=r1,又因为矩阵 A S A_S AS内的元素是集合 Y S Y_S YS内的点的线性组合,那么必然有 d i m Y = r − 1 dim Y = r - 1 dimY=r1。回到第一篇文章,我们可以知道,如果 d i m a f f Y = d i m Y = r − 1 dim \space aff Y = dim Y= r - 1 dim affY=dimY=r1,那么说明 Y S Y_S YS是仿射独立的。至此,引理1证明完毕。
之前提到(30)式有很多新出现的符号,我们还未了解,所以不讲。但是现在我们已经有足够的知识去理解了,而且接下来的内容也需要用到(30)式,所以接下来先返回到第五部分的(30)式,梳理完之后会回到第五部分,这里主要是接着上面的思路,所以没有把(30)式的分析放到第五部分。
(30)式内容如下:
在这里插入图片描述
这里面有三个式子,这里分别称为30.1、30.2以及30.3。(30.1)式我自己是觉得有点疑惑的,与其说是公式,不如说是补充定义,因为只有一个点的话计算这个值也没有什么意义。(30.3)式应该比较好理解,这个就是使用代数余子式计算行列式的公式。关键是(30.2)式,简单来说就是按照(41)式的规律,往 A S A_S AS矩阵加入 y j y_j yj向量后,再取第一行 y j y_j yj那列的代数余子式,这里以2阶的 A S A_S AS矩阵为例
A S = ∣ 1 1 ( y 2 − y 1 ) ⋅ y 1 ( y 2 − y 1 ) ⋅ y 2 ∣ A_S = \begin{vmatrix} 1 & 1 \\ (y_2 - y_1)·y_1 & (y_2 - y_1)·y_2 \end{vmatrix} AS=1(y2y1)y11(y2y1)y2那么加入 y j y_j yj后的矩阵 A S j A^j_S ASj则为:
A S j = ∣ 1 1 1 ( y 2 − y 1 ) ⋅ y 1 ( y 2 − y 1 ) ⋅ y 2 ( y 2 − y 1 ) ⋅ y j ( y j − y 1 ) ⋅ y 1 ( y j − y 1 ) ⋅ y 2 ( y j − y 1 ) ⋅ y j ∣ A^j_S= \begin{vmatrix} 1 & 1 & 1 \\ (y_2 - y_1)·y_1 & (y_2 - y_1)·y_2 & (y_2 - y_1)·y_j \\ (y_j - y_1)·y_1 & (y_j - y_1)·y_2 & (y_j - y_1)·y_j \\ \end{vmatrix} ASj=1(y2y1)y1(yjy1)y11(y2y1)y2(yjy1)y21(y2y1)yj(yjy1)yj
然后根据上一篇文章的内容,可以知道:
Δ j ( Y S ⋃ { y j } ) = ( − 1 ) ( 1 + 3 ) d e t ∣ ( y 2 − y 1 ) ⋅ y 1 ( y 2 − y 1 ) ⋅ y 2 ( y j − y 1 ) ⋅ y 1 ( y j − y 1 ) ⋅ y 2 ∣ \Delta_j(Y_S \bigcup \lbrace y_j \rbrace) = (-1)^{(1 + 3)}det\begin{vmatrix} (y_2 - y_1)·y_1 & (y_2 - y_1)·y_2 \\ (y_j - y_1)·y_1 & (y_j - y_1)·y_2 \\ \end{vmatrix} Δj(YS{yj})=(1)(1+3)det(y2y1)y1(yjy1)y1(y2y1)y2(yjy1)y2如果取最后一行的代数余子式来进行行列式计算,那么:
Δ j ( Y S ⋃ { y j } ) = ( − 1 ) ( 1 + 3 ) ∗ ( − 1 ) ( 1 + 2 ) ( ( y j − y 1 ) ⋅ y 1 ) ( ( y 2 − y 1 ) ⋅ y 2 ) + ( − 1 ) ( 1 + 3 ) ∗ ( − 1 ) ( 1 + 3 ) ( ( y j − y 1 ) ⋅ y 2 ) ( ( y 2 − y 1 ) ⋅ y 1 ) ( a ) \Delta_j(Y_S \bigcup \lbrace y_j \rbrace) = (-1)^{(1 + 3)}* (-1)^{(1 + 2)}((y_j - y_1)·y_1)((y_2 - y_1)·y_2) + (-1)^{(1 + 3)}* (-1)^{(1 + 3)}((y_j - y_1)·y_2)((y_2 - y_1)·y_1) \kern3em \lparen a \rparen Δj(YS{yj})=(1)(1+3)(1)(1+2)((yjy1)y1)((y2y1)y2)+(1)(1+3)(1)(1+3)((yjy1)y2)((y2y1)y1)(a)然后我们仔细分析一下上面这个式子,有没有发现,其实 Δ 1 Y S = ( − 1 ) ( 1 + 1 ) ( ( y 2 − y 1 ) ⋅ y 2 ) \Delta_1Y_S=(-1)^{(1 + 1)}((y_2 - y_1)·y_2) Δ1YS=(1)(1+1)((y2y1)y2) Δ 2 Y S = ( − 1 ) ( 1 + 2 ) ( ( y 2 − y 1 ) ⋅ y 1 ) \Delta_2Y_S=(-1)^{(1 + 2)}((y_2 - y_1)·y_1) Δ2YS=(1)(1+2)((y2y1)y1)
那么(a)式可以写成:
Δ j ( Y S ⋃ { y j } ) = − 1 ∗ Δ 1 Y S ( ( y j − y 1 ) ⋅ y 1 ) + ( − 1 ) ∗ Δ 2 Y S ( ( y j − y 1 ) ⋅ y 2 ) \Delta_j(Y_S \bigcup \lbrace y_j \rbrace) = -1*\Delta_1Y_S((y_j - y_1)·y_1) + (-1)*\Delta_2Y_S((y_j - y_1)·y_2) Δj(YS{yj})=1Δ1YS((yjy1)y1)+(1)Δ2YS((yjy1)y2)这个就是(30.2)式!理解(30.2)式非常重要,因为这是证明定理3的一个关键。想要进一步熟悉的不妨推导一下4阶的 A S A_S AS矩阵。

再探The Distance Subalgorithm

内容详解

有了上面几篇文章的基础,现在我们终于能去证明定理3了,这真的是一个漫长的过程,但也代表我们快要看到曙光了。这一部分虽然是在说第五部分,但是实际上证明的主题还是在附录二上,这样安排是为了思路能够更加连贯(我自己也不想每隔几行就插个标题,然后跳来跳去)。首先我们来看一下定理3的描述。
定理3:当且仅当
\kern3em 1) Δ ( Y S ) > 0 \Delta(Y_S) \gt 0 Δ(YS)>0
\kern3em 2) ∀ i ∈ I S , Δ i ( Y S ) > 0 \forall i \in I_S,\Delta_i(Y_S) \gt 0 iIS,Δi(YS)>0
\kern3em 3) ∀ i ∈ I S ′ , Δ j ( Y S ⋃ { y j } ) ⩽ 0 \forall i \in I_S',\Delta_j(Y_S \bigcup \lbrace y_j \rbrace) \leqslant 0 iIS,Δj(YS{yj})0
时,集合 Y Y Y的凸包离原点最近的点能够以(29)式的形式进行表示。这里要注意的是 I S ′ I_S' IS表示的是 I S I_S IS的补集,也就是说如果 Y = { y 1 , y 2 , y 5 , y 6 } Y = \lbrace y_1, y_2, y_5, y_6\rbrace Y={y1,y2,y5,y6},那么 I = { 1 , 2 , 5 , 6 } I = \lbrace 1, 2, 5, 6\rbrace I={1,2,5,6},然后 Y S = { y 1 , y 5 , y 6 } Y_S = \lbrace y_1, y_5, y_6\rbrace YS={y1,y5,y6},那么 I S = { 1 , 2 , 6 } I_S = \lbrace 1, 2, 6\rbrace IS={1,2,6} I S ′ = { 5 } I_S' = \lbrace 5 \rbrace IS={5}。下面是证明过程。

过程1

首先是根据(41)式,当且仅当下面式子成立:
y ⋅ ( y − y k ) = 0 ∀ k ∈ I S ( 43 ) y · (y - y_k) = 0 \space \space \forall k \in I_S \kern3em \lparen 43\rparen y(yyk)=0  kIS(43)才有 y = v ( a f f Y S ) y =v(aff\space Y_S) y=v(aff YS)。这怎么得到的?我们回到(41)式,然后用 A S A_S AS矩阵的第二行去和 λ \lambda λ向量相乘,得到:
λ 1 ( x 2 − x 1 ) ⋅ x 1 + λ 2 ( x 2 − x 1 ) ⋅ x 2 + . . . + λ r ( x 2 − x 1 ) ⋅ x r = 0 \lambda^1 (x_2 - x_1)·x_1 + \lambda^2 (x_2 - x_1)·x_2 + ... +\lambda^r (x_2 - x_1)·x_r = 0 λ1(x2x1)x1+λ2(x2x1)x2+...+λr(x2x1)xr=0合并一下多项式,得到:
( λ 1 x 1 + λ 2 x 2 + . . . + λ r x r ) ⋅ ( x 2 − x 1 ) (\lambda^1 x_1 + \lambda^2 x_2 + ... +\lambda^r x_r)·(x_2 - x_1) (λ1x1+λ2x2+...+λrxr)(x2x1)根据(12)式,以及 y y y的定义,能得到:
y ⋅ ( x 2 − x 1 ) = 0 ( 1 ) \kern3em y·(x_2 - x_1) = 0 \kern3em(1) y(x2x1)=0(1)
同样的,我们能够得到以下式子:
y ⋅ ( x 3 − x 1 ) = 0 ( 2 ) \kern3em y·(x_3 - x_1) = 0 \kern3em(2) y(x3x1)=0(2)
. . . \kern3em\kern3em ... ...
y ⋅ ( x r − x 1 ) = 0 ( r − 1 ) \kern3em y·(x_r - x_1) = 0 \kern3em(r - 1) y(xrx1)=0(r1)
然后将这r个式子乘以对应的系数 λ i + 1 \lambda^{i + 1} λi+1再相加,我们能得到:
y ⋅ ( λ 2 x 2 + . . . λ r x r − ( λ 2 + . . . λ r ) x 1 ) = 0 y·(\lambda^2x_2 + ...\lambda^rx_r - (\lambda^2+...\lambda^r)x_1) = 0 y(λ2x2+...λrxr(λ2+...λr)x1)=0然后 λ 2 x 2 + . . . λ r x r = y − λ 1 x 1 \lambda^2x_2 + ...\lambda^rx_r = y - \lambda^1x_1 λ2x2+...λrxr=yλ1x1 ( λ 2 + . . . λ r ) = 1 − λ 1 (\lambda^2+...\lambda^r) = 1-\lambda^1 (λ2+...λr)=1λ1,综合这些式子就能得到(43)式,从而也说明了 y = v ( a f f Y S ) y =v(aff\space Y_S) y=v(aff YS)

过程2

y = v ( a f f Y S ) y =v(aff\space Y_S) y=v(aff YS),并且假定定理3的1)和2)都满足,那么从引理1以及(42)式出发,我们可以用(29)式和(31)式来表示 y y y,具体原因其实在文章叙述的过程中已经讲解了,这里就不再阐述。

过程3

定理3的条件1)和3)、(42)式加上(30)式表明 y ⋅ ( y k − y j ) ⩽ 0 y · (y_k - y_j) \leqslant 0 y(ykyj)0,这个代入公式应该也不难理解,所以这里也不再阐述。
综合过程1、2、3,我们能得到以下信息:对于 ∀ x ∈ c o Y \forall x \in coY xcoY,我们有:
x = ∑ i = 1 v α i y i , ∑ i = 1 v α i = 1 , α i ⩾ 0 x = \sum^v_{i = 1}\alpha^iy_i, \space \sum^v_{i = 1}\alpha^i = 1, \alpha^i \geqslant 0 x=i=1vαiyi, i=1vαi=1,αi0这里的点的符号又变了,但不需要太纠结,抓住 ∀ x ∈ c o Y \forall x \in coY xcoY就好,上面的式子就是(12)式。那么我们可以得到下面的式子:
y ⋅ ( y − x ) = ∑ i = 1 v α i y ⋅ ( y − y i ) ⩽ 0 y·(y - x) = \sum^v_{i = 1}\alpha^iy·(y - y_i) \leqslant 0 y(yx)=i=1vαiy(yyi)0然后我们根据(43)式可以知道上面的式子等于0,那么这代表了 g c o Y ( y ) = 0 g_{coY}(y) = 0 gcoY(y)=0 g K ( x ) g_K(x) gK(x)的定义请参照(25)式,从而说明y就是离原点最近的点,即 v ( c o Y ) = y v(co Y) = y v(coY)=y
可能大家会有点晕,最后我梳理一下,简单来说就是使用定理3来找距离原点最近的点,就是上面提到的 y y y,只要满足定理3,那么这个点就是我们要找的点。
那么,我们终于可以写出这个子算法的过程了:
Distance Subalgorithm:对有限集 Y = { y 1 , . . . , y v } ⊂ R m Y = \lbrace y_1,...,y_v \rbrace \subset R^m Y={y1,...,yv}Rm,按一定的索引集构造集合 Y s Y_s Ys,其中 s = 1 , 2 , . . . , σ s = 1, 2, ..., \sigma s=1,2,...,σ σ \sigma σ的定义为:
σ = ∑ k = 1 v [ v ! / ( k ! ( v − k ) ! ) ] \sigma = \sum^v_{k = 1}[v! / (k!(v - k)!)] σ=k=1v[v!/(k!(vk)!)](这里要注意的是 s s s是一个数字,结合 σ \sigma σ的定义可知,在有4个点的情况下,我们可以设定 s = 1 s=1 s=1时, Y s = { y 1 } Y_s=\lbrace y_1\rbrace Ys={y1} s = 2 s=2 s=2时, Y s = { y 2 } Y_s=\lbrace y_2\rbrace Ys={y2} s = 15 s=15 s=15时, Y s = { y 1 , y 2 , y 3 , y 4 } Y_s=\lbrace y_1, y_2, y_3, y_4\rbrace Ys={y1,y2,y3,y4}),然后按照下面的步骤进行处理:
\kern3em 1.s = 1;
\kern3em 2.如果 Y s Y_s Ys中的顶点满足定理3的所有条件,那么使用(29)式以及(31)式对 v ( c o Y ) v(coY) v(coY)进行表示并且返回结果;
\kern3em 3.如果 s < σ s \lt \sigma s<σ,那么s = s + 1,然后返回到步骤1继续执行;
\kern3em 4.如果上述步骤都没有得到结果,说明算法出了问题,返回错误。

到此,GJK的主要内容已经阐述得差不多了,后面我会把第六部分也梳理出来,第六部分主要是让整个算法更加健壮。然后我会加上一个简单的例子,让大家能更好的理解。


http://chatgpt.dhexx.cn/article/M3KprJPk.shtml

相关文章

GJK碰撞检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

物理引擎学习04-GJK计算多边形之间的最近距离

计算多边形之间的最近距离&#xff0c;才是GJK算法原本的目的。只有两个多边形不相交&#xff0c;计算最近距离才有效。如果相交&#xff0c;则最近距离无效&#xff0c;但是可以使用EPA算法要计算碰撞深度。本文的写作目的&#xff0c;主要是对GJK算法的理解和应用。对算法本身…

python碰撞检测算法_GJK碰撞检测算法

现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图。在二进制的世界里,一切就没这么直观了。 GJK(Gilbert-Johnson-Keerthi Distance Algorithm) GJK 就是此次要实现的碰撞检测算法。如果对碰撞算法有过了解的话,大概率听过另一个碰撞检测算法 SAT(Separati…

【计算几何】凸多面体重叠判断算法:GJK 算法详解 C++代码实现二维情形的凸多边形重叠判断

文章目录 一、GJK 算法简介二、前置知识2.1 二维向量的点乘和叉乘2.2 三维向量叉乘2.3 凸多边形2.4 闵可夫斯基差2.5 单纯形2.6 Support 函数 三、GJK 算法讲解3.1 熟悉 GJK 算法流程3.1.1 多边形重叠的情形3.1.2 多边形不重叠的情形 3.2 总结 GJK 算法步骤3.3 讲解 GJK 算法细…

GJK 算法

GJK 算法(Gilbert–Johnson–Keerthi) 翻译自&#xff1a;http://www.dyn4j.org/2010/04/gjk-gilbert-johnson-keerthi/ 今天&#xff0c;我将讨论dyn4j项目随附的其他碰撞检测算法。您可以找到很多GJK文档&#xff0c;但是其中很多实际上是技术性的&#xff0c;主要是因为它…

碰撞检测算法之GJK算法

简介 参考&#xff1a; 碰撞检测算法之GJK算法 - 知乎 (zhihu.com) 运筹优化】凸多面体重叠判断算法&#xff1a;GJK 算法详解 & C代码实现二维情形的凸多边形重叠判断_c 凸多边形_WSKH0929的博客-CSDN博客 物理引擎学习03-GJK碰撞检测算法基础gjk算法游蓝海的博客-CSDN博客…

物理引擎学习05-GJK和EPA计算穿透向量

EPA&#xff0c;是扩展多边形算法(Epanding Polytop Algorithm) &#xff0c;用来计算两个多边形碰撞的穿透深度和方向&#xff0c;可用于将两个发生碰撞的多边形分离。本文的写作目的&#xff0c;主要是对GJK和EPA算法的理解和应用。对算法本身感兴趣的朋友&#xff0c;可以阅…

物理引擎学习03-GJK碰撞检测算法基础

GJK是由Gilbert&#xff0c;Johnson&#xff0c;Keerthi 三位前辈发明的&#xff0c;用来计算两个凸多面体之间的碰撞检测&#xff0c;以及最近距离。GJK算法可以在O(MN)的时间复杂度内&#xff0c;检测出碰撞&#xff0c;算法在每次迭代的过程中&#xff0c;都会优先选择靠近原…

碰撞检测——GJK算法

目录 碰撞检测——GJK算法 1.GJK算法的原理及思想 1.1 Minkowski Sum&#xff08;明可夫斯基和&#xff09; 1.2 Simplex 1.3 support函数 1.4 构建Simplex 2. GJK算法步骤 3. GJK算法的优缺点分析 4. GJK算法与其他相关算法的比较分析 4.1 GJK算法和SAT算法的比较 …

QPM 之悬浮窗设置信息

QPM 开源地址&#xff1a;https://github.com/ZhuoKeTeam/QPM 更多实用信息&#xff1a; 手机的基本信息AndroidManifest.xml 信息App 中所有的 SharePreference 信息可配置的开关网络接口 手机基础信息 再也不用 去手机的复杂界面查看各种数据&#xff1b;再也不用 下载 辅…

QPM访谈问题

QPM&#xff1a;Quantitative Project Management&#xff0c;量化项目管理 一、访谈问题 1、请简要介绍贵司的QPM管理的管理方式&#xff1f; 依据公司整体商业目标和CMMI要求&#xff0c;制定和部署了《量化项目管理过程》和相关的指南、模板。 在项目执行中&#xff0c;…

QPM 性能监控组件——总篇

QPM &#xff08;Quality Performance Monitor&#xff09; 是一个质量性能监控组件&#xff0c;可以很方便的查看当前 App 的性能和常用数据。目前主要运行在 Android 平台上&#xff0c;通过集成 QPM 组件&#xff0c;可以在 App 中通过悬浮窗可视化相关实时数据。意在帮助广…

IDEA快捷键显示参数提示

一、IDEA显示参数的提示 1、理想状态是这样 2、某度了半天 都是让画show parameter 那个勾的&#xff0c;不是我想要的 IDEA默认的快捷键提示是 " ctrl p"&#xff0c;但是我改成eclipse的快捷键后就没有提示了 File---->settings---->keymap 需要给ecli…

Idea设置代码自动提示快捷键

使用eclipse都习惯使用快捷键ALT/ 来代码自动提示&#xff0c;后来使用IntelliJ Idea这个快捷键并不管用&#xff0c;十分不便&#xff0c;这里记录如何使更改idea代码自动提示快捷键。 哪个是代码自动提示快捷键 File–》Settings–》KeyMap(快捷键ctrlalts)进入快捷键设置界…

IDEA提示方法参数的快捷键

在写Java方法的时候有时想让软件提示一下方法的参数&#xff0c;解决方法是将鼠标放置到方法括号里&#xff0c;按下ctrlp&#xff0c;即可显示方法参数

idea 设置代码提示快捷键

Settings->Keymap 搜索框内搜索 completion Main Menu-Code-Code Completion-Basic 设置成对应的快捷键&#xff0c;如 Alt/

IDEA的使用—常用快捷键

IDEA常用快捷键 具体详解视频见于&#xff08;【零基础 快速学Java】韩顺平 零基础30天学会Java&#xff09; 文章目录 前言一、IDEA快捷键是什么&#xff1f;二、IDEA快捷键的设置 1.快捷键12.快捷键23.快捷键3总结 前言 IDEA快捷键能够提升编程速度以及防止出现书写代码时的低…

idea快捷键设置(Idea常用快捷键大全)

目录 友情提醒第一章、IDEA常用快捷键1.1&#xff09;快捷键&#xff1a;查找/提示类1.2&#xff09;快捷键&#xff1a;修改代码类1.3&#xff09;快捷键&#xff1a;光标移动类 第二章、Idea如何修改快捷键2.1&#xff09;已知快捷键&#xff0c;通过搜索快捷键查找2.2&#…

idea快捷键最全最新最好

持续更新(如果文档中没有的&#xff0c;麻烦在评论中添加) 常用快捷键 返回最顶头&#xff1a; home 返回最末尾&#xff1a;end AltInsert 可以新建类&#xff0c;文件&#xff0c;get或set方法&#xff0c;此快捷键又名创造一切 编辑区和文件区的跳转。 …

IntelliJ IDEA 设置代码提示或自动补全的快捷键

对于中国的Java开发者来说&#xff0c;可能使用Eclipse的人最多。 使用Idea的程序员也不少, 而且每个人都在鼓吹其好用之处。 试用半个月&#xff0c;感觉各有千秋&#xff0c;关键看熟练程度和配置是否好用。 自动提示快捷键 有时候希望使用自动补全&#xff0c;因为不偷懒…