GL(m)的拓扑结构,泡利矩阵暂记

这篇博客深入探讨了李群GL(m)与李代数gl(m)之间的关系,并详细阐述了特殊正交群SO(3)的流形结构,将其比喻为半径为π的“实心球体”。通过讲解对径认同的概念,解释了SO(3)的几何特性。此外,文章还涉及泡利矩阵,指出它们在厄米矩阵中的角色,并展示了如何构造SU(2)与SO(3)之间的代数同构。最后,通过Python代码实现了SO(3)旋转的可视化,直观展示旋转效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GL(m)

在这里插入图片描述
李 群 与 李 代 数 的 关 系 G L ( m ) ( 矩 阵 d e t 非 零 ) ↦ g l ( m ) ( 也 为 矩 阵 , 任 意 m 方 阵 ) 李群与李代数的关系\\ GL(m)(矩阵det非零)\mapsto gl(m)(也为矩阵,任意m方阵) GL(m)(det)gl(m)(m)

SO(3)

S O ( 3 ) 的 流 型 是 半 径 为 π 的 " 实 心 球 体 " , 球 体 每 一 点 就 是 S O ( 3 ) 的 一 个 群 元 , 其 与 远 点 的 向 量 即 为 旋 转 轴 , 距 离 即 为 角 度 SO(3)的流型是半径为\pi 的"实心球体",\\ 球体每一点就是SO(3)的一个群元,其与远点的向量即为旋转轴,距离即为角度 SO(3)π""SO(3),
在这里插入图片描述
" 实 心 球 体 " 是 一 种 粗 略 的 说 法 , 需 要 将 Z 与 Z ’ 认 同 为 ( 粘 起 来 , 商 拓 扑 ) 同 一 个 点 , 叫 做 对 径 认 同 "实心球体"是一种粗略的说法,需要将Z与Z’认同为(粘起来,商拓扑)同一个点,叫做对径认同 ""ZZ()
在这里插入图片描述
O ( m ) ↦ o ( m ) S O ( m ) ↦ s o ( m ) o ( m ) = s o ( m ) = { m 实 方 阵 A ∣ A T = − A } O(m) \mapsto o(m) \\ SO(m) \mapsto so(m) \\ o(m) =so(m) =\{ m实方阵A| A^T=-A \} \\ O(m)o(m)SO(m)so(m)o(m)=so(m)={mAAT=A}

泡利矩阵

泡 利 矩 阵 τ i 是 厄 米 的 , 不 是 反 厄 的 , 连 基 底 都 不 是 , 需 要 略 加 改 造 。 泡利矩阵\tau_i是厄米的,不是反厄的,连基底都不是,需要略加改造。 τi
任 何 厄 米 矩 阵 乘 虚 单 位 i 都 是 反 厄 的 任何厄米矩阵乘虚单位i都是反厄的 i
乘 − i 2 , 基 矢 E i = − i 2 τ i 乘-\frac{i}{2},基矢E_i=-\frac{i}{2}\tau_i 2i,Ei=2iτi
这 样 结 构 张 量 就 简 单 了 [ E 1 , E 2 ] = E 1 E 2 − E 2 E 1 = E 3 [ E 2 , E 3 ] = E 2 E 3 − E 3 E 2 = E 1 [ E 3 , E 1 ] = E 3 E 1 − E 1 E 3 = E 2 与 s o ( 3 ) 的 一 样 , 所 以 ∃ 代 数 同 构 ψ   s u ( 2 ) → s o ( 3 ) , ψ ( E i ) = A i 但 是 S U ( 2 ) ≠ S O ( 3 ) 这样结构张量就简单了\\ [E_1,E_2]=E_1E_2 -E_2E_1=E_3\\ [E_2,E_3]=E_2E_3 -E_3E_2=E_1\\ [E_3,E_1]=E_3E_1 -E_1E_3=E_2\\ 与so(3)的一样,所以\exists 代数同构 \psi \ su(2)\rightarrow so(3), \psi(E_i)=A_i \\ 但是 SU(2)\neq SO(3) [E1,E2]=E1E2E2E1=E3[E2,E3]=E2E3E3E2=E1[E3,E1]=E3E1E1E3=E2so(3)ψ su(2)so(3),ψ(Ei)=AiSU(2)=SO(3)

π : S U ( 2 )     2 t o 1     → S O ( 3 ) \pi :SU(2)\overrightarrow{\ \ \ 2to1 \ \ \ } SO(3) π:SU(2)   2to1    SO(3)

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from scipy.linalg import expm,logm
from numpy import pi,sin,cos,tan,arccos,matmul
from numpy.linalg import norm
# import matplotlib  as plt
import matplotlib.pyplot as plt
# from robotools import Euler_Rodrigues,SE3tose3

np.set_printoptions(precision=3,suppress=True)
deg = pi/180

def vec2sM(vec):# https://blog.youkuaiyun.com/ResumeProject/article/details/118913851
	return np.array([
			[0,-vec[2],vec[1]],
			[vec[2],0,-vec[0]],
			[-vec[1],vec[0],0]
		])

def sM2vec(sM):
	return np.array([sM[2][1],sM[0][2],sM[1][0]])
