当前位置: 首页 > news >正文

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录

1 三维空间里的旋转与欧拉角,四元数

1.1 欧拉角比较符合直观

1.2 四元数

1.3 下面是欧拉角和四元数的一些参考文章

2 关于旋转的这些知识点

2.1 使用euler欧拉角旋转

2.2 使用quaternion四元数,w,x,y,z

2.3 使用quaternion四元数,类 Vector3.zero 这种固定坐标了,固定的旋转?

2.4 利用unity编辑器,在unity里通过看向一个物体而实现旋转

2.5 互转

2.5.1 使用Euler转化为quaternion四元数

2.5.2 使用quaternion四元数转化为Euler角

3 逐一测试旋转效果

3.1 直接使用Euler角Vector3(0,30,0)来旋转

3.2   直接使用quaternion四元数旋转

3.3 将quaternion四元数转化为Euler角后旋转

3.4 用欧拉角转成四元数后旋转

3.5 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转

3.6 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转

3.7 下面是完整的测试草稿代码

4 未解决的问题

4.1 不了解为啥上面有的时候可以持续旋转,有时候只能旋转1次

4.2 关于下面的匀速代码

5 另外一种匀速代码


1 三维空间里的旋转与欧拉角,四元数

  • 欧拉角,四元数,都是用来表达三维空间里的旋转的

1.1 欧拉角比较符合直观

欧拉角与四元数-CSDN博客文章浏览阅读1.6w次,点赞29次,收藏127次。一、欧拉角静态的定义对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。参考系又称为实验室参考系,是静止不动的。而坐标系则固定于刚体,随着刚体的旋转而旋转。如图所示。设定xyz-轴为参考系的参考轴。称xy-平面与XY-平面的相交为交点线,用英文字母(N)代表。zxz顺规的欧拉角可以静态地这样定义:α\alphaα 是 x-轴与交点线的夹角,β\betaβ 是z-..._欧拉角和四元数的区别https://blog.csdn.net/ViatorSun/article/details/102713679

unity里的E,旋转,很明显表示方式就是欧拉角的3种旋转轴

1.2 四元数

  • 我们用复数(两个数字)可以表示二维上的旋转,那么是不是用三个数字(三元数)可以表示三维空间中的旋转呢?数学家告诉我们不是的,要表示三维空间中的旋转,我们得用四元数。
  • unity 里不只支持欧拉角,也支持用 四元数,表达三维空间里的旋转
  • 四元数的基本数学方程为 : q = cos (a/2) + i(x * sin(a/2)) + j(y * sin(a/2)) + k(z * sin(a/2)) 其中a表示旋转角度,(x,y,z)表示旋转轴。

  • 四元数的定义:q = [w,x,y,z]其中w是实部,当然也有资料会把四元数写成q = [x,y,z,w]其中w是实部。这都是正确的

  • 注意:四元数q,有q^2 = 1.

若想要某个物体(i,j,k)绕着a(x,y,z)轴旋转θ度。

这个旋转用四元数表示就是q = ((x,y,z)sinθ/2, cosθ/2)

该物体用四元数表示为p = ((j,j,k),0)。

那么旋转之后的物体的点为p′,

则:

通过某个公式能算出p′的值。

Quaternion.AngleAxis (30.0f, transform.right) 这个方法的意思是创建一个四元数表示饶transform.right轴旋转30度。

四元数可以用*操作符来进行多个旋转操作比如:

transform.rotation =

Quaternion.AngleAxis (30.0f, transform.right) * Quaternion.AngleAxis (30.0f,transform.up);

也可以用 Quaternion.Euler 欧拉旋转表示四元数旋转比如:

transform.rotation = Quaternion.Euler (new Vector3 (0.0f, 30.0f, 20.0f)) * Quaternion.AngleAxis (30.0f, transform.forward);

如果想对一个向量做旋转做法如下:

Vector3 someVector = new Vector3 (1.0f,1.0f,1.0f);
Vector3 newVector = Quaternion.AngleAxis(90, Vector3.up) * someVector;

Quaternion.LookRotation(某个向量v) 使得物体的朝向和v一致

利用四元数做差值(Quaternion.Slerp)旋转:

