首页 > 其他分享 >CPA评估以及VIM学习——week_30

CPA评估以及VIM学习——week_30

时间:2023-07-25 22:56:26浏览次数:40  
标签:week CPA 30 VIM 单词 shift 文本 光标

目录

CPA评估以及VIM学习

1. CPA评估

​ CPA(Closest Point of Approach)是指船舶避碰中的一个关键概念,用于描述在海上相遇时船舶之间的最近距离点。它的定义可以通过以下几个方面进行解释。

​ 首先,CPA是受到国际海上避碰规则(COLREGS)的指导,并在海事领域中被广泛采用。这些规则旨在确保船舶之间的安全交通,并规定了船舶在相遇时应采取的行动。CPA概念的引入有助于评估碰撞风险,并确定避碰措施。

​ 其次,CPA通常在船舶自动识别系统(AIS)中计算和显示。AIS是一种船舶间自动通信系统,通过交换、航向、速度等信息,提供实时的船舶运行状况。通过使用AIS数据,可以计算出两艘船舶之间的最小距离,并预测最近会遇的位置和时间。

​ CPA的意义在于提供了对碰撞风险的评估。通过计算CPA,船舶可以了解到与其他船舶相遇时的安全距离,并在需要时采取适当的行动,以避免碰撞事故的发生。CPA的值越大,说明船舶之间越远,碰撞风险越小;相反,CPA的值越小,风险越高。

​ 此外,CPA还可以用来评估船舶之间的相对接近速度。当两艘船舶的接近速度较高时,即使CPA较大,仍可能存在较大的碰撞风险。因此,CPA的计算不仅要考虑两艘船舶的最小距离,还需综合考虑它们的速度和航向。

​ 总之,CPA是船舶避碰中的一个重要概念,用于评估船舶相遇时的最近距离点和碰撞风险。通过使用CPA,船舶可以确定安全航行的策略,并确保在复杂的海上环境中保持船舶交通的安全和有序。

1.1. 传统方法

