LYNX

Links

Tags

Categories

stitch笔记

代码分析

特征点查找

默认使用orb算法,默认情况下还能够支持akaze算法.在安装了扩展模块后还能选择surfsift算法

computeImageFeatures

特征点匹配

匹配方法的选择

  • homography

默认调用BestOf2NearestMatcher,可选BestOf2NearestRangeMatcher

  • affine

调用AffineBestOf2NearestMatcher.使用该方法进行匹配时会多丢弃一些图片

舍弃认为不属于同一张全景图的图片

leaveBiggestComponent

相机参数评估

estimate::estimate

  • AffineBasedEstimator

  • 默认HomographyBasedEstimator

焦距评估:当评估计算得到多个焦距f时,可取这些f的中位数作为所有相机的焦距

计算最大生成树:以中心节点的图像为基准,计算其他图像与该图像的旋转矩阵

BundleAdjusterBase::estimate

基于以上方法,我们得到了相机的内外参数,但这样得到的参数忽略了多个图像间的约束,而且会产生累计误差.这时,我们就需要用到光束平差法(Bundle Adjustment)来精确化相机参数

  • BundleAdjusterReproj:光束平差法的重映射方法

  • 默认BundleAdjusterRay:光束平差法的射线发散方法

  • BundleAdjusterAffinePartial

细化相机参数

波形矫正

光束平差法会引起波形效应,即拼接的图像会呈现蛇形分布,这是因为真实拍摄相片时不大可能都保持水平而不倾斜的

waveCorrect

图像投影变换

  • PlaneWarper
  • AffineWarper
  • CylindricalWarper:柱面
  • 默认SphericalWarper:球面
  • FisheyeWarper
  • StereographicWarper
  • 还有一堆

曝光补偿

对每幅图像进行曝光补偿,来使所有图像具有相同的曝光程度

ExposureCompensator

寻找接缝线

重叠部分最相似的像素的连线

接缝线有三个限制条件

  1. 如果重叠区域是宽大于高,则接缝是横向走向的,而如果重叠区域是宽小于高,则接缝是纵向走向的.所以要保证接缝线要有一定的长度
  2. 如果是横向的接缝,则不允许有绝对垂直的接缝线,而如果是纵向的接缝,则不允许有绝对水平的接缝线
  3. 三是重叠区域是矩形,接缝线从矩形的一边出发,必须到达与该边平行的另一边结束。

逐点法,动态规划法和图割法

图片融合

羽化

多频段融合

参数说明

matcher:匹配方式?
rangewidth:限制图片匹配的数目?
ba:拼接图像时的cost函数?
warp:投影变换
wave_correct:波形矫正
seam:寻找接缝线的方法

openCV使用

Android

  • 查看cpu架构(termux)
cat /proc/cpuinfo

Android Studio版本为3.5

3.x版本

方法一

参考:CSDN,示例:压缩图片

  1. File->New->Import Module->选择opencv文件夹下的sdk/java文件夹,此时Android Studio会自动加载Module name
  2. File->Project Structure->Dependencies->选择app->添加Module Dependency->选择opencv
  3. 将opencv文件夹下的sdk/native/libs下自己手机cpu对应的架构文件夹复制到app/libs
  4. 将opencv模块的build.gradlecomplieSdkVersion,buildToolVersion,minSdkVersion,targetSdkVersion改成和appbuild.gradle一样
  5. appbuild.gradleandroid节点下添加
    sourceSets {
    main {
    jni.srcDirs = []
    jniLibs.srcDirs = ['libs']
    }
    }

然后点击sync now

  1. 在使用opencv前进行初始化
    static {
    if (!OpenCVLoader.initDebug()) {
    ...
    }
    }

4.x版本

方法一:javacv

不同导入方法,import的class位置可能不同

opencv部分功能的初始化

github原文

Loader.load(opencv_java.class);// 不能直接放在class开头

使用远程导入

appbuild.gradle示例(最外节点)

ext {
versions = [
'javacv': '1.4.4',
'ffmpeg': '4.1',
'opencv': '4.0.1'
]
}

dependencies {
...
implementation(group: 'org.bytedeco', name: 'javacv-platform', version: versions.javacv) {
exclude group: 'org.bytedeco.javacpp-presets'
}
implementation group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: "${versions.ffmpeg}-${versions.javacv}"
implementation group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: "${versions.ffmpeg}-${versions.javacv}", classifier: 'android-arm'
implementation group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: "${versions.ffmpeg}-${versions.javacv}", classifier: 'android-arm64'
implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: "${versions.opencv}-${versions.javacv}"
implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: "${versions.opencv}-${versions.javacv}", classifier: 'android-arm'
implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: "${versions.opencv}-${versions.javacv}", classifier: 'android-arm64'
}

作为lib导入

根据手机具体的cpu架构进行导入

appbuild.gradle

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}

将文件(视具体情况)

  • javacpp.jar
  • javacv.jar
  • openblas.jar
  • openblas-android-arm64.jar
  • opencv.jar
  • opencv-android-arm64.jar
    复制到app/libs/文件夹里

常见错误

  1. cpu架构错误/缺少(需添加-android-arm之类的库)
2019-10-27 16:01:32.439 29256-29322/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.github.crazyorr.ffmpegrecorder, PID: 29256
java.lang.RuntimeException: An error occurred while executing doInBackground()
  1. 没有对opencv初始化
2019-10-27 16:00:43.930 28933-28933/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.javacv, PID: 28933
java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
  1. 缺少openblas的相关jar
2019-10-27 15:59:23.158 28618-28618/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.javacv, PID: 28618
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/bytedeco/openblas/presets/openblas;

Linux

依赖包

sudo apt install libgtk2.0-dev pkg-config

命令行安装(TODO)

  1. cmake
cd {生成makefile的位置}
cmake {source的位置}
  1. make