transform.rotation = Quaternion.Slerp (transform.rotation,Quaternion.Euler (new Vector3 (0.0f, 30.0f, 0.0f)) * Quaternion.AngleAxis (30.0f, transform.forward),Time.deltaTime * 0.33f);

1.3 下面是欧拉角和四元数的一些参考文章

https://zhuanlan.zhihu.com/p/267359507icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/267359507

https://zhuanlan.zhihu.com/p/513687673icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/513687673

https://www.zhihu.com/question/23005815icon-default.png?t=O83Ahttps://www.zhihu.com/question/23005815

https://zhuanlan.zhihu.com/p/27471300icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/27471300

2 关于旋转的这些知识点

2.1 使用euler欧拉角旋转

  • Vector3 rotate1 = new Vector3(0,30,0);
  • 在unity里表示,绕着Y轴旋转30度

2.2 使用quaternion四元数,w,x,y,z

  • 其中W是实数部分
  • xyz是虚数部分
  • Quaternion quaternion1 = new Quaternion(0,0,0,0);

Quaternion.AngleAxis (30.0f, transform.right)

2.3 使用quaternion四元数,类 Vector3.zero 这种固定坐标了,固定的旋转?

  • Quaternion quaternion2 = Quaternion.identity;

2.4 利用unity编辑器,在unity里通过看向一个物体而实现旋转

  • quaternion2 = Quaternion.LookRotation(new Vector3(0,0,0));


 

2.5 互转

2.5.1 使用Euler转化为quaternion四元数

  • quaternion2 = Quaternion.Euler(rotate1);

2.5.2 使用quaternion四元数转化为Euler角

  • rotate2 = quaternion2.eulerAngles;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//使用euler欧拉角旋转Vector3 rotate1 = new Vector3(0,30,0);//使用quaternion四元数,xyzw?Quaternion quaternion1 = new Quaternion(0,0,0,0);//使用quaternion四元数,类 Vector3.zero 这种固定坐标了,固定的旋转?Quaternion quaternion2 = Quaternion.identity;//利用unity编辑器,在unity里通过看向一个物体而实现旋转//重新给quaternion2赋值quaternion2 = Quaternion.LookRotation(new Vector3(0,0,0));///互转//使用Euler转化为quaternion四元数quaternion2 = Quaternion.Euler(rotate1);//使用quaternion四元数转化为Euler角//给rotate2赋值,需要先定义rotate2Vector3 rotate2 = new Vector3(0,0,0);rotate2 = quaternion2.eulerAngles;}// Update is called once per framevoid Update(){}
}

3 逐一测试旋转效果

3.1 直接使用Euler角Vector3(0,30,0)来旋转

    Vector3 rotate1 = new Vector3(0,30,0);

    this.transform.Rotate(rotate1);  

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//使用euler欧拉角旋转Vector3 rotate1 = new Vector3(0,30,0);this.transform.Rotate(rotate1);     }
}

3.2   直接使用quaternion四元数旋转

  • w,xyz ,其中w是实数部分,xyz都是*i的虚数部分
  • 比如
  • new Quaternion(0.866f,0,0,0.5f);
  • new Quaternion(0,0,0,0);
  • Quaternion.identity;

  •     //quaternion1不能持续旋转这个方法?this.transform.Rotate(quaternion1);
  •     //只能用this.transform.rotation 旋转到指定位置,而不能持续旋转
  •     this.transform.rotation = quaternion1;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//使用euler欧拉角旋转//Vector3 rotate1 = new Vector3(0,30,0);//使用quaternion四元数,w,xyz ,其中w是实数部分,xyz都是*i的虚数部分Quaternion quaternion1 = new Quaternion(0.866f,0,0,0.5f); //quaternion1不能持续旋转这个方法?this.transform.Rotate(quaternion1); //只能用this.transform.rotation 旋转到指定位置,而不能持续旋转this.transform.rotation = quaternion1;}
}

