2 绿竹巷人

尚未进行身份认证

我要认证

不想做算法工程师的算法工程师

等级
TA的排名 6w+

离散点的曲率计算

描述我有一个点集,里面都是[x,y]这样的二维点,这个点集能形成一个曲线。在并不想去求这个曲线的表达式时,怎么得到某一点的曲率呢相关知识曲率的定义是:针对曲线上某个点的切线方向角对弧长的转动率,而曲率的倒数就是曲率半径K  =  ∣Δθl∣  =  ∣1r∣  K\; =\; \left| \frac{\Delta \theta }{l} \right|\; =\; \left| \frac{1}{r} \right|\; K=∣∣∣∣​lΔθ​∣∣∣∣​=∣∣∣∣​r1​∣∣∣∣​式子中KK

2020-08-08 19:16:26

C++在终端输入命令时传入参数

描述运行代码时,想通过终端命令传入参数举例子在Ubuntu终端下某一路径下,有一个可执行程序detectcd detect/./detect而我想执行两种不同的操作,使程序不用重新编译就能达到这一目的cd detect/./detect online ./detect offline代码你最开始学C++代码时每次都要写到的int main(int argc, char* argv[])就是干这事儿的代码if (argc > 1 && (strcmp(a

2020-08-04 19:42:35

Eigen矩阵colPivHouseholderQr().solve()求解Ax=b

描述使用eigen库求解Ax=b代码#include <Eigen/Dense>Eigen::Matrix2d A;A << 1,2, 4,5;Eigen::Vector2d b(3, 4);Eigen::Vector2d C = A.colPivHouseholderQr().solve(b);std::cout<<C<<std::endl;输出的结果是-2.33333 2.66667代码中的colPivHouseh

2020-07-30 22:35:37

弧度角归一化

描述在编写代码时,一般都是使用弧度角进行计算。弧度角可以是任意的,但作为工程处理来说,一般需要弧度角保持在 -π ~ π 之间代码实现方式是有很多的,这里贴出的是百度apollo代码中的实现方式#include <math.h>double NormalizeAngle(double angle) { double a = fmod(angle + M_PI, 2.0 * M_PI); if (a < 0.0) { a += (2.0 *

2020-07-30 15:41:52

二维数据坐标变换

描述存在两个坐标系,同一个点在两个坐标系下的表示关系坐标变换1. 基坐标系转到自定义坐标系基坐标系下有一个点,点为(x,y),自定义坐标系相对于基坐标系先绕原点O旋转角度为θθθ,再平移(xT,yTx^{T}, y^{T}xT,yT)则这个点在自定义坐标系下的位置(x’,y’)是[x′y′]=  [cos⁡θ  sin⁡θ−sin⁡θ  cos⁡θ]  [xy]  +  [xTyT]\left[ \begin{array}{c} x' \\ y' \end{array} \right]=\; \

2020-07-28 16:50:28

Ubuntu系统自动清理日志或文件

描述程序运行中可能会一直存储log文件,长此以往会逐渐填满硬盘空间,造成系统崩溃。人为定期去删除文件,也是费时费力还容易遗忘我们希望电脑能定期的,自动删除我们不需要的文件。所要用到的,就是crontab 定时任务。做这件事情的步骤就两个写一个能自动查找文件并删除文件的脚本使这个脚本能够定时被执行1. 写一个能自动查找文件并删除文件的脚本在路径path1下新建一个脚本文件,可以命名为deleteLog.sh,这个脚本想要删除路径path2中的某些文件脚本内容如下find /path2

2020-07-21 20:48:12

Supervisor进程管理并设置为开机自动启动

描述Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。不使用守护进程会出现的三个问题:1、ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发

2020-07-21 18:05:07

python定义列表和数组

描述python语言定义列表及数组,并对数组元素进行基本操作定义1. 列表(List)定义B =[]B.append([2,3,3])B.append([4,45,67])print(B)print(B[1][2])结果是[[2, 3, 3], [4, 45, 67]]672. np.array定义A = np.zeros((2,3))print(A)结果是[[0. 0. 0.] [0. 0. 0.]]np.array是不能使用append的,写成A.append

2020-07-20 11:03:10

opencv4找不到opencv2/core/core.hpp: No such file or directory

描述我有一段程序,在Ubuntu16.04系统下使用的是opencv3,后将opencv版本替换成opencv4工程使用QT编译,编译提示了错误“opencv2/core/core.hpp”: No such file or directory解决办法实际上你应该在你的电脑中,准确的找到opencv4的安装位置我的解决办法是在QT工程的XXX.pro文件中,添加头文件路径INCLUDEPATH += /usr/local/include/opencv4问题解决...

2020-07-15 16:05:19

gym中toy text——Q-learning实现

描述使用Q-leaning算法实现gym中的toy texttoy text环境gym中的toy text环境包含很多中,这里介绍三种带渲染环境的FrozenLake-v0冬天来了。你和你的朋友在公园里玩飞盘的时候,你疯狂地把飞盘扔在了湖中央。水大部分是冻结的,但有几个洞的冰已经融化。如果你踏进其中一个洞,你就会掉进冰冷的水里。在这个时候,有一个国际飞盘短缺,所以你绝对有必要航行到湖的另一边并取回飞盘。然而,冰面很滑,所以你不能总是按照你想要的方向移动。表面用网格描述如下:S: 起始点,

2020-07-06 12:10:04

C++opencv图像裁剪、等比例放大缩小

描述C++使用opencv时,对imshow图像进行的常见处理,包括图像剪裁、等比例压缩等(待继续补充)代码1. 剪裁int matrix_size = 3000;cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图cv::Mat image_part = image(cv::Rect(1400,1100,1000,1800)); // 裁剪后的图cv::imshow("part o

2020-07-05 16:58:58

初识gym——why is gym?

whogym中的环境有几种,都可以在官网找到gym官网—环境Classic control and toy text(经典控制和玩具文本)Atari(Atari游戏)2D and 3D robots(2D和3D机器人)使用代码from gym import envsprint(envs.registry.all())输出会是一个字典,其中包含gym的全部环境开发RL算法时,请使用下面的写法,很简单import gymenv = gym.make('CartPole-v0')B

2020-07-01 10:32:23

gym初级——初始gym环境(二)

描述接上一篇gym初级——初始gym环境(一)代码动作空间和状态空间的数据类型import gymenv = gym.make('CartPole-v0')print(env.action_space)print(env.observation_space)输出结果为Discrete(2)Box(4,)意思是动作空间中的动作是离散(Discrete)的2个动作,状态空间中的状态是4维的数组动作空间和状态空间的数据大小import gymenv = gym.make('Cart

2020-07-01 10:15:50

gym初级——初识gym环境(一)

描述从今天开始,有机会我会写一些有关强化学习的博客这一篇是关于gym环境的环境import gymenv = gym.make('CartPole-v0')env.reset()for _ in range(1000): env.render() env.step(env.action_space.sample()) # take a random actionenv.close()运行这段程序,是一个小车倒立摆的环境可以把CartPole-v0替换为其他环境,比如M

2020-06-30 23:11:21

Mac安装gym

描述mac系统下安装gym假设你的电脑已经安装了python环境、pip工具、Anaconda等常见必要的开发工具(为什么这么说,因为我的电脑已经有了很多配置,所以纯净的mac系统去安装gym我没试过)安装命令有两种安装方式,都可以。第一种:很直接使用这一种安装命令的话,你看不到源码,以后大部分代码就自己去开发吧pip install gym第二种:源码安装使用这种方式,能看到一些示例和源码,但是安装过程可能会出现问题官方的安装命令是这样的git clone https://gith

2020-06-30 21:46:41

C++队列

描述C++使用队列的一些简单示例。比较简单,先写到这个程度,有必要去深究接口std::queue<int> my_queue;my_queue.pop();my_queue.push();my_queue.empty();my_queue.size();my_queue.front();my_queue.back();具体用法可以看下面示例代码#include <queue>#include <iostream>int main(){

2020-06-30 20:06:29

C++两组容器操作的区别:reserve()和resize()、emplace_back()和push_back()

描述C++执行容器(vector,map等)操作时,总有一些需求,比如说设置容器大小啊,增加元素啊。这里介绍两组写法的区别,设置容器大小的reserve()和resize()、添加元素的emplace_back()和push_back()1. reserve()和resize()这个比较简单。reserve()增加了vector的capacity,但是它的size没有改变resize()改变了vector的capacity,同时也增加了它的size!原因如下:reserve是容器预留空间

2020-06-30 14:46:18

互斥锁的相关知识及应用

描述在开发某段代码时,需要加互斥锁,这里进行相关知识的总结基础知识1. 原子性与原子操作原子性原子性是指一个操作是不可中断的。(这里有一个非我专业领域的名词, CPU指令集中常见的一个指令:CAS。它完成两个操作,一个比较,一个交换,后一个完不完成依赖于前一个操作的结果,从逻辑上说,它们是两个操作,可是它们特意被实现为不可打断的。这就是一个经典的原子指令)原子操作原子操作是指不会被线程调度机制打断的操作。这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换

2020-06-30 10:28:48

error: this exceeds GitHub file size limit of 100.00 MB

描述在push代码到github时,某些大文件会引发系统提示如下this exceeds GitHub's file size limit of 100.00 MB意思是,这个文件超过了推送的大小限制100MB我使用删除命令,成功把这个文件删除掉git rm -rf collisionavoidance/librealsense/librealsense2.so但是执行命令git push origin master依然报错解决办法1. 删除这个文件的pushgit filte

2020-06-29 22:04:19

面试官问你:创建多少个线程是最优的

描述面试官如果问你,你有一个程序,创建多少个线程是最优的,你该如何回答基本知识为什么要使用多线程?使用多线程就是在正确的场景下通过设置正确个数的线程来最大化程序的运行速度(让你的程序更快)简而言之,充分利用 CPU程序的两种情况CPU密集型程序:计算量很大I/O密集型程序: 用于I/O的时间很长1. CPU 密集型程序一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU 计算的比例占很大一部分单核CPU分4个线程呵呵你会发现没啥用,还多了一

2020-06-28 21:35:52

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。