sin

matlab练习程序(旋转矩阵、欧拉角、四元数互转)

匿名 (未验证) 提交于 2019-12-02 23:26:52
欧拉角转旋转矩阵公式: 旋转矩阵转欧拉角公式: 旋转矩阵转四元数公式,其中1+r11+r22+r33>0: 四元数转旋转矩阵公式,q0^2+q1^2+q2^2+q3^2=1: 欧拉角转四元数公式: 四元数转欧拉角公式: matlab代码如下: clear all; close all; clc; %欧拉角 x = 0.5; y = 0.6; z = 0.7; Ang1 = [x y z]; %欧拉角转旋转矩阵 Rx = [1 0 0; 0 cos(x) -sin(x); 0 sin(x) cos(x)]; Ry = [cos(y) 0 sin(y); 0 1 0; -sin(y) 0 cos(y)]; Rz = [cos(z) -sin(z) 0; sin(z) cos(z) 0; 0 0 1]; R = Rz*Ry*Rx; R1 = R; %旋转矩阵转欧拉角 x = atan2(R(3,2),R(3,3)); y = atan2(-R(3,1),sqrt(R(3,2)^2+R(3,3)^2)); z = atan2(R(2,1),R(1,1)); Ang2 = [x y z]; %旋转矩阵转四元数 t=sqrt(1+R(1,1)+R(2,2)+R(3,3))/2; q=[t (R(3,2)-R(2,3))/(4*t) (R(1,3)-R(3,1))/(4*t) (R(2,1)-R

标准6轴机器人正反解(2)-正解

◇◆丶佛笑我妖孽 提交于 2019-12-02 23:09:53
连杆变换矩阵 概括起来,求正解即是求坐标系{6}相对于坐标系{0}的变换,这个问题可以分解成6个子问题,即确定6个坐标系{i}相对于坐标系{i-1}的表示,每个变换过程又包含4个子过程,即绕X(i-1)轴旋转alpha(i-1),沿X(i-1)轴平移a(i-1),绕Z(i)轴旋转theta(i),沿Z(i)轴平移d(i); 我们可以得到这个变换为: 将旋转算子和平移算子带入上式,即可得到相邻连杆变换矩阵的一般形式: 求解目标连杆坐标系相对于某坐标系的表示,即从某连杆开始的转换矩阵一直右乘相邻变换矩阵,直到目标矩阵为止;比如求坐标系{N}相对于极坐标系{0}的表示: Matlab实现 以上一篇文章中提到的MDH参数表为例,matlab实现如下: function [ T06 ] = fkine(theta1, theta2, theta3, theta4, theta5, theta6) L1=160; L2=575; L3=130; L4=645; % theta d a alpha DH=[ theta1 0 0 0; theta2 0 L1 pi/2; theta3 0 L2 0; theta4 L4 L3 pi/2; theta5 0 0 -pi/2; theta6 0 0 pi/2]; T01=[cos(DH(1,1)) -sin(DH(1,1)) 0 DH(1,3);

PHP,Mysql根据经纬度计算距离并排序

匿名 (未验证) 提交于 2019-12-02 21:59:42
计算公式: mysql: //Lng1表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度 //a Lng2 为两点经度之差 //6378. 137为地球半径,单位为公里 //计算出来的结果单位为公里 select *,(2 * 6378.137* ASIN ( SQRT ( POW ( SIN ( PI ()*(111.86141967773438-lng)/360),2)+ COS ( PI ()*33.07078170776367/180)* COS (lat * PI ()/180)* POW ( SIN ( PI ()*(33.07078170776367-lat)/360),2)))) as juli from `area` order by juli asc limit 0,20 function GetDistance( $lng1 , $lat1 , $lng2 , $lat2 ){ // 将角度转为狐度 $radLat1 = deg2rad ( $lat1 ); // deg2rad()函数将角度转换为弧度 $radLat2 = deg2rad ( $lat2 ); $radLng1 = deg2rad ( $lng1 ); $radLng2 = deg2rad ( $lng2 ); $a = $radLat1 - $radLat2 ; $b =

CORDIC算法基本原理

▼魔方 西西 提交于 2019-12-02 08:40:31
引言 某些复杂的计算,例如三角函数和除法运算等涉及到大量浮点运算的计算任务,是数字电路天生的瓶颈所在。在某些场景下,可以使用查找表方法或者采用级数展开的方法来实现三角函数等运算功能。但是,这两种方法可能会占用大量的存储资源和硬件乘法计算单元,而想要节省资源,就要以牺牲精度为代价。 相对于前两种方法,CORDIC算法具有很大优势。首先,在计算过程中,它不使用任何的硬件乘法器单元,所涉及的只有移位和累加。然后,对于存储资源的占用,它仅仅需要少量的数据需要预先存储。在实际的数字电路设计中,可以将其设计为流水线方式或者是迭代复用方式,以提高运算速度或者是减少资源占用。 一、矢量旋转公式 CORDIC算法最最基本理论基础,是矢量旋转公式。即矢量 A ( x , y ) A\left( {x,y} \right) A ( x , y ) 顺时针旋转 θ \theta θ 之后,得到的矢量 ( x ′ , y ′ ) \left( {x',y'} \right) ( x ′ , y ′ ) 可以表示为 (式1) : x ′ = x cos ⁡ θ + y sin ⁡ θ , y ′ = y cos ⁡ θ − x sin ⁡ θ . \begin{array}{l} x' = x\cos \theta + y\sin \theta ,\\ y' = y\cos \theta - x\sin

linux 网络编程

帅比萌擦擦* 提交于 2019-12-01 21:49:14
int socket (int domain, int type, int protocol); 建立新的通信端口 int domain  网络层协议 可以填 AF_INET 表示IPv4 AF_INET6 表示IPv6 int type  传输类型 可以填 SOCK_STREAM 表示TCP SOCK_DGRAM 调试UDP int protocol  指定传输协议编号,这里填 0 返回值:成功→套接字文件描述符  失败→ -1 int serfd; serfd = socket(AF_INET,SOCK_STREAM,0); if(serfd == -1) { perror(“socket fail”); exit(-1); } int bind (int sockfd, const struct sockaddr *addr,socklen_t addrlen); 将服务器的地址信息与套接字进行绑定 int sockfd          套接字文件描述符 const struct sockaddr *addr  指向服务器地址信息的指针 struct sockaddr_in {   unsigned short int sin_family;  网络层协议对应的宏 AF_INET表示IPv4   uint16_t sin_port;        端口号   struct

matlab学习笔记8 基本绘图命令-基本绘图操作

北战南征 提交于 2019-12-01 10:06:42
一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作 觉得有用的话,欢迎一起讨论相互学习~ Follow Me 参考书籍 《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷 《MATLAB技术大全》葛超等编著 感谢葛老师的书籍,让我领略到matlab的高效 MATLAB的基本绘图函数包括line函数、plot函数和polar函数,line函数是直角坐标系中简单绘图函数,plot函数是直角坐标系中常用的绘图函数,而polar函数是极坐标中的绘图函数。 一个完整的图形应该包括图形的生成、坐标轴名称、图形的标题、图形中曲线的注释和图形中曲线的线性及颜色等方面。 在一张图中分别打印sin和cos函数曲线 x=0:0.05*pi:2*pi; %按步长赋值生成x数组 y1=sin(x); y2=cos(x); %生成正弦、余弦函数值数组y1、y2 plot(x,y1,'r*',x,y2,'m+') %在窗口中画出正弦、余弦曲线 使用subplot创建多重子图 a=subplot(m,n,i):此命令将当前窗口分割成m*n个子图,并将第i个子图作为当前视图,返回值a为当前视图的句柄值。其中每个子图都完全等同于一个完整的图形窗口,可在其中完成所有图形操作命令。这些图按行编号,即位于第口行b列处是其第(a-1)n+b个子图。 x=(

三维变换矩阵左乘和右乘分析

笑着哭i 提交于 2019-12-01 09:58:25
我在前面博客中提到,当三维坐标点发生旋转时,如果采用 矩阵运算就会需要考虑“左乘”和“右乘”。若绕静坐标系(世界坐标系)旋转,则左乘,也是变换 矩阵*坐标 矩阵;若是绕动坐标系旋转(自身建立一个坐标系),则右乘,也就是坐标 矩阵*变换 矩阵。 但现实中,我们只是对一个图像、点云进行旋转,则均是左乘实现 举例 对坐标点进行三维绕z轴逆时针旋转60度 如果以逆时针旋转为正,则 左乘 T_Unclockwise = cos(60°) -sin(60°) 0 sin(60°) cos(60°) 0 0 0 1.0000 A = [10;20;30] 如果以顺时针旋转为正,则 左乘 T_Clockwise = cos(-60°) sin(-60°) 0 -sin(-60°) cos(-60°) 0 0 0 1.0000 注意上述旋转 矩阵正负号不同,有些书上坐标变换是右乘,其实质是A'*inv(T_Unclockwise(60°)),还是逆时针为正,这里不建议写成右乘 T_Clockwise(-60°) *A = T_Unclockwise(60°) *A %%逆时针旋转60度 ans = -12.3200 1.3400 30.0000 T_Clockwise(60°)= inv(T_Unclockwise(60°)),互逆的,仅限旋转 矩阵,加入平移和缩放参数后的变换 矩阵不适用。

(乙)1051 复数乘法 (15 分)

瘦欲@ 提交于 2019-12-01 06:02:34
题目: 复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i​2​​=−1;也可以写成极坐标下的指数形式 (R×e​(Pi)​​),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 (R(cos(P)+isin(P))。 现给定两个复数的 R 和 P,要求输出两数乘积的常规形式。 输入格式: 输入在一行中依次给出两个复数的 R​1​​, P​1​​, R​2​​, P​2​​,数字间以空格分隔。 输出格式: 在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i 思路: 想做出来这道题,首先要知道复数乘法的运算法则。 两个复数:z1=a1+b1*i ,z2=a2+b2*i; 乘积:z1*z2=a1*a2 + a1*b2*i + a2*b1*i + b1*b2*i*i; 因为i*i,所以结果是: z1*z2=a1*a2 - b1*b2 + (a1*b2 + a2*b1)*i ; 其次,看懂题意:A+Bi=(R(cos(P) + i*sin(P)),即,A+Bi=R*cos(P)+ R*sin(P)*i; A=R*cos(P),B=R*sin(P); 那么 z1

每日一题_190930

懵懂的女人 提交于 2019-11-30 15:18:00
在 \(\triangle ABC\) 中,若 \(\dfrac{b}{a}+\dfrac{a}{b}=4\cos C\) , \(\cos (A-B)=\dfrac{1}{6}\) ,则 \(\cos C=\underline{\qquad\qquad}\) . 解析: 法一 由题有 \[ \cos C=\dfrac{a^2+b^2}{4ab}=\dfrac{a^2+b^2-c^2}{2ab}.\] 因此 \(a^2+b^2=2c^2\) .于是在$\triangle ABC $中应用正弦定理可得 \[ \dfrac{c^2}{\sin^2C}=\dfrac{a^2}{\sin^2A}=\dfrac{b^2}{\sin^2B}=\dfrac{a^2+b^2}{\sin^2A+\sin^2B}.\] 即有 \[ \begin{split} \dfrac{1}{\sin^2C}& =\dfrac{4}{1-\cos 2A+1-\cos 2B}\\ &=\dfrac{2}{1-\cos (A+B)\cos(A-B)}\\ &=\dfrac{2}{1+\dfrac{1}{6}\cos C}. \end{split}\] 解得 \(\cos C=\dfrac{2}{3}\) 或 \(-\dfrac{3}{4}\) ,显然 \(\cos C>0\) ,因此 \(\cos C=\dfrac{2

用Qt 画一个心形

僤鯓⒐⒋嵵緔 提交于 2019-11-30 00:48:47
MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimer> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); void timerEvent(QTimerEvent *); void paintEvent(QPaintEvent *event); private: int m_x,m_y; int m_k; float m_t; }; #endif // MAINWINDOW_H MainWindow.cpp #include "mainwindow.h" #include <QDebug> #include <math.h> #include <QPainter> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setFixedSize(600,600); m_k = 10; m_t = 0; startTimer(1); } MainWindow::~MainWindow() { } void