cd {生成makefile的位置}
make
  1. make install
make install {安装的位置}

gui安装

参考:CSDN

  1. 安装cmake-gui
sudo apt install cmake-gui
  1. 启动cmake-gui
cd {build二进制文件的目录}
cmake-gui {opencv源代码}
  1. Configure->Unix Makefiles:Use default native compilers->finish

  2. 狂点Configure知道没有红色区域

  3. 赋值

变量名 赋值
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX {自己定的cmake_install路径}
OPENCV_GENERATE_PKGCONFIG 勾选
OPENCV_EXTRA_MODULES_PATH {opencv-contrib}源代码/modules
BUILD_EXAMPLES 勾选
  1. 狂点Configure

  2. Generate,等到Generating done

  3. 在源代码路径make

sudo make -j4 # 具体看有多少cpu
cat /proc/cpuinfo | grep "processor" | wc -l # 查看cpu个数
sudo make install
  1. 配置opencv4.pc(2选1)

    • 修改PKG_CONFIG_PATH:增加{你cmake_install的路径}/lib/(opencv4.pc所在的文件夹路径)
    • (TODO,没试过)复制opencv4.pc/usr/lib/pkgconfig
  2. 配置库路径,(新建)/etc/ld.so.conf.d/opencv.conf

{你cmake_install路径}/lib/ # 自己的lib路径
  1. 编译测试

如果是opencv.pcopencv4改成opencv

pkg-config --modversion opencv4
g++ a.cpp `pkg-config --cflags --libs opencv4` -o test && ./test
Makefile笔记

make默认只执行第一条命令

CC       := gcc
CFLAGS := -lpthread -g
TARGETS := shit
INC := $(shell find -L ./ -name "*.h")

a:
gcc a.c ${INC} $(par) ${CFLAGS} -o shit # example: make a run par="-O2"

run:
./shit

clean:
rm ./shit

fuck:
@echo $(par) # example: make fuck par="fuck you"

dump:
objdump ./shit -S > fuck

gdb:
gdb ./shit -tui

cgdb:
cgdb ./shit
  • 头文件
SRCS    := $(shell find ./src/ -maxdepth 1 -name "*.cpp")
INC := -I./include
CFLAGS := -Wall -Werror

run:
g++ $(CFLAGS) $(INC) $(SRCS) -o md_parser
./md_parser
Linux命令笔记

当前目录,只保留file

  • xargs
find /当前目录 -type f ! -name "file"|xargs rm -f
  • find自带命令
find /当前目录 -type f ! -name "file" -exec rm -f {} \

递归删除

.java

find ./ -name "*.java" | xargs rm -rfv

批量修改文件名

rename 's/原内容/改后内容/' *

打包

tar czvf FileName.tar DirName
  • 计算目录大小
du -h --max-depth=1 .
  • 合并文件夹
