自动操作使用说明
自动操作是一款基于无障碍服务的安卓软件,可以提供自动点击,滚动,条件跳转等操作。
启用
首先点击设置按钮开启无障碍服务及关闭电源优化,然后开启服务,只有在开启服务后才能进行后面的设置。
悬浮球用于需要手动启动的配置,可以在配置页选择配置,然后点击悬浮球开始自动操作
配置添加配置
如图所示点击右下角的+号可以新建配置。点击配置右侧的三个点可以进入配置页面,长按进行删除和置换位置。点击可以选择下次触发的配置
修改配置
页面可以简单理解为应用,当切换应用时会同时检测当前页面的配置,如果发现有自启动的配置将会自动运行配置
配置是由一个个的操作组成的,进行完上一个操作之后会自动进行下一个操作,在配置页面中运行操作的顺序是从上到下。
点击步骤右侧的加号可以添加操作,共有如下五种操作。添加后点击图标可以进行操作的配置页面
所有配置都有重复次数和延迟两个属性。延迟表示在上一个操作结束之后需要等待多长时间才进行该操作。其中每一个操作图标下面的数字表示延迟
点击操作
点击操作可以根据屏幕的绝对坐标,控件,文本进行点击。
控件点击: 如下图所示,控件是无障碍服务可以操作的部分。使用控件进行点击的优点 ...
遗传算法
理解遗传算法思路来源于基因进化。即基因会随机突变,复制(生出新个体),最终适应的种群将会繁衍(找到最优解)。本质上是一种并行的搜索算法,可以自适应的得到最优解。
因此遗传算法的几个关键点是定义突变,复制过程,定义搜索空间和如何选择优良个体(定义适应度)
过程
随机的创建种群(例如二维搜索中随机的创建搜索点)
定义适应函数(二维搜索中和终点的距离)
选择出适应的个体作为父母进行繁衍
通过交叉和复制产生后代:从父亲和母亲中抽取一部分特征作为子集并合并,另一部分直接复制优秀的父亲和母亲
对一些个体进行变异
def nextGeneration(currentGen, eliteSize, mutationRate): popRanked = rankRoutes(currentGen) selectionResults = selection(popRanked, eliteSize) matingpool = matingPool(currentGen, selectionResults) children = breedPopulation(matingpool ...
recast navigation
简介recast navigation是基于三角形网格的寻路系统,他相比四边形网格可以减少网格数量从而提高网格速度。它具体可以分为两部分,recast和detour。recast是构建寻路网格的过程,detour是利用网格寻路的过程
recast过程划分参考
具体构建过程是根据Sample_SoloMesh.cpp中的handleBuild
体素化在体素化阶段,mesh将被转化成体素(一个个小的长方体)。
体素化的目的是填充heightfield的span区域,span是一个二维数组,长和宽是包围盒内体素的长和宽。而每一个span是rcSpan*类型,他是一个链表,链接竖直方向的体素
构建过程:
rcAllocHeightfield:new一个rcHeightfield实例
rcCreateHeightfield: 初始化rcHeightfield
rcMarkWalkableTriangles: 根据传进来的mesh(顶点和三角形)计算出哪个三角形可以通过。具体方法为计算每个三角形的法线,如果法线角超过设定值则认为不可通过
rcRasterizeTriangles(rcCon ...
寻路算法
深度优先和广度优先可以参考这篇文章
a*算法可以参考这篇文章
b*算法b*搜索相对于a*搜索速度快了几十倍,但是他不能够保证最优解,和贪心算法有些类似。
定义:
探索节点:起始探索节点为原点
自由探索节点: 还可以进行下一步的探索节点
绕爬探索节点: 如果前方有阻挡,探索节点将试图绕过阻挡,绕行中的探索节点称为绕爬节点
算法过程:
起始,探索节点为原点,向目标进发
自由节点在前进过程中判断前方是否有障碍
有障碍,则分出左右两个分支试图绕过障碍,绕过障碍后节点将变成自由节点
无障碍,向目标前进一步
bool map[boundary.height()][boundary.width()];// 初始化map为0// 第二个参数为父节点Node* begin_node = new Node(point, null);map[point.x][point.y] = 1;begin_node->direction = getDirection(begin_node, end_node);free_nodes.push(begin_node); // 自由节点while(!fr ...
autotools使用
基本流程
基本流程为:
使用autoscan生成configure.scan文件,然后重命名为configure.acconfigure.ac里面包含一些自动检查的内容
执行aclocal,configure.ac中的宏实际上是m4宏的一个封装,这条命令将会吧ac宏解析成m4宏
执行autoconf, 它会生成configure脚本
执行autoheader,它会根据configure.ac中的内容生成一些预定义信息
Makefile.am中包含了程序编译链接信息,也就是makefile的主体内容,执行automake会生成Makefile的前置文件
执行./configure会生成Makefile文件
configure是检查系统设置,库函数是否满足等运行环境判断,Makefile.am则是真正的进行编译
configure.acautoconf基于此
首先介绍m4,m4是一个宏处理器,它会扫描文本,如果遇到宏则将其展开。
我们可以简单的认为他将shell脚本套上了一层函数的壳,例如:
// 检测是否安装foo程序的shellif [ $(which foo) ]then ...
vivado设置simulation时默认wcfg文件
set_property xsim.view F:/vivado/project/tcpu/src/testbench/dcache.wcfg
自底向上语法分析
基础例:
假定文法为:(1) S->aAcBe(2) A->b(3) A->Ab(4) B->d将abbcde归约到S栈 动作a 进aab 进abaA A->baAb 进baA A->AbaAc 进caAcd 进daAcB B->daAcBe 进eS S->aAcBe
该过程和自顶向下正好相反,它从规则右端寻找是否有匹配规则,然后将他归约成左端,最后得到起始字符为匹配完成。
因为右端可能会有多条相同规则,因此问题的关键是使用哪一个产生式进行归约。
名词定义:
短语: 文法G[S], $\alpha \beta \delta$是文法G的一个句型 且$S \overset{*}{=}> \alpha \beta \delta \, 且 \, A \overset{+}{=}> \beta$.则称$\beta$是A的短语
直接短语: 若有A=>$\beta$则称为直接短语
句柄: 一个句型的最左直接短语称为句柄
例如文法:
E->T | E+TT->F|T* ...
graph cut算法
最大流最小割问题可以参考这篇博客
graph cut思想能量函数
其中前一项是区域项。而后一项是边界项。而函数的优化目的是找能量最低的位置。
首先我们需要一些种子点标注它是前景还是背景,然后我们可以根据前景点和后景点构建概率直方图。图中的含义是p节点的前景的区域概率为p节点在前景直方图的概率的负对数。
而边界项的计算公式为
也就是说随着颜色差异和距离的增大,B在减小。
gprah cut的目的是为了区分出哪些是前景,哪些是背景来进行分割。因此我们可以采用最大流最小割的思想,将源点认为是前景,将汇点认为是背景,而图像中的像素是其他点,我们需要找到最小割将前景和背景分割开来。
定义完点之后还需要定义流量,流量分为端点到像素点之间的流量和像素点到像素点之间的流量:
端点到像素点: 这一项是前面公式中的R(L),它的定义为如果是前景种子点,则到前景流量为无穷大,到背景点流量为0.其他点到源点和汇点计算遵从上面的公式
像素点到像素点: 这一项是公式中的B(L),遵从上面公式
代码实现import osimport cv2import numpy as npimport maxflowi ...
makefile
本篇文章学习自
介绍一个makefile可以看成是由许多命令组成的,每个命令都遵循如下形式
target ... : prerequisites ... command ... ...
其中target是目标,prerequisites是依赖,command是执行的命令,例如
hello.o: hello.c gcc -o hello.o hello.c例2compile:main.bin main.data convert ./convert mkdir -p $(OBJDIR) mv main.elf $(OBJDIR)/. mv test.s $(OBJDIR)/. mv main.bin $(OBJDIR)/. mv main.data $(OBJDIR)/. mv *.coe $(OBJDIR)/. mv *.mif $(OBJDIR)/. cp $(OBJDIR)/inst_ram.mif $(OBJDIR)/axi_ram.mifmain.bin:main.elf ${CROSS_COMPILE}ob ...
harmony ability
Ability(能力)是鸿蒙软件的基础单位,一个应用可以包含多个Ability。鸿蒙支持应用以Ability为单位进行部署
Page AbilityPage提供页面管理和页面跳转的能力。例如外卖提供联系商家的业务入口,当用户使用此功能时,会跳转到通话应用的拨号页面。鸿蒙支持Page之间的跳转,并且指定跳转到某个AbilitySlice
创建右键就可以进行创建,并且它的配置文件如下{ "skills": [ { "entities": [ "entity.system.home" ], "actions": [//路由名称 "action.system.home" ] } ], "orientation": "uns ...