x = np.array([1,0,0])
y = np.array([0,1,0])
z = np.array([0,0,1])
dotnum = 20
s = np.array([1,1,1])


X = np.empty([dotnum,3])
Y = np.empty([dotnum,3])
Z = np.empty([dotnum,3])

w=np.linspace(0,1,dotnum)
for i in range (dotnum):
    li=w[i]*s
    M = vec2sM(li)
    A = expm(M)
    X[i] = np.dot(A, x)
    Y[i] = np.dot(A, y)
    Z[i] = np.dot(A, z)





#figure:新的画布
fig=plt.figure()
#axes:坐标轴
ax1=plt.axes(projection='3d')
ax1.scatter3D(0,0,0,cmap='Blues')#绘制散点图
ax1.scatter3D(X[:,0],X[:,1],X[:,2],cmap='Blues')#绘制散点图
ax1.scatter3D(Y[:,0],Y[:,1],Y[:,2],cmap='Blues')#绘制散点图
ax1.scatter3D(Z[:,0],Z[:,1],Z[:,2],cmap='Blues')#绘制散点图
plt.plot([0,0,0], s, label='x')

从李代数到李群的指数映射并不总是到 上,即使该群是连通的(尽管对于紧致或幂零的连通群,它确实映射到李群)

在这里插入图片描述

<think>好的,用户想了解如何在OpenCascade中使用OpenGL进行绘图,需要示例或教程。首先,我得回忆一下OpenCASCADE和OpenGL的集成方式。根据提供的引用,特别是引用[1]和[2],他们提到了在C++中使用JNI接口和MFC的示例。这说明OpenCASCADE通常需要与特定的GUI框架结合,比如MFC或Qt,而OpenGL用于渲染。 用户的问题可能涉及如何将OpenCASCADE生成的几何体通过OpenGL绘制出来。我需要分步骤解释,可能包括初始化OpenGL上下文、创建几何体、设置视图等。同时,引用[1]提到创建立方体并在OpenGL视图中显示,这可能涉及到将OpenCASCADE的拓扑结构转换为OpenGL可识别的顶点数据。 另外,引用[3]提到AIS_Line的使用,这可能与显示交互对象有关。可能需要解释如何在交互上下文中管理这些对象,并与OpenGL集成。需要确保用户了解事件循环的重要性,如处理窗口事件和重绘视图。 用户可能需要具体的代码示例,例如如何将立方体的数据传递给OpenGL。根据引用[1]中的JNI函数,可能需要将数据从OpenCASCADE导出,转换为顶点数组或缓冲区对象。还要考虑在onDrawFrame中如何调用OpenGL的绘制命令。 可能需要注意的步骤包括:初始化OpenGL的环境设置,如视口、投影矩阵;处理几何数据的转换;以及确保OpenCASCADE和OpenGL之间的数据同步。同时,需要提醒用户不同GUI框架(如Qt或MFC)的集成差异,如事件循环的处理。 最后,用户可能对性能优化或常见问题感兴趣,比如如何高效渲染复杂模型或处理交互事件。需要确保回答结构清晰,步骤明确,并引用提供的参考资料来支持关键点。</think>在OpenCASCADE中结合OpenGL进行三维模型绘制的核心流程可分为**环境初始化、几何体创建、视图管理**三个步骤。以下是基于MFC框架的集成示例: ### 一、环境初始化 1. **OpenGL上下文创建**:在MFC的`OnCreate`函数中初始化OpenGL上下文 ```cpp BOOL CGLView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if(CWnd::OnCreate(lpCreateStruct) == -1) return -1; // 初始化OpenGL上下文 InitializeOpenGL(); return 0; } ``` 2. **视口设置**:在`OnSize`中设置投影矩阵 ```cpp void CGLView::OnSize(UINT nType, int cx, int cy) { glViewport(0, 0, cx, cy); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)cx/(GLfloat)cy, 0.1f, 100.0f); // [^1] } ``` ### 二、几何体创建与转换 1. **生成立方体数据**:使用OpenCASCADE创建几何体 ```cpp TopoDS_Shape CreateCube(double size) { BRepPrimAPI_MakeBox boxMaker(size, size, size); return boxMaker.Shape(); } ``` 2. **数据转换**:将拓扑结构转换为OpenGL顶点数组 ```cpp void ConvertToGLArrays(const TopoDS_Shape& shape, std::vector<GLfloat>& vertices) { // 三角剖分处理 BRepMesh_IncrementalMesh mesh(shape, 0.1); // [^3] // 提取顶点坐标... } ``` ### 三、绘制与交互 1. **渲染循环**:在`OnDraw`中执行绘制 ```cpp void CGLView::OnDraw(CDC* pDC) { wglMakeCurrent(m_hDC, m_hRC); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(0,0,5, 0,0,0, 0,1,0); // 摄像机设置 // 绘制转换后的顶点数据 glDrawArrays(GL_TRIANGLES, 0, vertexCount); SwapBuffers(m_hDC); } ``` 2. **交互处理**:通过AIS_InteractiveContext管理选择操作[^3] ```cpp void HandleMouseEvent(UINT message, CPoint point) { if(message == WM_LBUTTONDOWN){ m_context->Select(...); // 处理对象选择 RedrawWindow(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值