cp -frp new/* old/

-f强制覆盖,-r递归,-p保持新文件的属性不变

dpkg

  • 查找已装软件?
dpkg -l|grep filename
  • 卸载软件
dpkg -r filename

或?

dpkg -P filename
  • 彻底删除标识为rc的配置信息

rc:软件已卸载,配置文件还在

dpkg -l | grep ^rc | cut -d' ' -f3 | sudo xargs dpkg --purge

目录分析(du)

示例

du -d1 -b -a .
du -d0 -m .

cat

  • 输出固定行数
cat $file | head -n +6
```

[详细](https://blog.csdn.net/NFR413/article/details/78966085)

## curl

- 下载`$file`

```bash
curl -O $pathtofile
  • 命令行中输出表达式的值
echo $[1 == 2]

Linux的算术运算

进程

  • 切换到后台
<ctrl+z>
  • 查看后台进程
jobs
  • 使第N个进程在前台/后台运行
fg %N
bg %N

不加N默认对最后一个进程操作

ctags

  • vim设定源

固定

set tags=$path

先当前目录,后向上找

set tags=tags;
set autochdir

ln链接

  • 文件夹软链接
ln -s $exists $new

wc统计行数

find -maxdepth 10 -type f | xargs wc -l
wc -l `find -name '*.*'`

更改用户/权限

sudo chmod -R 777 *
sudo chown -R user * # sudo chown -R user:usergroup *

parallel并行(TODO)

参考

svg笔记

外部svg

svg引入外部css

TODO

html引入外部svg

  1. embed
  2. img
  3. iframe
  4. object:<object type="image/svg+xml" data="image.svg"></object>
  5. css:background-image
  6. css内联svg(好像没用):参考

文件格式笔记

文件头

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3156"
xmlns:xlink="http://www.w3.org/2010/svg" width="50" height="50">
</svg>
  • 参数说明
    • xmlns
    • viewBox

元素说明

参考:w3cplus

  • def
  • symbol
  • g

内联svg

属性说明

  • 关于描边
    • stroke-dasharray
    • stroke-linecap
    • stroke-linejoin
rss笔记

用javascript生成rss

stackoverflow

html笔记

<canvas>放缩及调整位置

<canvas id = "canvas" width = "300" height = "300" style = "width:200px; height:200px; left:60px"></canvas>

表格固定宽度

<style>
table
th:first-of-type {width: 200px;}
th:nth-of-type(2) {width: 200px;}
</style>

表格自适应宽度

<script>
window.onresize = my_resize;
window.onload = my_resize;
function my_resize(){
var x = window.innerWidth;
sheet = document.getElementById('my_table').sheet;
if (window.innerWidth < 950){
sheet.addRule('table th:first-of-type, table th:nth-of-type(2)',
'width: ' + x/7 + 'px;');
}else{
sheet.addRule('table th:first-of-type, table th:nth-of-type(2)',
'width: ' + x/15 + 'px;');
}
}
</script>

js修改css

document.styleSheets[0].addRule('.box', 'height: 100px');
document.styleSheets[0].insertRule('.box {height: 100px}', 0);

参考
w3plus

元素里面的文字也算子节点

js提取元素

div大小放缩示例

<head>
<script type="text/javascript">
function mouse() {
var direct = 0;
e = window.event;
if (e.wheelDelta) { //判断浏览器IE,谷歌滑轮事件
if (e.wheelDelta > 0) { //当滑轮向上滚动时
change(1);
}
if (e.wheelDelta < 0) { //当滑轮向下滚动时
change(-1);
}
} else if (e.detail) { //Firefox滑轮事件
if (e.detail > 0) { //当滑轮向上滚动时
change(1);
}
if (e.detail < 0) { //当滑轮向下滚动时
change(-1);
}
}
}

function change(num) {
var b1 = document.getElementById('b1');
var bit = b1.width/b1.height;
if (num == 1) {
b1.src = "/i/eg_mouse.jpg";
b1.width += 2*bit;
b1.height += 2;
if (b1.style.left == "") {
b1.style.left = "-" + bit + "px";
b1.style.top = "-1px";
} else {
var temp = (Number(b1.style.left.replace(/px/, "")) - 1*bit).toString() + "px";
// 注意toString加括号
b1.style.left = temp;
var temp = (Number(b1.style.top.replace(/px/, "")) - 1).toString() + "px";
b1.style.top = temp;
}
} else {
b1.src = "/i/eg_mouse2.jpg"
b1.width -= 2*bit;
b1.height -= 2;
if (b1.style.left == "") {
b1.style.left = bit + "px";
b1.style.top = "1px";
} else {
var temp = (Number(b1.style.left.replace(/px/, "")) + 1*bit).toString() + "px";
b1.style.left = temp;
var temp = (Number(b1.style.top.replace(/px/, "")) + 1).toString() + "px";
b1.style.top = temp;
}
}
}
</script>
</head>

<body>
<a href="http://www.w3school.com.cn" onmousewheel="mouse()">
<img alt="Visit W3School!" src="/i/eg_mouse2.jpg" id="b1" style="position: fixed; top: 100px; left: 100px;" width="200px" height="100px" />
<!-- 不要把width写进style -->
</a>
</body>
ubuntu使用

零散笔记

在文件夹中执行脚本

文件$\to$首选项$\to$行为$\to$可执行文本文件

快捷键

不要出现fn+super的组合

截屏

  • 复制截图到剪切板:ctrl+print
  • 复制窗口截图到剪切板:ctrl+alt+print
  • 复制选区截图到剪切板:shift+ctrl+print
  • 保存截图到图片:print
  • 保存窗口截图到图片:alt+print
  • 保存选区截图到图片:shift+print
  • 录屏:shift+ctrl+alt+r

禁用快捷键

backspace

热点

nm-connection-editor

设置$\to$wifi$\to$打开wifi热点

误删PATH救急

  • Linux通用?
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:$PATH

不要忘记加:PATH

安装字体

sudo mkdir /usr/share/fonts/{name}
sudo cp {font}.ttf /usr/share/fonts/{name}
cd /usr/share/fonts/{name}
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv

文件编码


功能性软件

文件管理器

由于ubuntu自带的文件管理器太睿智,推荐以下文件管理器

  • pcmanfm
  • nemo
  • thunar
  • dolphin

修改默认文件管理器

TODO:/etc/gnome/defaults.list(直接修改好像没用)

# what's the current default file manager?
xdg-mime query default inode/directory

# set nautilus as a default file manager
xdg-mime default nautilus.desktop inode/directory # application/x-gnome-saved-search

软件对应/usr/share/applications下的desktop

mathematica

报错

CRITICAL FAILURE: PrintIntroduction() Error
$ProductTitle not defined.

路径不能有空格

一个解决包依赖问题的软件

sudo apt install aptitude
  • (示例)卸载libreoffice
sudo aptitude purge libreoffice6.0

字体编辑

sudo add-apt-repository ppa:fontforge/fontforge
sudo apt-get update
sudo apt-get install fontforge

修改字体名称

  1. 打开字体文件
  2. 基础->字体信息
  3. 文件->生成字体->(可选)选择TrueType(ttf)

图像编辑

sudo apt install gimp
sudo apt install krita
sudo apt install krita-l10n

图像转换

sudo apt install sam2p
sam2p shit.png shit.gif

gif录屏

  • byzanz
sudo apt install byzanz 
byzanz-record --duration=50 --delay=3 --x=1030 --y=100 --height=500 demo1.gif

桌面便签(Indicator Stickynotes)

sudo add-apt-repository ppa:umang/indicator-stickynotes
sudo apt-get update
sudo apt-get install indicator-stickynotes

下载器(TODO)

  • wget:单线程
  • curl:单线程
  • axel:多线程
  • aria2:可以设置线程
  • mwget:多线程版wget
  • Prozilla:多线程,cmd,gui
  • Downloader for X:多线程,gui
  • MyGet:多线程
  • Linuxdown:多线程,cmd
  • Transmission:磁力,gui(不会用)
  • Uget:cURL+aria2

基本没用

屏幕管理

  • arandr
sudo apt install arandr

镜像源

/etc/apt/sources.list

  • ubuntu 19.04
deb http://cn.archive.ubuntu.com/ubuntu/ disco main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ disco-updates main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ disco universe
deb http://cn.archive.ubuntu.com/ubuntu/ disco-updates universe
deb http://cn.archive.ubuntu.com/ubuntu/ disco multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ disco-updates multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ disco-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu disco-security main restricted
deb http://security.ubuntu.com/ubuntu disco-security universe
deb http://security.ubuntu.com/ubuntu disco-security multiverse
  • 中科大
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
  • 清华
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
  • 网易
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
  • 阿里
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

apt

系统监视器安装

sudo apt install gnome-system-monitor
数据库

TODO

spring笔记

页面跳转

TODO

参数传递

前端->后端

url参数传递

会伴随页面跳转

  • 前端

访问url:/index?aid=111

  • 后端
@RequestMapping(...)
public String app(@RequestParam(value = "aid", required = false) String aid) {
;
}

form表单参数传递

会伴随页面跳转

  • 前端
<form action="...">
<input name="uid"></input>
</form>
  • 后端
@RequestMapping(...)
public String app(String uid) {
;
}

或者

class User {
String uid;
public void setUid(String uid) {
this.uid = uid;
}
}

@RequestMapping(...)
public String app(User user) {
String uid = user.uid;
}

ajax参数传递

页面不会跳转

  • 前端
$.ajax({ // 获取用户所有app
type: "post",
url: "/action/sign_in",
data: {
"uid": uid,
"password": password
},
success: function (get) {
console.log("signin: " + get);
}
});
  • 后端
@RequestMapping("/action/sign_in")
public String app(HttpServletRequest request) {
String uid = request.getParameter("uid");
}

后端->前端

url参数传递

前提要发生页面跳转

  • 后端
@RequestMapping(...)
public String app() {
return "redirect:/?uid=1";
}
  • 前端
function getRequest() { // 获取url中"?"符后的字串
var url = location.search;
var request = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i ++) {
request[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
return request;
} else {
return null;
}
}

model参数传递

  • 后端
@RequestMapping(...)
public String app(Model model) {
model.addAttribute("user_name", curUser);
}
  • 前端
<p th:text="${user_name}">原来的文本</p>

ajax参数传递

  • 后端
@RequestMapping(...)
@ResponseBody// 必须要有
public List<...> app() {
List<...> tmp = new List<...>();
return tmp;
}
  • 前端
$.ajax({
type: "post",
url: "/user/enterprise",
data: {},
success: function(get) {
for (var i = 0; i < get.size(); i ++) {
console.log(get[i]);
}
}
{);

数据库

TODO

mysql笔记

通用

建表

create table customers(
cid char(4) not null,
cname char(20) not null,
city char(20),
discnt real,
primary key ( cid )
);

修改并查看注释(comment)

alter table customers
change column cid
cid char(4) not null comment '编号',
change column cname
cname char(20) not null comment '姓名',
change column city
city char(20) comment '城市',
change column discnt
discnt real comment '折扣';
show full columns from customers;

每组前n

参考

计算时间差

SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01');
SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01') as a;

其中MONTH部分可以更改为

  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • MONTH
  • YEAR

其他

添加用户

insert

use mysql
insert into user ( Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, Event_priv, Trigger_priv, Create_tablespace_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections, plugin, authentication_string, password_expired, password_last_changed, password_lifetime, account_locked )
values
('localhost', 'niabie', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', password(''), 'N', '2019-11-07 15:17:00', null, 'N');
flush privileges;# 更新

用户具有创建数据库等的权限

create

参考

create user lynx;
update user set Host='localhost', authentication_string=password('1111') where User='lynx';
flush privileges;# 更新
grant all on database.table to 'lynx'@'localhost';# 分配database的table权限给用户
show grants for lynx@localhost;# 显示用户权限

用户没有创建数据库的权限

其他

  • 创建数据库并选择
create database homework3;
show databases;
use homework3;
show tables;
  • 查看版本等
select version();
select now();
select user();
  • 查看端口
show variables like 'port';
ubuntu配置

分盘

  1. 安装失败
  • swap:1024M,主分区
  • /:10G,主分区
  • /boot:128M,主分区
  • /home:剩余,主分区
  1. 安装成功
  • swap:4096M,逻辑分区
  • /:剩余,主分区
  1. 未知
  • swap:4096M,逻辑分区
  • /boot:200M,主分区
  • /:10G,主分区
  • /home:剩余,逻辑分区
  1. 未知
  • /:全部,主分区

安装软件

基本

  • sublime
  • chromium:注意数据备份.config/chromium
    • tamper monkey
    • Adblock Plus
    • SwitchyOmega
    • crxMouse Top Gestures
  • dukto:3系统互传软件
  • hyper:配置文件~/.hyper.js
  • vscode
  • gnome-tweak:如果还在用gnome
    • dash to panel
    • topicons plus
    • user themes
  • 搜狗输入法:CSDN
    • 官网下载deb
    • sudo apt install -f && sudo dpkg -i sougou.deb
    • 设置->区域和语言->键盘输入法系统
  • gparted:磁盘分区

非基本

  • Indicator Stickynotes
  • QQ(见wine)
  • wps

deepin wine软件

  • QQ
  • TIM
  • QQ轻聊版
  • 微信
  • Foxmail
  • 百度网盘
  • 360压缩
  • WinRAR
  • 迅雷极速版

详细,github

软件的文件存放位置

  • QQ:

/home/lynx/.deepinwine/Deepin-QQ/dosdevices/c:/users/lynx/My Documents/Tencent Files/$account/FileRecv

deepin wine字体异常处理

修改注册表(TODO)
  1. 新建(任何位置,文件名随意)zh.reg
    1.1. 字体链接

    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLin]
    "字体名"="字体文件"

    1.2. 字体(强制)替换

    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
    "字体名"="字体文件"

    1.3 字体(缺失)替换

    [HKEY_CURRENT_USER\Software\\Wine\\Fonts\\Replacements]
    "字体名"="字体文件"
  2. 修改注册表(貌似没用)

deepin-wine regedit zh.reg
补充字体文件
  • 字体文件存放位置:./deepin-wine/软件名/driver_c/windows/fonts/

wps软件

缺少字体的处理方法

下载并解压字体文件夹wps-font-symbols

sudo cp -r wps-font-symbols /usr/share/fonts
# cd /usr/share/fonts
# sudo chmod 755 wps-font-symbols
cd /usr/share/fonts/wps-font-symbols
# sudo chmod 644 *
sudo mkfontdir
sudo mkfontscale
fc-cache

系统设置

笔记本行为设定

  • 合盖不休眠:/etc/systemd/logind.conf
HandleLidSwitch=ignore

CSDN

密钥环

密码和密钥$\to$默认密钥环$\overset{\mbox{右键}}{\to}$更改密码$\to$空白

grub配置

  • 位置

/etc/default/grub

  • 内容修改
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
  • 生效设置
sudo grub-set-default 2
sudo update-grub

数字任意

时间配置

sudo apt-get install ntpdate
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc

gnome-shell-entensions

chrome扩展

sudo apt-get install chrome-gnome-shell

chrome浏览器插件

重启gnome-shell

alt+f2$\to$r

extension位置

  • ~/.local/share/gnome-shell/extensions
  • /usr/share/gnome-shell/extensions

解决显示应用程序2个dock

cd /usr/share/gnome-shell/extensions
sudo rm -rf ubuntu-dock@ubuntu.com

解决桌面图标在重启后乱序

安装一个新的桌面图标扩展,关闭gnome-tweaks的桌面图标显示

外观修改

修改登录背景图片

/etc/alternatives/gdm3.css:

#lockDialogGroup {
background: url(file:///usr/share/backgrounds/Aatrox.jpg);
background-position: center;
background-size: cover; }

默认开机动画

sudo update-alternatives --config default.plymouth

修改开机动画

ubuntugeek
更多

  1. 创建新文件夹
sudo mkdir /usr/share/plymouth/themes/myTheme
  1. vi myTheme/myTheme.plymouth
[Plymouth Theme]
Name=MyTheme
Description=随你
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/myTheme
ScriptFile=/usr/share/plymouth/themes/myTheme.script
  1. 复制png(必须)图片到myTheme

  2. vi myTheme/myTheme.script

wallpaper_image = Image("Aatrox_1080.png");
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
resized_wallpaper_img = wallpaper_image.Scale(screen_width, screen_height);
wallpaper_sprite = Sprite(resized_wallpaper_img);
wallpaper_sprite.SetZ(-100);
  1. 安装主题
sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/myTheme/myTheme.plymouth 100
sudo update-alternatives --config default.plymouth
sudo update-initramfs -u

修改grub主题

  1. /boot/grub/themes文件夹创建
  2. 配置文件/etc/grub.d/00_header:
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.

GRUB_THEME="/boot/grub/themes/Vimix/theme.txt"
GRUB_GFXMODE="1920x1080x32"

可按照尺寸修改背景图片

  1. 更新配置
sudo update-grub

语言和文字

  • 对彩色表情的支持(TODO):

    • fonts-noto-color-emoji
    • fonts-emojione
  • 对特定软件使用特定语言打开(不能已经打开其他窗口)

sh -c "LANGUAGE=en /bin/chromium-browser %U"
  • 修改语言和编码

    • 位置:/etc/default/locale
    • 查看当前语言:locale
  • locale备份

LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:en_US:en
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
sublime笔记

windows

  • 多行增加光标ctrl+alt+up/down

  • 多行同时生成光标ctrl+shift+l

  • 绑定quartus

"E:\Sublime Text 3\sublime_text.exe" %f:%l
  • 上次编辑位置alt+-

  • 括号匹配ctrl+m

插件位置

  • windows:C:/Users/$username/AppData/Roaming/Sublime Text 3/Packages
  • ubuntu:/home/lynx/.config/sublime-text-3/Packages
  • mac:/Users/lynx/Library/Application Support/Sublime Text 3/Packages

无法安装插件

安装package control

  • 直接从github上考到Installed Packages
  • 控制台安装(我觉得不行)

channel_v3.json地址

本地,jsdelivr,raw.github都可以.来源:

package control的设置文件中

{
"channels":
[
"https://raw.githubusercontent.com/fayou147/GitOrder/master/json/channel_v3.json"
]
}

常用插件

  • LateXTools:latex编译
  • SublimeAstyleFormatter:格式化c/java
微电子

电路模型和电路定律

电流和电压的参考方向

  • 关联参考方向:电流、电压方向一致
  • 非关联参考方向:电流、电压方向不一致

电功率和能量

在U,I为关联参考方向下:

  • U,I同号,元件吸收功率
  • U,I异号,元件释放功率

电阻元件

线性电阻

电容元件

$dq=Cdv$

电容吸收的功率

电感元件

$d\phi=Ldi$

电压源和电流源

受控电源

控制系数

基尔霍夫定律

  • 支路:组成电路的每一个二端元件称为一条支路
  • 节点:支路的连接点称为节点
  • 回路:由支路构成的闭合路径称为回路

KCL:基尔霍夫电流定律

在集总电路中,任何时刻,对任一节点,所有流出节点的支路电流的代数和恒等于0

KVL:基尔霍夫电压定律

在集总电路中,任何时刻,沿任一回路所有支路电压的代数和恒等于0

电阻电路的等效变换

电路的等效变换

  • 等效电路:对电路的一部分进行简化,用简化的电路替代原电路.代换与被代换部分的电压,电流关系相同.这两部分电路互称等效电路

电阻的串联和并联

桥形连接

当满足条件$R_1R_4=R_2R_3$时,对角线支路中的电流为0,称为电桥处于平衡状态,这一条件也成为电桥的平衡条件

电阻的$Y$形联结和$\Delta$形联结的等效变换

  • $\Delta$形电阻$=\dfrac{Y\text{形电阻两两乘积之和}}{Y\text{形不相邻电阻}}$

$R_{12}=\dfrac{R_1R_2+R_2R_3+R_3R_1}{R_3}$
$R_{23}=\dfrac{R_1R_2+R_2R_3+R_3R_1}{R_1}$
$R_{31}=\dfrac{R_1R_2+R_2R_3+R_3R_1}{R_2}$

  • $Y$形电阻$=\dfrac{\Delta\text{形相邻电阻的乘积}}{\Delta\text{形电阻之和}}$

$R_1=\dfrac{R_{12}R_{31}}{R_{12}+R_{23}+R_{31}}$
$R_2=\dfrac{R_{23}R_{12}}{R_{12}+R_{23}+R_{31}}$
$R_3=\dfrac{R_{31}R_{23}}{R_{12}+R_{23}+R_{31}}$

电压源,电流源的串并联

  • 只有电压相等极性一致的电压源才允许并联,等效电路为其中任一电压源
  • 只有电流相等方向一致的电流源才允许串联,等效电路为其中任一电流源

实际电源的两种模型及其等效变换

  • 电压源转为电流源:$i_s=\dfrac{u_s}{R}$

(含受控源电路的)输入电阻

当一端口无源网络内含有受控源时,可以采用外加电压法外加电流法求得输入电阻之和

电阻电路的一般分析

电路的图

线图(图)

用线段代替电路中的每个元件,线段称为支路,线段的端点称为结点,这样的以线,点组成的几何结构图称为线图或拓扑图,简称,用$G$表示

树,树支,连支

  • 树:包含图$G$的全部结点和部分支路,本身是连通的,不包含回路,用$T$表示
  • 树支:构成树的各支路叫树支
  • 连支:除树支以外的其他支路称为连支

KCL和KVL的独立方程数

  • 对一个节点数为$n$,支路数为$b$的连通图
    • KCL独立方程数为$n-1$个
    • KVL独立方程数等于它的独立回路(连支)数$b-n+1$

支路电流法

  1. 选定各支路电流的参考方向
  2. 对$(n-1)$个独立结点列出KCL方程
  3. 选取$(b-n+1)$个独立回路,指定回路的绕行方向,列出KVL方程

网孔电流法

仅适用于平面电路

回路电流法

  1. 根据给定的电路,通过选择一个树确定一组基本回路,并指定各回路电流的参考方向
  2. 列出回路电流方程
  3. 当电路中优受控源或无伴电流源时,另行处理
  4. 对于平面电路可用网孔电流法

结点电压法

  1. 指定参考结点,其余结点对参考节点之间的电压就是节点电压.通常以参考结点为各节点电压的负极性
  2. 列出节点电压方程
  3. 当电路中有受控源或无伴电压源时需另行处理

电路定理

叠加定理

一个具有唯一解的线性电阻电路,任一处的电压(或电流)是各个独立电源单独作用时在该处产生的电压(或电流)的叠加

齐性定理

线性电路中当所有激励都增大或缩小$N$倍,则电路的相应也将增大或缩小$N$倍

替代定理

戴维宁定理和诺顿定理

戴维宁定理

一个含独立电源,线性电阻和受控源的一端口,对外电路来说,可以用一个电压源与电阻的串联组合来等效.其中电压源的电压等于一端口的开路电压$U_{OC}$,电阻等于一端口的全部独立电源均置0后的输入电阻$R_i$

诺顿定理

一个含独立电源,线性电阻和受控源的二端网络,可以等效为一个电流源和电导的并联组合.电流源的电流等于该网络的短路电流,电导等于该网络全部独立电源置0后的输入电导

动态电路

含有动态元件电容和电感的电路称为动态电路

特点:当动态电路状态发生改变时(换路)需要经历一个变化过程才能达到新的稳定状态.这个变化过程称为电路的过渡过程

过渡过程产生的原因:电路内部含有储能元件$L,C$,电路在换路时能量发生变化,而能量的存储和释放都需要一定的时间来完成

动态电路的方程

含有一个动态元件电容或电感的线性电路,其电路方程为一阶线性常微分方程,称一阶电路
含有两个动态元件的线性电路,其电路方程为二阶线性常微分方程,称二阶电路
结论

  • 描述动态电路的电路方程为微分方程
  • 动态电路方程的阶数通常等于电路中动态元件的个数

动态电路的初始条件

换路定律

换路瞬间,若电容电流保持为有限值,则电容电压(电荷)换路前后保持不变
换路瞬间,若电感电压保持为有限值,则电感电流(磁链)换路前后保持不变

正弦电路

同频率正弦量的相位差

$\phi=\psi_i-\psi_u$

  • $\psi < 0,u$超前$i$ $\phi$角($u$比$i$先到达最大值)

同相,反相

周期性电流,电压的有效值

电压有效值$U=\sqrt{\dfrac{1}{T}\int_0^Tu^2(t)dt}=\dfrac{1}{\sqrt{2}}U_m$

正弦稳态电路的功率

$u(t)=\sqrt{2}U\sin\omega t,i(t)=\sqrt{2}I\sin(\omega t-\phi)$

  • 平均功率:$P=\dfrac{1}{T}\int_0^Tpdt=UIcos\phi$,表示电路实际消耗的功率,亦称为有功功率
  • 无功功率:$Q=UI\sin\phi$,反映网络与外电路交换功率的大小,是由储能元件$L,C$的性质决定的.单位:var(乏)
  • 视在功率(表观功率):$S=UI$,反映含源一端口的做功能力,反映电气设备的容量.单位:$VA$(伏安)

R,L,C元件的有功功率和无功功率

对电阻,$u,i$同相,故$Q=0$,电阻只吸收(消耗)功率,不发出功率

  • $P_R=UI\cos\phi=UI\cos0$
  • $Q_R=UI\sin\phi=UI\sin0$

对电感,$u$领先$i$ 90,故$P_L=0$,即电感不消耗功率.由于$Q_L > 0$,故电感吸收无功功率

  • $P_R=UI\cos\phi=UI\cos90$
  • $Q_R=UI\sin\phi=UI\sin90$

对电容,$i$领先$u$ 90,故$P_C=0$,即电容不消耗功率.由于$Q_C < 0$,故电容发出无功功率

电感,电容的无功补偿作用

当$L$发出功率时,$C$刚好吸收功率,则与外电路交换功率为$p_L+p_C$.因此$L,C$的无功具有互相补偿的作用

有功,无功,视在功率的关系

$S=\sqrt{P^2+Q^2}$

功率因数提高

设备容量$S$(额定)向负载送多少有功要由负载的阻抗角决定:$P=S\cos\phi$

功率因数低带来的问题:

  1. 设备不能充分利用,电流到了额定值,但功率容量还有
  2. 当输出相同的有功功率时,线路上的电流大,线路压降损耗大

解决办法:并联电容,提高功率因数(改进自身设备)

  • $P_R=UI\cos\phi=UI\cos0$
  • $Q_R=UI\sin\phi=UI\sin0$
Android Studio笔记

安装

官方文档

Linux

  • 运行程序:android-studio/bin/studio.sh

  • 64位机器需要安装32位库

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
  • 向前/后跳转:alt+shift+left/right

汉化

教程

汉化包

其他(TODO)

windows

配置文件夹位置:C:/Users/lynx/.AndroidStudio3.5

增加虚拟设备:Tools->AVD Manager

android device monitor位置:E:\Android\Sdk\tools\monitor.bat

memory monitor 打开:Run->Profiler

解决网络问题:Configure->Setting->System Setting->HTTP Proxy->Auto-detect proxy settings

布局编辑器打开:打开一个xml文件->底部选择Design

Linux

清除缓存:Build->Clear Project

ubuntu配置shadowsocks

参考

命令行

TODO

gui

安装shadowsocks-qt5

  1. github

  2. PPA

sudo add-apt-repository ppa:hzwhuang/ss-qt5
sudo apt-get update
sudo apt-get install shadowsocks-qt5

配置浏览器插件

firefox

TODO

chrome

  • 下载地址:https://github.com/FelisCatus/SwitchyOmega/releases/

  • 设置新的情景模式(其他的不用管)->代理服务器:

    • 代理协议:socks5
    • 代理服务器:127.0.0.1
    • 代理端口:1080
    • 不代理的地址列表:<local>
    • ->应用选项
  • 编辑auto switch

    • 规则列表网址:https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt->立即更新情景模式
    • 规则列表规则情景模式改为代理服务器对应的模式
    • ->应用选项
  • 在浏览器插件部分切换auto switch

moc解析

对于visual stuidio的C#缺少引用,解决方法:

  • 重进
  • 自动添加引用

wzhgba的CubismLite

其中的c++部分可以删掉,只保留C#的部分.要求visual studio 2013+

使用

主函数是Program.cs,如果显示v120_xp未安装是因为原作者使用的是vs2013,可重定向项目,修改windows SDK版本

TODO

  • 作者是直接根据官方模型的id来进行解析的,所以对非官方模型以及cmo3moc的解析会失败
  • 貌似只能解析moc文件的PARM参数

UlyssesWu的FreeLive

报错

  • 目录无效
copy "...\*.dll" "...\*.pdb" exited with code 1

创建后面那一个文件夹即可

  • 源无效

nuget源改成https://api.nuget.org/v3/index.json

TODO

  • 在提取cmox文件的时候没有解决重名的问题
python之sklearn

NumPy

ndarray

  • 切片

菜鸟教程

  • 平均值
    a.mean()

模块导入

  • 训练测试分离
from sklearn.model_selection import train_test_split
  • 可视化学习过程
    from sklearn.model_selection import learning_curve

函数调用

  • 均方误差评估
cross_val_score(knn, X, y, cv = 10, scoring = 'neg_mean_squared_error')

前4个参数视具体情况而定

图像化工具matplotlib

  • 安装
    python3 -m pip install matplotlib

亂七八糟的問題

  • ubuntu

    1. ... return error code 1 ...

      sudo apt-get intall python3-matplotlib
    2. Consider using the '--user' option or check the permissions.

      python -m pip install matplotlib --user
    3. No module named functools_lru_cache

      取消注释原软件源

      sudo apt-get update
      sudo apt-get upgrade
      sudo apt-get install python-tk
  • mac

    1. Cannot uninstall 'numpy'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

      python -m pip install sklearn --ignore-installed --user

有些平台安装部分模块不能通过pip安装?

photoshop笔记

wacom配置

  • :右键
  • :平移/卷动

按键

  • F5画笔预设

  • F6颜色面板

  • F7图层

  • [/]:画笔缩小/放大

  • ,/.:切换上/下笔刷

  • b:画笔

  • e:橡皮擦

  • g:渐变工具

  • l:套索

  • r:旋转画布

  • w:快速选择工具

  • x:前后景色互换

  • z:放缩

  • ctrl:移动

  • alt:吸管

  • shift:直线,增加到选区

  • space:画布移动

  • alt+[:下一图层

  • alt+]:上一图层

  • alt+backspace:快速填充前景色

  • alt+delete:快速填充前景色

  • ctrl+[:下移图层

  • ctrl+]:上移图层

  • ctrl+d:!取消套索

  • ctrl+n:自由变换

  • ctrl+u:色相/饱和度

  • ctrl+enter:!确认修改

  • ctrl+shift+i:反选

  • ctrl+shift+n:新建图层

笔刷

笔刷加载

左侧栏笔刷->顶栏笔刷处展开->设置->大小可调的圆形画笔->喷枪钢笔不透明描画

颜色覆盖

顶栏模式->正常

笔刷设置

  • 画笔笔尖形状

    打型:高硬度

  • 形状动态

    • 大小抖动
      • 控制:钢笔压力
  • 传递(其他动态)

    • 不透明度抖动
      • 控制:钢笔压力
    • 流量抖动
      • 控制:钢笔压力

        注意顶栏始终对'大小'使用'压力',在关闭时'画笔预设'控制压力,始终对'不透明度'使用'压力',在关闭时'画笔预设'控制压力

  • 湿边

    打型:开启,过度:关闭

钢笔

alt:锚点增加/重置杠杆,移动杠杆
ctrl:移动锚点/调整锚点杠杆,同时移动2侧杠杆

材质(?)

图层->正片叠底/叠加

选区

  • 扩展选区:选择->修改

图像

裁剪透明区域

图像->裁切

Cubism3-SDK-for-web功能扩展

全局跟踪鼠标

修改事件监听(只针对鼠标)

lappdelegate.js

LAppDelegate.prototype.initialize = function () {
...
else {
canvas.onmousedown = onClickBegan;// 执行动画
// canvas.onmousemove = onMouseMoved;
canvas.onmouseup = onClickEnded;// 需要执行动画
// document.onmouseenter = onClickBegan;
document.onmousemove = onMouseMoved;
document.onmouseleave = onMouseLeave;// 回头
}
};

在鼠标移出后回头

lappdelegate.js中自定义回头函数

/**
* 回头,不触发点击事件
*/
function onMouseLeave(e) {
if (!LAppDelegate.getInstance()._view) {
_lapppal__WEBPACK_IMPORTED_MODULE_3__["LAppPal"].printLog("view notfound");
return;
}
var live2DManager = _lapplive2dmanager__WEBPACK_IMPORTED_MODULE_5__["LAppLive2DManager"].getInstance();
live2DManager.onDrag(0.0, 0.0);
}