​ 通过对方位进行平滑之后,使用方位变化率进行动态判断,由于方位变化率的时间-方位变化率半对数图的特征,当接近CPA时刻时,方位变化率最高。(由于公司限制,故只列出基本的计算原理代码,核心计算过程请咨询武汉中蓬科技公司

std::vector<int> findMaxIndices(const std::vector<int>& arr, int segmentSize) {
    std::vector<int> maxIndices;
    for (int i = 0; i < arr.size() - segmentSize + 1; i += segmentSize) {
        std::vector<int> segment(arr.begin() + i, arr.begin() + i + segmentSize);
        int maxVal = segment[0];
        int maxIdx = 0;
        for (int j = 1; j < segmentSize; j++) {
            if (segment[j] > maxVal) {
                maxVal = segment[j];
                maxIdx = i + j;
            }
        }
        if (maxVal != segment.back()) {
            maxIndices.push_back(maxIdx);
        }
    }
    return maxIndices;
}

std::pair<int, int> findElement(const std::vector<std::pair<double, double>>& data, double target) {
    for (const auto& element : data) {
        if (element.first == target) {
            return std::make_pair(element.second, element.first);
        }
    }
    return std::make_pair(-1, -1);
}

2. VIM学习使用

​ 作为一个代码编辑器,在整理C++大型项目代码时,查找相关代码以及对代码进行对比操作都十分方便,拥有众多快捷键进行操作,十分快捷效率。在老师的介绍下,开始系统学习。

2.1 VIM基础操作

​ VIM经常使用到的模式有三种:命令/正常/普通模式(Normal mode);插入模式(insert mode);末行模式(last list mode)。insert模式进入normal模式(键盘输入i,反之退出按Esc),lastlist模式进入normal模式(键盘输入‘shift’+‘:’,反之按Esc退出),insert模式与lastlist模式之间不能切换。

Normal Mode

  • 光标移动基础按键:
键盘按键 VIM功能 记忆/键位
按键h 光标向左移动 四个移动键的最左边
按键j 光标向上移动 jump单词
按键k 光标向下移动 king代表高高在上
按键l 光标想右移动 四个移动键的最右边
  • 光标移动小技巧:
键盘按键 VIM功能
按shift+$ ——shift+4 移动到光标所在行的“行尾”:行右
按shift+^——shift+6 移动到光标所在行的“行首”:行左
按gg——{连点两下小写g} 进入文本开头
按shift+g——G 进入文本末端
按n+shift+g——G 跳转光标到指定第n行开头;n是行号
按w 光标跳到下个单词的开头
按e 光标跳到下个单词的字尾
按b 光标跳到上个单词的开头
  • 文本操作:
键盘按键 VIM功能
按 u 撤销(可多次按)
按ctrl+r 撤销的恢复(可多次按)
按ctrl+g 显示光标所在行的行号
按yy 复制光标所在行(一行)
按n+yy 复制n行:从光标所在行起往下复制n行的内容
按 p 粘贴一次复制内容
按n+p 粘贴n次复制内容
按dd 删除光标所在行
按n+dd 从光标所在行起往下删除n行
dd+p 剪切一次刚刚删除的内容(有剪才有切-有删除才有剪切)
按ndd+p 剪切n次刚刚删除的内容
按c+w 从光标位置往后删除当前单词或字符并进入插入模式
按c+n+w 从光标位置往后删除n个当前单词或字符并进入插入模式
按 x——小写x 从光标所在位置起往后删除一个字符
按 n+x 从光标所在位置起往后删除n个字符
按shift+x——大写X 从光标所在位置起往前删除一个字符
按n+shift+x——n+大写X 从光标所在位置起往前删除n个字符
按shift+~ ——1左边那个字符~(文本大小写切换) 从光标往后的小写转大写/大写转小写
按n+r+字符——比如我按3+r+a那么从当前光标往后的三个字符都变为a 局部替换文本
shift+r——R 进入替换模式可以整体替换

Lastlist Model

  • 保存/退出文件操作:
键盘按键 VIM功能
:wq 保存并退出 Vim 编辑器
:wql 保存并强制退出 Vim 编辑器
:q 不保存就退出 Vim 编辑器
:ql 不保存,且强制退出 Vim 编辑器
:w 保存但是不退出 Vim 编辑器
:w! 强制保存文本
:w filename 另存到 filename 文件
x! 保存文本,并退出 Vim 编辑器
ZZ 直接退出 Vim 编辑器
  • 查找:“/关键词”:在查找结果中,用Nn可以切换上下结果;输入nohl,可以取消高亮。
键盘按键 VIM功能
/abc 从光标所在位置向前查找字符串 abc
/^abc 查找以 abc 为行首的行
/abc$ 查找以 abc 为行尾的行
?abc 从光标所在位置向后查找字符串 abc
n或; 向同一方向重复上次的查找指令
N或, 向相反方向重复上次的查找指定
  • 替换:
键盘按键 VIM功能
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:s/a1/a2 替换当前光标所在行第一处符合条件的内容
:s/a1/a2/g 替换当前光标所在行所有的 a1 都用 a2 替换
:%s/a1/a2 替换所有行中,第一处符合条件的内容
:%s/a1/a2/g 替换所有行中,所有符合条件的内容
:n1,n2 s/a1/a2 将文件中 n1 到 n2 行中第一处 a1 都用 a2 替换
:n1,n2 s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换

Insert Model

  • 进入插入模式:
键盘按键 VIM功能
a 在当前光标位置的右边添加文本
i 在当前光标位置的左边添加文本
A 在当前行的末尾位置添加文本
I 在当前行的开始处添加文本(非空字符的行首)
O 在当前行的开始处添加文本(非空字符的行首)
o 在当前行的下面新建一行
R 替换(覆盖)当前光标位置及后面的若干文本
J 合并光标所在行及下一行为一行(依然在命令模式)
cl 删除光标选中的字符,然后进入插入模式,等同于s
cw 删除从当前光标,到光标所在单词的结尾的字符,然后进入插入模式,w的意思是单词
caw 删除当前光标所在的单词,及单词后的空格,然后进入插入模式,光标会直接选中下个单词的首字母。aw的意思是一个单词
c3w 删除当前光标所在的单词,及后续的2个单词,及空格。一共删除3个单词

2.2 VIM 高阶操作

2.2.1比较命令:命令行指令

屏幕将被水平分隔,分别显示一个文件,其中不同的部分将被高亮显示。

  • 只在某一文件中存在的行,显示为蓝色;

  • 而在另一文件中的对应位置的行,显示为绿色;

  • 在两个文件中都存在的行,显示为紫色

  • 行中不相同的字符,显示为红色;

  • 相同的行,没有高亮显示并且会被折叠。

    命令行指令:

//打开两个文件对比不同
vim -d file1 file2

//如果已经打开了文件file1,那么可以在Vim中用以下命令,再打开另一个文件file2进行比较:
:diffsplit file2

//如果已经使用split打开了两个文件,那么可以分别在两个窗口里面输入以下命令,进行比较:
:diffthis

//如果想要垂直比较两个文件,可以使用以下命令:
:vert diffsplit file2

2.2. 折叠:

使用zo命令,可以展开被折叠的相同的文本行;而zc命令,则可以重新折叠相同的行。

2.3. 查看:

比较文件时,经常需要结合上下文来确定最终要采取的操作。缺省情况下,是会把不同之处上下各6行的文本显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以使用以下命令:

:set diffopt=context:3

2.4. 滚动

如果你在一个文件中滚动屏幕,那么另一个文件也会自动滚动以显示相同的位置。

//使用下命令,取消联动:
:set noscrollbind

//使用下命令,将重新绑定联动:
:set scrollbind

//利用下命令,可以定义滚动方式:
:set scrollopt ver,hor,jump

//如果光标停留在两个文件的不同位置,那么可以使用下面的命令同步滚动:
:syncbind

2.5. 更新:

如果更改了某个文件的内容,vim又没有自动更新diff检查,那么可以使用如下命令更新:

:diffupdate

2.6. 跳转:

你可以用[c命令;跳转到前一个不同点;或者用]c命令,跳转到后一个不同点。

标签:week,CPA,30,VIM,单词,shift,文本,光标
From: https://www.cnblogs.com/YiliSong/p/17581245.html

相关文章

  • CS5466规格书 2lane 8k30方案|CS5466设计资料|CS5466原理图
    CS5466是一款高性能、低功耗、的,USBType-C/DP1.4显示端口至HDMI2.1转换器芯片。显示端口接收机支持高达32.4Gbps(HBR3,4通道)和HDMI发射机支持高达48Gbps(FRL,12G4Lane)。集成PowerDelivery3.0控制器处理Type-C用于USB电源管理和DisplayPort的CC接口模式输入。CS5466TypeC/DP1.4转......
  • 题解 LGP2300【合并神犇】
    Problem随机\(n\)个正整数组成序列。将序列分尽量多的段数,使得前一段的和不大于后一段的和。求能分成多少段。输出\(n-ans\)。\(n\leq10^5\),值域不重要。Solution状态设计为:\(f_i=1+\min_{sum_i-sum_j\geqg_j}f_j\)表示前\(i\)个数字划分的最多段数,\(g_j\)定义为\(f_......
  • 【大联盟】20230714 T1 三分网络(tri) 题解 CF1666K 【Kingdom Partition】
    题目描述here。题解赛时得分:\(30/30\),想了很久网络流最后不会。感觉这题就纯纯对脑洞,因为把题目中的\(2\)改成\(3\)就做不了)))不过还是相当有意思的。考虑如下建模方式:首先,考虑最小割。对于每个点\(i\),我们用两个点\(x_{i}\),\(y_i\)来表示。\(x_i\)表示\(i\)号点是......
  • Linux基础30 HTTP协议, 请求信息, 请求方法, 状态码, 请求头信息
    HTTP协议HTTP协议概述1.什么是HTTPHTTP全称:HyperTextTransferProtocol中文名:超文本传输协议HTTP协议简单的说,将用户请求的页面从服务器传输到客户端浏览器,浏览器进行解析,解析以后变成一个我们人类可以理解的方便观看的页面2.什么是超文本包含有超链接(Link)和......
  • 【大联盟】20230713 T1 方向矩阵(rect) 题解 CF1666A 【Admissible Map】
    题目描述here。题解赛时得分:60/100。想到了正解,但调不出来,就改写暴力了。。。首先,我们把问题转化成每个点都入度为\(1\)。我们考虑合法子串只有两种形式:注意到U和D,要么同时出现,要么同时不出现,因为如果存在U,就说明U所在这一行得到度数减少了,一定需要上一行D来弥补......
  • 20230724练习总结
    CF627F这个题的题面翻译其实就已经把做法提示得很明显了。每一次操作相当于是把\(0\)移动到相邻的节点上。考虑不加边,那接判断\(0\)移到后是否相同即可。现在要加一条边,可以先把\(0\)移动到位,判断是否相等。可以观察到如果加一条边影响的应该是一个环——顺移一个位置......
  • 使用 MyBatis 相关依赖包(20230725)
    开发SpringBoot应用时使用MyBatis的相关依赖包…… 说明:本文首次发布于2023-7-2510点(北京时间),其中的“最新”是这个时间点最新。 0、序章梳理开发SpringBoot项目时,使用各种MyBatis相关依赖包的版本及其关系。 1、SpringBoot2.7.13默认MyBatisFramewo......
  • 20230725
    复赛动态规划——01背包例题:采药题目描述时间限制:1s空间限制:256M题目描述:松下问童子,言师采药去,云深不知处,只在此山中辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一......
  • ZROI 学习笔记——Week 2
    都别催!!!等我有时间了例题和详细讲解都会补回来的!!!7.27Day1-区间DP&树形DP区间DP合并:即将两个或多个部分进行整合,当然也可以反过来;特征:能将问题分解为能两两合并的形式;求解:对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的......
  • 「赛后总结」20230724 CSP 模拟赛
    「赛后总结」20230724CSP模拟赛点击查看目录目录「赛后总结」20230724CSP模拟赛总结。题解T1最长上升子序列ARC125C思路代码T2独特序列ARC125D思路代码T3最大GCDARC126C思路代码T4连续子段ARC126D思路代码想听歌,想看巨人,但是没有条件。总结。rk1三个首杀,前......