自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Games101 Path Tracing笔记以及作业7代码实现

Path tracing笔记以及Games101作业7代码相关解读以及实现。

2022-10-07 18:46:34 506 1

原创 Game101作业5以及光线追踪笔记

Games101作业5笔记

2022-09-12 01:04:38 591 4

原创 使用Rider和Emmylua进行UnLua配置

在Rider中配置UnLua环境就可以使用同一个IDE同时进行c++和Lua的开发,不用切换vscode和Visual Studio,并且Rider更加美观,操作逻辑和代码提示也比Visual Studio加番茄插件更加好用。所以还是非常推荐使用Rider进行UE的开发的。...

2022-07-10 11:51:58 2181 4

原创 Three.js使用贝塞尔曲线绘制心形

贝塞尔曲线是图形学中非常重要的知识,是绘制曲线以及曲面的基础,在很多地方都有着非常广泛的应用,比如Photoshop里的钢笔工具,字体设计,各种过渡动画等等。本文将记录贝塞尔曲线的原理公式,以及使用Three.js中的贝塞尔曲线API进行简单的心形绘制。贝塞尔曲线详解贝塞尔曲线就是在起始点和终止点之间,设置控制点,通过控制点的移动来控制曲线的形状。根据控制点数量的不同,可以将贝塞尔曲线分为一阶曲线、二阶曲线、三阶曲线……等等。一阶曲线一阶曲线非常简单,因为没有控制点,所以就是一条从起始点到终止点的

2022-02-10 16:54:48 4170

原创 PostgreSQL生成RESTful神器PostgREST

当我们想要对PostgreSQL进行客户端上的操作时,我们需要从远端对数据库进行访问。这个时候PostgreSQL的神器PostgREST就可以出马了。PostgREST是一个能够帮助我们生成一系列用于操作PostgreSQL数据库的RESTful API的服务器。之前我还尝试过直接使用Nginx中的ngx_postgres模块进行数据的操作,但是实际使用下来发现非常的麻烦,并且RESTful style要求每个网址代表一种资源,在网址中不能有动词,只能有名词,而且所用的名词一般和数据库名称相同。然而,我在

2021-07-17 16:27:55 993

原创 hexo下yilia主题博客个性化自定义

我的博客采用的hexo下的yilia主题,这篇文章记录一下自己折腾配置博客的方法和经过。首先是创建博客的基本的几个命令hexo g # 生成博客网页文件hexo s # 本地预览博客,打开本地网址http://localhost:4000/进行预览hexo d # 上传网页文件到githubhexo new post "Article Title" # 新建一篇博客hexo cl && hexo g && hexo s # 一步实现清除重构本地预览yilia

2021-07-16 22:35:41 839 2

原创 使用Java通过Nginx反向代理服务器操作PostgreSQL数据库

最近在做一个项目,需要将Android App和服务器上的PostgreSQL进行连接,但是Android Studio不能够直接通过JDBC进行连接,所以选择通过Nginx作为中间服务器对PostgreSQL进行操作,这篇文章紧接Nginx以及ngx_postgres安装以及配置。我们的数据库中的数据主要存储的是Android app中的使用信息,定义app_usage_info表拥有以下字段day date,app_name text,package_name text,app_usage_

2021-07-08 15:33:46 937

原创 Nginx以及ngx_postgres安装以及配置

最近在做一个项目,需要讲Android App和服务器上的PostgreSQL进行连接,但是Android Studio不能够直接通过JDBC进行连接,所以选择通过Nginx作为中间服务器对PostgreSQL进行操作。以下简单记录一下安装nginx和配置ngx_postgres的过程首先,由于我们在手动安装的过程中需要对nginx的源码进行编译,所以首先系统中必须具有C/C++的编译器,如果没有,手动安装一下sudo apt-get install gcc # 安装C语言编译器gccsudo apt

2021-07-06 15:55:46 813

原创 Java链表、栈、队列、哈希表、集合

总结一下JAVA中常见的一些与数据结构有关的持有对象以及他们的常见的方法 (并不是全部因为全部太多了orz)列表 List方法作用boolean add(E e)在列表末尾添加元素void add(int index, E e)在指定的下标处添加元素void clear()清除列表中的所有元素boolean contains(Object o)判断列表中是否包含指定的元素E get(int index)返回指定下标出的元素int indexOf

2021-07-01 18:35:16 110

原创 AWS EC2上部署PostgreSQL + TimeScaleDB

