无题
数学回忆录——旋转矩阵的推导矩阵旋转变换,就是说给定一个角度和点,我们将点绕着一个坐标轴旋转。在旋转过程中发生变化的总是x,y,z三个坐标里面的其中两个,而不让第三个坐标值变化。这意味着旋转路径总在三个坐标轴平面中的一个。
我们想沿着圆圈(x,y)移动到(x',y')。也就是说我们让向量(x,y)转过θ角度。我们假设这个圆的半径是l。则如下:
12345678910111213x = cos(α) * ly = sin(α) * lx' = cos(α+θ) * l = cos(α) * cos(θ) * l - sin(α) * sin(θ) * ly' = sin(α+θ) * l = sin(α) * cos(θ) * l + cos(α) * sin(θ) * lx' = cos(θ)x - sin(θ)yy' = cos(θ)y + sin(θ)x = sin(θ)x + cos(θ)y x' cos(θ) -sin(θ) x = y' sin(θ) ...
无题
Python中将list转为字典dict格式1、将格式为[key, value, key, value]格式的list转换为dict【1】循环123456789101112def method_one(): a = ["1", "2"] b = {} b.update({a[0]: a[1]}) print(b) # {'1': '2'}def method_ones(): a = ["name", "zhangsan", "age", "18"] b = {} for i in range(0, len(a), 2): b[a[i]]= a[i+1] print(b) # {'name': 'zhangsan', 'age ...
无题
C++输出二进制123456789101112#include<iostream>#include<bitset>using namespace std;//必须得加上 int main(){ int a=1000; cout<<"默认下"<<a<<endl; cout<<"十进制"<<dec<<a<<endl; cout<<"八进制"<<oct<<a<<endl;//八进制 cout<<"十六进制"<<hex<<a<<endl; //十六进制 cout<<"二进制"<<bitset<16>(a)<<endl; //输出为十六位二进制数 return 0;}
无题
将uint16_t转换为char[2]以通过套接字(unix)发送1、使用掩码和移位将其分解为字节123uint16_t value = 12345;char lo = value & 0XFF; //11111111char hi = value >> 8; //右移8位
2、反过来组装可获得原值12345uint16_t value = 12345;char lo = value & 0XFF; //11111111char hi = value >> 8; //右移8位uint16_t v = lo | uint16_t(hi) << 8; // 12345
3、使用指针12345678910uint16_t value = 0x434F;char * p16 = (char*)&value;cout<<p16[0]<<" "<<p16[1]<<endl; // O Cchar c16[2];uint16_t ui16 ...
无题
CMake使用粗解1、几个链接参数作用【1】include_directories(添加头文件目录)它相当于g++选项中的-l参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用(这里特指C++,C和Java中用法类似)。
1234include_directories("/opt/MATLAB/R2012a/extern/include")# 相当于添加到下面环境变量# export CPLUS_INCLUDE_PATH = CPLUS_INCLUDE_PATH:$MATLAB/extern/include
【2】link_directories(添加需要链接的库文件目录)语法:link_directories(directory1 directory2 ...)
它相当于g++命令的-L选项的作用,也相当于环境变量中增加LIBRARY_PATH的路径的作用。
1234link_directories("/opt/MATLAB/R2012a/bin/glnxa64")# 相当于添加到下面环境变量# ...
无题
C++中几种字符的转换函数1、double转string【1】使用ostringstream os123456789101112131415#include <iostream>#include <sstream>using namespace std; string convertToString(double d) { ostringstream os; if (os << d) return os.str(); return "invalid conversion";}int main(int argc, char** argv) { //使用convertToString }
【2】std::to_string()方法只能精确到6位小数点123double d = 3.1415926535897932384;std::string str = std::to_string(d);std::cout << str << std::endl; ...
无题
Qt中connect函数的几种用法详解总结1、背景信号与槽机制是QT非常核心的东西,通过信号与槽我们可以将不同的部分有机的结合起来,使得各个组件之间的交互简单高效,信号与曹槽像是设计模式中的观察者模式(我自己觉得是这样),只关心信号何时发来,以及做如何相应,组件之间可以异步或者同步去处理事情。
信号(Signal):就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
槽(Slot):就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
注意 :只有QObject类 ...
无题
Ubuntu下安装最新CMake及CMake简单使用1、前言想把开发环境转移到Linux上,同时也准备阅读些GitHub上的开源代码,开源项目一般都是用cmake管理的。cmake所做的事其实就是告诉编译器如何去编译链接源代码。你也许想问不是有makefile吗,为什么还要它?这里就牵涉到跨平台问题。在Windows平台下是通过project文件去管理这些的,如果不用cmake,那我们为Windows和Linux系统就要写对应的project文件和makefile文件,这无疑是一件繁琐的事,而我们只要编写一次cmake,就可以用在各个平台,而且其语法也简单。
2、步骤【1】卸载已经安装的旧版CMake
若用 cmake 编译过 ros ,千万别执行下面的命令。
因为会把之前用 cmake 编译好的包都给卸载掉。
1sudo apt-get autoremove cmake
【2】文件下载解压12# 在合适文件夹下下载wget https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.tar.gz
12# 并 ...
无题
VirtualBox中如何实现主机与虚拟机(Ubuntu)之间传输文件1、共享主机与虚拟机的粘贴板准备条件:Virtualbox已经加装增强工具(VBoxGuestAddtions.iso)
【1】打开Virtualbox,选择需要共享的虚机,然后点击”设置(S)”
【2】在弹出的菜单中,选择”常规” -> “高级(A)”,而后分别点击”共享粘贴板(S)”及”拖放(D)”下拉框,将之将选择为”双向”,而后点击”确定”即可。
【3】启动此虚机,你会发现你可以通过鼠标拖动来完成文件从主机到虚机的复制,也可以通过CTRL + C在主机中复制字串,而后在虚机中通过CTRL + V来使用这些复制的字串。
2、在主机与虚拟机之间创建共享目录准备条件:Virtualbox已经加装增强工具(VBoxGuestAddtions.iso)
【1】打开Virtualbox,选择需要共享的虚机,然后点击”设置(S)”
【2】在弹出的菜单中选择”共享文件夹”,而后点击右上角的添加按钮(用红笔圈出的区域)
【3】选择你要的共享的主机上的一个目录(如:F:\Virtua ...
无题
Qt中多个信号连接一个槽函数(sender()函数)1、背景多个信号需要执行相应函数的时候,可以选择每个信号创建对应的槽函数去实现功能。但是有些场景我们需要将多个信号绑定到同一个槽函数的状态下,让槽函数根据绑定的不同信号执行不同的功能有两种方法。
在槽函数中获取到sender对象,反向解析出信号的名称,分叉执行。
使用QSingalMapper类,管理多个信号,槽函数的处理变得相对简单。
2、反向获取Sender名称1234QObject::sender() // 在槽函数中获取信号QObject::setObjectName(QString) // 给QObject对象设置名称QObject::objectName() // 获取QObject对象名称QObject_cast<QObject>(object) // 强转对象类型
123456QObject *QObject::sender() constQTimeEdit *editor = qobject_cast<QTimeEdit *>(sender()); QObjec ...