调整位置和大小

比例放缩

  1. 现在lappdefine.js定义比例
  2. lapplive2dmanager.js中比例放缩
LAppLive2DManager.prototype.onUpdate = function () {
var scale_rate = _lappdefine__WEBPACK_IMPORTED_MODULE_3__["LAppDefine"].ScaleRate;
projection.scale(scale_rate, width / height * scale_rate);// 调整放缩倍数
};

点击位置比例放缩

lapplive2dmanager.js

LAppLive2DManager.prototype.onTap = function (x, y) {
var scale_rate = _lappdefine__WEBPACK_IMPORTED_MODULE_3__["LAppDefine"].ScaleRate;
x /= scale_rate;
y /= scale_rate;
...
};

背景透明

位于lappdelegate.jsrun

LAppDelegate.prototype.run = function () {
...
gl.clearColor(0.0, 0.0, 0.0, 0.0);// 背景颜色
...
}

切换模型

删除原切换按钮

删除的位置(TODO)

  • lappview.js
    • initializeSprite
    • onTouchesEnded

如果只删除图片会报错

讲切换模型绑定到按钮

lappdelegate.jsrun

LAppDelegate.prototype.run = function () {
// 自定义切换模型
var btnChange = document.getElementById("btnChange");
btnChange.addEventListener("click", function () {
var live2DManager = _lapplive2dmanager__WEBPACK_IMPORTED_MODULE_5__["LAppLive2DManager"].getInstance();
live2DManager.nextScene();
});
}