在EC2上部署PostgreSQL+TimescaleDB首先,创建一个Ubuntu实例,使用ssh连接到这个服务器上(使用WSL进行连接可以看这一篇博文AWS EC2上创建一个Ubuntu Instance 并使用WSL连接。连接好之后,就可以按照Timescale文档,进行PostgreSQL+TimeScaleDB的安装和部署了。# `lsb_release -c -s` should return the correct codename of your OSecho "deb <htt

2021-06-29 15:55:58 1002

原创 AWS EC2上创建一个Ubuntu Instance 并使用WSL连接

在AWS EC2上部署Ubuntu登录AWS,进入EC2 Dashboard,点击Launch instance来新建一个实例。选择AMI,这里我选择了Ubuntu 20.04选择想要的Instance Type,可以根据自己的实际需求进行选择,如果是进行学习的话,AWS对于第一次注册的用户在12个月内提供免费的套餐,如果我没有记错的话应该是t2.micro。选择好之后,默认情况下我们直接点击Review and Launch。之后页面上会显示创建的实例的一些信息,如果有需要改变

2021-06-29 15:51:37 720

原创 WSL问题: Temporary failure resolving ‘archive.ubuntu.com‘

今天在WSL进行操作的时候,发现从网络上下载东西无法成功,包括wget 、apt-get 等命令都无法正常使用,比如执行sudo apt-get update 的时候会提示Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease Temporary failure resolving 'security.ubuntu.com'Err:2 http://archive.ubuntu.com/ubuntu bionic InRel

2021-06-27 19:39:34 8750 15

原创 Android获取应用使用时长和次数-UsageStatsManager使用

最近在做暑研,要求是需要获取到Android手机中的应用使用情况,经过查找,发现Android提供了 UsageStatsManager类来帮助进行应用使用信息的统计(注明,Android5.0系统大部分手机不支持这个类,Android5.1系统之后完全支持[1], 显然现在大部分手机都是支持的),这篇文章主要记录一下这个类的使用方法。授权想要使用这个类来获取应用使用信息,首先需要对app进行授权,我们需要在AndroidManifest.xml文件中加入uses-permission<uses

2021-06-02 22:23:30 8582 8

原创 实用的搜索引擎技巧-写论文资料搜索

我们平时在使用搜索引擎的时候,或许都是直接搜索我们想问的问题,比如:“为什么……?” ……是什么?“或者直接搜索关键词,这样子搜索出来的东西可能内容并不是我们想要的内容。实际上,有很多不为人知的搜索小技巧,利用这些小技巧,我们可以很容易的达到我们的搜索目的。技巧1:排除关键词减号 + 关键词: 排除不想要的关键词这个技巧可以用在我们遇到了很多干扰项,比如说搜索“锤子”,我们搜索到的很大一部分都是锤子手机,但是我们只想要搜索原始的”敲敲敲“的锤子,那么我们可以搜索:锤子 - 锤子手机,这个时候搜索出来的

2021-05-20 14:55:22 203

原创 C语言哈希表uthash的使用

C语言的标准库中没有哈希表的函数可以使用,但是可以通过第三方头文件uthash.h这个包来实现哈希表的操作。首先,想要使用这个包,可以访问它的github网站 https://github.com/troydhanson/uthash 下载uthash.h文件。使用说明在你的程序中,首先需要定义一个结构体#include "uthash.h"struct my_struct { int id; /* key */ char name[10];

2021-05-16 11:12:45 689

原创 71. 简化路径(LeetCode)

题目描述给你一个字符串 path ,表示指向某一文件或目录的Unix 风格绝对路径(以 ‘/’ 开头,请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 ‘/’ 开头。两个

2021-04-08 23:12:44 136

原创 81. 搜索旋转排序数组II(LeetCode)

题目描述已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4]

2021-04-07 13:24:15 141

原创 80. 删除有序数组中的重复项II(LeetCode)

题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplica

2021-04-06 15:01:39 152

原创 5706. 句子相似性III(LeetCode第49场双周赛)

题目描述一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,"Hello World" ,"HELLO" ,"hello world hello world" 都是句子。每个单词都 只 包含大写和小写英文字母。如果两个句子 sentence1 和 sentence2 ,可以通过往其中一个句子插入一个任意的句子(可以是空句子)而得到另一个句子,那么我们称这两个句子是 相似的 。比方说,sentence1 = "Hello my name is Jane" 且 sente

2021-04-04 18:23:14 352

原创 11. 盛最多水的容器(LeetCode)

解法:双指针定义两个左右指针,获取其中较小的指针,将较小指针向中间移动,重新获取两个指针中的较小者,然后比较当前区域大小与移动后区域大小并进行赋值。重复以上操作直到两个指针相遇。int maxArea(int *height, int heightSize){ if (heightSize == 0 && heightSize == 1) return 0; int left = 0, right = heightSize - 1; int min = hei

2021-04-03 10:40:23 341

原创 1143. 最长公共子序列(LeetCode)

题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列 的长度。如果不存在公共子序列 ,返回 0 。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”, text2 = “ac

2021-04-03 10:23:36 59

原创 面试题 17.21. 直方图的水量(LeetCode)

题目描述给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6题解思路:当前位置能储存的水量取决于左右两边遇到的最大值中的最小值(min(leftTop, rightTop))。方法:双指针。一个左指针,一个右指针。左指针小于右指针,当前位置可以存水,大小为leftTop-left,然后右移左指针,更新leftTop。同理,右指针小于左指针,当前位置可以存储righ

2021-04-02 17:19:51 107

原创 10. 正则表达式匹配(LeetCode)

题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素。所谓匹配,是要涵盖整个字符串 s的,而不是部分字符串。示例 4:输入:s = "aab" p = "c*a*b"输出:true解释:因为 '*' 表示零个或多个,这里 'c'为 0 个, 'a'被重复一次。因此可以匹配字符串 "aab"。题解使用动态规划方法。代码bool charMatch(char s, ch

2021-04-01 20:37:25 153

转载 python绘制正态分布图像

正态分布公式:f(x)=12πσ2e−(x−μ)22σ2f(x)=\frac{1}{\sqrt{2\pi \sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x)=2πσ2​1​e−2σ2(x−μ)2​Python代码import numpy as npimport matplotlib.pyplot as pltimport math # 定义正态分布函数def normal_distribution(x, mu, sigma): return

2021-03-31 20:24:53 5098

原创 61.旋转链表

题目描述给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]提示:链表中节点的数目在范围 [0, 500] 内-100 <= Node.val <= 1000 <= k <= 2 * 109题解本题不难,只需要找到newHead和newTail的位置,

2021-03-27 10:03:59 61

原创 6.z-字形变换(LeetCode)

题目描述将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。题解观察法。通过对数组下标的观察找到规律。我们观察Z字形的一个转折。0 2n-21 2n-3 2

2021-01-20 21:58:30 119

原创 69. X的平方根

暴力解法int mySqrt(int x){ for (int i = 0; i <= x; i++) if ((long long)i * i > x) return i - 1; else if ((long long)i * i == x) return i; return 0;}二分法int mySqrt(int x){ int l = 0, r = x, ans = 0; while (..

2021-01-19 18:27:54 73

原创 15. 三数之和

题目描述给你一个包含 nnn 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,ca,b,ca,b,c ,使得 a+b+c=0a + b + c = 0a+b+c=0?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]题解一道经典的算法题。思

2021-01-19 17:46:57 61

原创 卡特兰数(Catalan Number)

卡特兰数考虑以下问题:现在我们有n+1n+1n+1个数,x0,x1,x2,⋯ ,xnx_0,x_1,x_2,\cdots,x_nx0​,x1​,x2​,⋯,xn​,考虑它们的乘积x1⋅x2⋯xnx_1\cdot x_2\cdots x_nx1​⋅x2​⋯xn​,现在我们可以在其中插入括号来改变计算顺序。那么一共有多少种排列的顺序呢?比如说,现在有三个数x0,x1,x2x_0, x_1, x_2x0​,x1​,x2​,它们的计算顺序有(x0x1)x2(x_0x_1)x_2(x0​x1​)x2​以及x0(

2020-12-30 15:48:12 216

原创 C语言实现全排列

使用方法:回溯法回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 ——百度百科全排列回溯的基本思想:对当前位置依次进行与后面所有位置的一个交换,然后对交换后的当前位置之后的元素进行一个全排列,全排列完毕后,进行回溯:将当前位置与之前交换的位置重新调换,形成原来的排列,然后继续进行下一次交换。比如我们想要对[1,

2020-12-23 18:18:55 7525 4

原创 Java String

String是一种特殊的对象(不同于基本数据类型)。String类的特殊性可以它的两个其他的类不具有的特点体现出来在创建一个String对象的时候,我们不仅可以通过和其他类类似的创建方式,通过new的方式创建,我们也可以直接通过赋值创建String newStr1 = new String("content"); // 和其他对象类似的创建方式String newStr2 = "content";// String 特殊的创建方式String可以直接进行+运算,达到字符串连接的效果S

2020-12-18 19:47:20 56 1

原创 游戏抽卡概率模型

游戏抽卡概率模型目前的中国游戏市场,最热门的莫过于免费抽卡手游。游戏厂商为了盈利,设计出有不同规则的卡池,让玩家抽卡获取稀有的人物和武器。这一机制吸引了很多玩家,首先因为手游是免费的,入手门槛较低,其次很多人喜欢抽卡获取角色和武器的成就感。为了更吸引玩家,游戏策划就得设计出能够让大部分玩家,无论是欧皇还是非酋满意的抽卡机制。本文将简要分析目前游戏厂商可能使用的抽卡机制(仅属于个人猜想加一些网上的资料)。文章目录游戏抽卡概率模型抽卡机制的大致分类伪随机模型十连保底概率增加模型参考资料源代码抽卡机制的大致

2020-11-27 09:24:33 15093

原创 两种基本排序方法:Selection和Insertion

Selection SortSelection Sort是一种最基本的排序方法。这种排序方法的基本想法就是:第一次找到最小的数与第一位进行交换,第二次找到第二小的数与第二位进行交换,第三次找到第三小的数与第三位进行交换……以此类推。由于找第i小的数时,前面i-1个数已经是前i-1个最小的数了,所以只要在后N-i+1个数中找到最小的数和第i个数进行交换就好了。也就是说,这个方法需要嵌套两个for循环,时间复杂度很明显也就是O(N2)O(N^2)O(N2)了。Java 代码:public class Sel

2020-11-22 16:37:53 327

原创 简要分析i++和++i的区别

i++和++i的区别学习编程语言的时候,尤其是C\C++和java这种语言,新手避不可避的一个问题就是关于i++i++i++和++i++i++i的区分。这两个式子最后的结果都是i=i+1i=i+1i=i+1,但是他们的运算顺序有很大的区别。i++i++i++我们称之为postfix operator(后缀运算符),而++i++i++i是prefix operator(前缀运算符),这就可以显示出他们的区别。i++i++i++进行运算的时候,先进行赋值,然后再对iii加1,而++i++i++i刚好相反,再

2020-09-22 15:07:07 241

原创 vscode编译.cpp文件出现中文乱码解决方案

vscode编译.cpp文件出现中文乱码解决方案在vscode中编译.cpp文件,可以使用vscode中的插件code runner点击按钮运行,如果熟悉如何使用g++的命令也可以直接使用命令行语句编译运行。但是如果文件中出现了中文字符,就会出现编译之后生成乱码的问题。比如这一段代码(来源于菜鸟教程)#include<iostream> #include <limits> using namespace std; int main() { cout

2020-07-26 19:52:07 4536

原创 pygame动画演示小球碰撞

使用pygame实现动量定理的小球碰撞演示动画动量定理我们在高中的时候就已经接触过了,是十分重要的物理定理。其中的完全弹性碰撞(机械能守恒)是十分典型的例子,机械能守恒和动量定理两个公式就可以推出小球碰撞之后的速度,依据这个公式,我们就可以完成我们的动画演示了。m1v1+m2v2=m1v1′+m2v2′m_1v_1+m_2v_2=m_1v_1'+m_2v_2'm1​v1​+m2​v2​=m1​v1′​+m2​v2′​12m1v12+12m2v22=12m1v1′2+12m2v2′2\frac{1

2020-07-23 22:21:11 1192 4

原创 pygame获取系统中的字体

pygame如何获取系统可使用的字体pygame.font模块中有一个pygame.font.get_fonts()函数,返回值为一个列表,包含了系统中所有的可以使用的字体,可以用这个函数将所有的可用的字体都输出到一个文件之中,方便查找:import pygamefonts = pygame.font.get_fonts()with open('font.txt', 'w', encoding = 'utf-8') as file: for font in fonts: fil

2020-07-18 10:51:42 1890

原创 pygame绘制一个小人在窗口内移动

Pygame如何绘制一个小人在窗口内移动利用·pygame.draw模块可以绘制一些简单的图像,但是这只是一些静态图像。只有可以对这些图像进行操作才会产生游戏性,我们怎样可以实现利用键盘控制图像使它移动呢?函数实现首先,图像的移动本质其实就是点的移动。可以根据一个参考点绘制出相对应的图像,改变参考点的坐标就可以实现图像的整体移动。# 传入左上角的位置坐标BLACK = (0, 0, 0)def drawMan(left, top): pygame.draw.circle(screen,

2020-07-12 20:09:52 1042

原创 pygame实现全屏模式和窗口大小可调

pygame如何实现全屏模式和窗口大小可调在pygame中可以设置通过pygame.display.set_mode(size=(0, 0), flags=0, depth=0)对窗口参数进行设置,这个函数会返回一个Surface对象。在四个参数中,size表示窗口大小,flags参数可以控制窗口模式,depth参数表示颜色的位数flags参数:pygame.FULLSCREEN 创建全屏的窗口pygame.DOUBLEBUF 使用HWSURFACE或OPENGL时建议加上这个标志pygame

2020-07-10 23:06:01 12226 3

原创 尝试新的跨平台 PowerShell VSCode解决方法

最近由于PowerShell7的更新,在VScode中如果原来使用的是Windows Powershell的话,会出现尝试新的跨平台 PowerShell https://aka.ms/pscore6的显示。这个时候就需要下载最新版的PowerShell Core。按照官方文档的步骤,需要前往Githubv7.0.0 Release of PowerShell下载对应的msi文件下载好之后安装,...

2020-03-07 15:28:20 36255 16

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除