3.3 将quaternion四元数转化为Euler角后旋转

  • quaternion1.eulerAngles 可以将quaternion四元数转化为Euler角
  • rotate2 = quaternion1.eulerAngles;

    Quaternion quaternion1 = new Quaternion(0.866f,0,0,0.5f);

    Vector3 rotate2 = new Vector3(0,0,0);

    rotate2 = quaternion1.eulerAngles;

    this.transform.Rotate(rotate2);  

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){Quaternion quaternion1 = new Quaternion(0.866f,0,0,0.5f); Vector3 rotate2 = new Vector3(0,0,0);rotate2 = quaternion1.eulerAngles;this.transform.Rotate(rotate2);  }
}

3.4 用欧拉角转成四元数后旋转

    // 创建一个表示xx度旋转欧拉角,然后转换为的四元数,表示绕Y轴旋转

    Quaternion rotate3 = Quaternion.Euler(0, 45, 0);

    // 假设你有一个现有的四元数

    Quaternion originalQuaternion = Quaternion.identity;

    // 转换为30度旋转

    Quaternion newQuaternion = rotate3 * originalQuaternion;

    // 应用到游戏对象

    this.transform.rotation = newQuaternion;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){// 创建一个表示xx度旋转欧拉角,然后转换为的四元数,表示绕Y轴旋转Quaternion rotate3 = Quaternion.Euler(0, 45, 0);// 假设你有一个现有的四元数Quaternion originalQuaternion = Quaternion.identity;// 转换为30度旋转Quaternion newQuaternion = rotate3 * originalQuaternion;// 应用到游戏对象this.transform.rotation = newQuaternion;}
}

3.5 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转

  •     this.transform.rotation = Quaternion.AngleAxis (90.0f, transform.right)  *  Quaternion.AngleAxis (30.0f, transform.up);
  • Quaternion.AngleAxis (90.0f, transform.right)    // 绕着right轴X轴旋转90
  • Quaternion.AngleAxis (30.0f, transform.up)       // 绕着up轴y轴旋转30
  • this.transform.rotation 可以实现连续旋转,不知道为啥上面的只能转1次

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){this.transform.rotation = Quaternion.AngleAxis (90.0f, transform.right)  *  Quaternion.AngleAxis (30.0f, transform.up);}
}

3.6 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转

  • 但是其中一个Quaternion 用欧拉角转化而来
  •     this.transform.rotation = Quaternion.Euler (new Vector3 (0.0f, 90.0f, 0.0f))   *  Quaternion.AngleAxis (30.0f, transform.up);

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){this.transform.rotation = Quaternion.Euler (new Vector3 (0.0f, 90.0f, 0.0f))   *  Quaternion.AngleAxis (30.0f, transform.up);}
}

3.7 下面是完整的测试草稿代码

如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotateTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//使用euler欧拉角旋转//Vector3 rotate1 = new Vector3(0,30,0);//this.transform.Rotate(rotate1);   //使用quaternion四元数,xyzw?//Quaternion quaternion1 = new Quaternion(0,0,0,0);//使用quaternion四元数,类 Vector3.zero 这种固定坐标了,固定的旋转?//Quaternion quaternion2 = Quaternion.identity;//利用unity编辑器,在unity里通过看向一个物体而实现旋转//重新给quaternion2赋值// quaternion2 = Quaternion.LookRotation(new Vector3(0,0,0));///互转//使用Euler转化为quaternion四元数//quaternion2 = Quaternion.Euler(rotate1);//使用quaternion四元数转化为Euler角//给rotate2赋值,需要先定义rotate2//Vector3 rotate2 = new Vector3(0,0,0);//rotate2 = quaternion2.eulerAngles;}// Update is called once per framevoid Update(){//使用euler欧拉角旋转//Vector3 rotate1 = new Vector3(0,30,0);//使用quaternion四元数,w,xyz ,其中w是实数部分,xyz都是*i的虚数部分//Quaternion quaternion1 = new Quaternion(0.866f,0,0,0.5f); //quaternion1不能持续旋转这个方法?this.transform.Rotate(quaternion1); //只能用this.transform.rotation 旋转到指定位置,而不能持续旋转//this.transform.rotation = quaternion1;//Quaternion quaternion1 = new Quaternion(0.866f,0,0,0.5f); //Vector3 rotate2 = new Vector3(0,0,0);//rotate2 = quaternion1.eulerAngles;//this.transform.Rotate(rotate2);  // 创建一个表示xx度旋转欧拉角,然后转换为的四元数,表示绕Y轴旋转//Quaternion rotate3 = Quaternion.Euler(0, 45, 0);// 假设你有一个现有的四元数//Quaternion originalQuaternion = Quaternion.identity;// 转换为30度旋转//Quaternion newQuaternion = rotate3 * originalQuaternion;// 应用到游戏对象//this.transform.rotation = newQuaternion;// 多个四元数旋转操作相乘 *,然后转换为的四元数//其中四元数也可以被替换为 欧拉角this.transform.rotation = Quaternion.Euler (new Vector3 (0.0f, 90.0f, 0.0f))   *  Quaternion.AngleAxis (30.0f, transform.up);}
}