拖拽元素

引入jquery-ui

新建js文件JsManager.js

function myDrag()
{// 使模型能够拖拽
$(".drag").draggable(
{
containment: document.body
});
}

注意调整drag类的大小

修正鼠标点击位置

lappdelegate.jsonClickBegan

function onClickBegan(e) {
...
// LAppDelegate.getInstance()._captured = true;
// var posX = e.pageX;
// var posY = e.pageY;
// 修正鼠标点击位置判定
var rect = e.target.getBoundingClientRect();
var posX = e.clientX - rect.left;
var posY = e.clientY - rect.top;
...
}

修正鼠标跟随

lappdelegate.jsonMouseMoved

function onMouseMoved(e) {
// if (!LAppDelegate.getInstance()._captured) {// TODO
// return;
// }
if (!LAppDelegate.getInstance()._view) {
_lapppal__WEBPACK_IMPORTED_MODULE_3__["LAppPal"].printLog("view notfound");
return;
}
var tempDrag = document.getElementById("drag_" + "0");// TODO 获取拖拽元素
// var rect = document.body.getBoundingClientRect();
// var posX = e.clientX - rect.left;
// var posY = e.clientY - rect.top;
var posX = e.clientX - tempDrag.offsetLeft;
var posY = e.clientY - tempDrag.offsetTop;
console.log("lappdelegate onMouseMoved (" + posX + ", " + posY + "), target: " + e.target);
LAppDelegate.getInstance()._view.onTouchesMoved(posX, posY);
}

直接计算拖拽元素在body上的相对偏差

多重canvas

修改鼠标的事件监听

lappdelegate.jsinitialize中将原sdk的=赋值改为addEventListener

else {// TODO 绑定到特定canvas
var tempNum = this._num;
if (tempNum == null) { tempNum.fuckshit(); };
canvas.addEventListener("mousedown", function () {
onClickBegan(window.event, tempNum);
}, false);
canvas.addEventListener("mouseup", function () {// 需要执行动画
onClickEnded(window.event, tempNum);
}, false);
// document.onmouseenter = onClickBegan;

document.body.addEventListener("mousemove", function () {// TODO
onMouseMoved(window.event, tempNum);
}, false);// 全局鼠标跟随

document.body.addEventListener("mouseleave", function () {// TODO
onMouseLeave(window.event, tempNum);
}, false);// 回头
}

调整速度

由于原版sdk在增加模型后会严重减慢动画速度,需要对sdk进行修改

可能的位置:

  • motion/cubismmotionqueuemanager.jsdoUpdateMotion(model, userTimeSeconds)

投影到多个canvas

点击事件修改

添加tips

1 / 5