4 未解决的问题

4.1 不了解为啥上面有的时候可以持续旋转,有时候只能旋转1次

4.2 关于下面的匀速代码

  • 不理解下面的匀速代码
  • 不理解匀速代码下,为啥改速度没效果?改轴也没效果?

5 另外一种匀速代码

using UnityEngine;public class RotateObject : MonoBehaviour
{// 旋转速度,度/秒public float speed = 30.0f; // 旋转轴public Vector3 axis = Vector3.right; void Update(){// 计算旋转量//Time.deltaTime 是上一帧的时间,可以实现不同机器的匀速播放效果float angle = speed * Time.deltaTime;// 绕axis轴旋转objecttransform.Rotate(axis, angle);}
}

相关文章:

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角,四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…...

走出实验室的人形机器人,将复刻ChatGPT之路?

1月7日,在2025年CES电子展现场,黄仁勋不仅展示了他全新的皮衣和采用Blackwell架构的RTX 50系列显卡,更进一步展现了他对于机器人技术领域,特别是人形机器人和通用机器人技术的笃信。黄仁勋认为机器人即将迎来ChatGPT般的突破&…...

如何使用wireshark 解密TLS-SSL报文

目录 前言 原理 操作 前言 现在网站都是https 或者 很多站点都支持 http2。这些站点为了保证数据的安全都通过TLS/SSL 加密过,用wireshark 并不能很好的去解析报文,我们就需要用wireshark去解密这些报文。我主要讲解下mac 在 chrome 怎么配置的&…...

电脑有两张网卡,如何实现同时访问外网和内网?

要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…...

定义:除了Vue内置指令以外的其他 v-开头的指令(需要程序员自行扩展定义)作用:自己定义的指令, 可以封装一些 dom 操作, 扩展

1.自定义指令(directives) 1.用法 定义:除了Vue内置指令以外的其他 v-开头的指令(需要程序员自行扩展定义)作用:自己定义的指令, 可以封装一些 dom 操作, 扩展额外功能 语法: ① 局部注册 ●inserted:被绑…...

SpringBoot错误码国际化

先看测试效果: 文件结构 1.中文和英文的错误消息配置 package com.ldj.mybatisflex.common;import lombok.Getter;/*** User: ldj* Date: 2025/1/12* Time: 17:50* Description: 异常消息枚举*/ Getter public enum ExceptionEnum {//# code命名规则:模…...

LeetCode 3066.超过阈值的最少操作数 II:模拟 - 原地建堆O(1)空间 / 优先队列O(n)空间

【LetMeFly】3066.超过阈值的最少操作数 II:模拟 - 原地建堆O(1)空间 / 优先队列O(n)空间 力扣题目链接:https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-ii/ 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次…...

深度学习中的模块复用原则(定义一次还是多次)

文章目录 1. 模块复用的核心原则(1)模块是否有**可学习参数**(2)模块是否有**内部状态**(3)模块的功能需求是否一致 2. 必须单独定义的模块(1)nn.Linear(全连接层&#x…...

Mac——Cpolar内网穿透实战

摘要 本文介绍了在Mac系统上实现内网穿透的方法,通过打开远程登录、局域网内测试SSH远程连接,以及利用cpolar工具实现公网SSH远程连接MacOS的步骤。包括安装配置homebrew、安装cpolar服务、获取SSH隧道公网地址及测试公网连接等关键环节。 1. MacOS打开…...

安全测评主要标准

大家读完觉得有帮助记得关注和点赞!!! 安全测评的主要标准‌包括多个国际和国内的标准,这些标准为信息系统和产品的安全评估提供了基础和指导。 一、安全测评的主要标准 1.1、国际标准 ‌可信计算机系统评估准则(TC…...

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器,使用Docker封装qBittorrent时,访问IP:PORT的方式后无法访问到webui,而是提示unauthorized,如图: 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…...

504 Gateway Timeout:网关超时解决方法

一、什么是 504Gateway Timeout? 1. 错误定义 504 Gateway Timeout 是 HTTP 状态码的一种,表示网关或代理服务器在等待上游服务器响应时超时。通俗来说,这是服务器之间“对话失败”导致的。 2. 常见触发场景 Nginx 超时:反向代…...

Vue 实现当前页面刷新的几种方法

以下是 Vue 中实现当前页面刷新的几种方法&#xff1a; 方法一&#xff1a;使用 $router.go(0) 方法 通过Vue Router进行重新导航&#xff0c;可以实现页面的局部刷新&#xff0c;而不丢失全局状态。具体实现方式有两种&#xff1a; 实现代码&#xff1a; <template&g…...

MCP Server开发的入门教程(python和pip)

使用python技术栈开发的简单mcp server 需要安装 MCP server的需要使用python-sdk,python需要 3.10,安装如下 pip install mcpPS: MCP官方使用的是uv包管理工具,我平时使用pip比较多,所以文中以pip为主。因为mcp的一些依赖包版本并不是最新的,所以最好弄一个干净的环境…...

手撕Transformer -- Day7 -- Decoder

手撕Transformer – Day7 – Decoder Transformer 网络结构图 目录 手撕Transformer -- Day7 -- DecoderTransformer 网络结构图Decoder 代码Part1 库函数Part2 实现一个解码器Decoder&#xff0c;作为一个类Part3 测试 参考 Transformer 网络结构 Decoder 代码 Part1 库函数…...

C#异步和多线程,Thread,Task和async/await关键字--12

目录 一.多线程和异步的区别 1.多线程 2.异步编程 多线程和异步的区别 二.Thread,Task和async/await关键字的区别 1.Thread 2.Task 3.async/await 三.Thread,Task和async/await关键字的详细对比 1.Thread和Task的详细对比 2.Task 与 async/await 的配合使用 3. asy…...

使用分割 Mask 和 K-means 聚类获取天空的颜色

引言 在计算机视觉领域&#xff0c;获取天空的颜色是一个常见任务&#xff0c;广泛应用于天气分析、环境感知和图像增强等场景。本篇博客将介绍如何通过已知的天空区域 Mask 提取天空像素&#xff0c;并使用 K-means 聚类分析天空颜色&#xff0c;最终根据颜色占比查表得到主导…...

145.《redis原生超详细使用》

文章目录 什么是redisredis 安装启动redis数据类型redis key操作key 的增key 的查key 的改key 的删key 是否存在key 查看所有key 「设置」过期时间key 「查看」过期时间key 「移除」过期时间key 「查看」数据类型key 「匹配」符合条件的keykey 「移动」到其他数据库 redis数据类…...

Pytorch基础教程:从零实现手写数字分类

文章目录 1.Pytorch简介2.理解tensor2.1 一维矩阵2.2 二维矩阵2.3 三维矩阵 3.创建tensor3.1 你可以直接从一个Python列表或NumPy数组创建一个tensor&#xff1a;3.2 创建特定形状的tensor3.3 创建三维tensor3.4 使用随机数填充tensor3.5 指定tensor的数据类型 4.tensor基本运算…...

【SH】Xiaomi9刷Windows10系统研发记录 、手机刷Windows系统教程、小米9重装win10系统

文章目录 参考资料云盘资料软硬件环境手机解锁刷机驱动绑定账号和设备解锁手机 Mindows工具箱安装工具箱和修复下载下载安卓和woa资源包第三方Recovery 一键安装Windows准备工作创建分区安装系统 效果展示Windows和Android一键互换Win切换安卓安卓切换Win 删除分区 参考资料 解…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...