自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 资源 (5)
  • 收藏
  • 关注

原创 Unreal Engine Siki 飞机大作战P7-P14(bug版本)

spaceship.h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Pawn.h"#include "Engine/World.h"#include "Spaceship.generated.h"class USphereComponent;class UCa

2021-07-17 14:56:32 178

原创 Unreal engine Siki飞机大作战 P1-P7

#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>#include "shader_s.h"void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height);}void processInput(GLFWwindow*

2021-07-17 08:37:31 192

原创 Week 25. 第600-628题

611. 有效三角形的个数分析先将数组排序, 排完序后, 先固定A, B, 然后考虑C因为三角形需要满足任意两边之和大于第三边A + B > C, A + C > B 必然满足所以只需要满足 B + C > A, 即 C > A - B可以用双指针 扫描到最大的k, 是的 C > A - B那么C 可以取的范围是[k, j - 1], 所以有j - 1 - k + 1 = j - k种codeclass Solution {public: int

2021-04-23 20:44:10 181

原创 《一周学完光线追踪》学习 九 电介质材料

camer.h#pragma once#ifndef __CAMERA_H__#define __CAMERA_H__#include "ray.h"class camera {public: camera() { lower_left_corner = vec3(-2.0, -1.0, -1.0); horizontal = vec3(4.0, 0.0, 0.0); vertical = vec3(0.0, 2.0, 0.0); origin = vec3(0.0, 0.

2021-04-05 16:47:21 107

原创 《一周学完光线追踪》学习 七 漫反射材料

camera.h#pragma once#ifndef __CAMERA_H__#define __CAMERA_H__#include "ray.h"class camera {public: camera() { lower_left_corner = vec3(-2.0, -1.0, -1.0); horizontal = vec3(4.0, 0.0, 0.0); vertical = vec3(0.0, 2.0, 0.0); origin = vec3(0.0, 0

2021-04-04 13:57:10 125

原创 《一周学完光线追踪》学习 六 抗锯齿

Camer.h#pragma once#ifndef __CAMERA_H__#define __CAMERA_H__#include "ray.h"class camera {public: camera() { lower_left_corner = vec3(-2.0, -1.0, -1.0); horizontal = vec3(4.0, 0.0, 0.0); vertical = vec3(0.0, 2.0, 0.0); origin = vec3(0.0, 0.

2021-04-04 10:24:17 95

原创 《一周学完光线追踪》学习 五 表面向量和多个物体

hitable.h#pragma once#ifndef __HITABLE__H__#define __HITABLE__H__#include "ray.h"struct hit_record { float t; vec3 p; vec3 normal;};class hitable {public: virtual bool hit(const ray& r, float t_min, float t_max, hit_record&rec)const =

2021-04-03 20:18:02 96

原创 《一周学完光线追踪》学习 二 Vector3类的使用

vector3.h#ifndef VECTOR3_H#define VECTOR3_H#include <math.h>#include <stdlib.h>#include <assert.h>#include <iostream>#include <iomanip>class Vector3 {public: Vector3() { e[0] = 0; e[1] = 0; e[2] = 0; } Vecto

2021-04-03 09:49:17 104

原创 《一周学完光线追踪》学习 一 建立工程文件

#define GLUT_NO_LIB_PRAGMA#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */#pragma comment (lib, "glut64.lib") /* link with Win64 GLUT lib */#include <stdlib.h>#include "glut.h"#include "glext.h"#define WIDTH 512#

2021-04-03 09:35:55 92

原创 Week 13. 第301-315题

301. 删除无效的括号分析从前往后扫描, 遇到(就让左括号数量++; 如果遇到), 让右括号数量++l, r表示多余的左右括号数量codeclass Solution {public: vector<string> ans; vector<string> removeInvalidParentheses(string s) { int l = 0, r = 0; for (auto x : s)

2021-04-01 09:55:49 82

原创 Lecture3 Real-time Shadows 1

P1 lecture 123:00 开始介绍虚幻引擎5原理 - 顾险峰 - 计算共形几何从shaow mapping的基本知识上开始说, 然后在games101里面提到shadow mapping基本是怎么做的, 然后会在这节课里, 会多分析它(shadow mapping)的问题, 以及它对应的解决方式, 相当于是把硬阴影的绘制说清楚然后回顾一下 shadow mapping背后的数学原理, 包括实时渲染, 离线渲染之间的基本的联系percentage closer soft shadows(

2021-03-30 23:42:32 108

原创 Week 4

1353. 滑雪场设计分析所有输入的山峰高度都在[0, 100]最优解里, 修改完后的山峰高度是否会存在<0或者>100的山峰高度直觉上讲, 是不可能的证明:假设在最优解里面, 某个山峰的高度<0, 因为最优解保证所有山峰高度差在17以内我们可以将这些山峰移动到以0为起始的位置, 在我们假定的最优解里是将后面的值变到<0的位置将山峰按照棕色线变化, 那么代价会变得更小, 最终会将所有山峰变到0这个位置, 它也是一个合法的方案, 并且也是更好的方案, 与<0

2021-03-28 08:25:09 74

原创 1.2.2 最长上升子序列模型(二)

1010. 拦截导弹分析就是最长不上升子序列再加一问,最少需要几套系统才能拦截所有导弹?贪心:从前往后扫描每个数,对于每个数:情况1:如果现有子序列结尾都小于当前数,则创建新的子序列情况2:将当前数放在结尾大于等于它的最小的子序列后面。code(第二问贪心)#include <iostream>using namespace std;const int N = 1010;int a[N], f[N], n, g[N];int main(){ while (c

2021-03-27 23:04:49 54

原创 Week 13. 第283-300题

283. 移动零分析双指针算法如果x不是0, 就放到当前位置上, 当前位置++扫描一遍完后, 将后面的所有数字置0codeclass Solution {public: void moveZeroes(vector<int>& nums) { int k = 0; for (auto& x : nums) if (x) nums[k ++ ] = x; while (k < nu

2021-03-27 15:33:59 117

原创 Week 12. 第260-282题

260. 只出现一次的数字 III分析同剑指offer73codeclass Solution {public:vector singleNumber(vector& nums) {int sum = 0;for (auto& x : nums) sum ^= x;int k = 0;while (!(sum >> k & 1)) k ++;int first = 0;for (auto& x : nums)if (x >>

2021-03-25 21:53:30 119

原创 Week2

191. 位1的个数(3月22日)分析lowbitcodeclass Solution {public: int hammingWeight(uint32_t n) { int res = 0; while (n) res ++, n -= n & (-n); return res; }};85. 不用加减乘除做加法(3月22日)分析将加法拆开: 不进位 + 进位不进位的话 = 异或和进位的话 就是算 (num1

2021-03-25 07:53:27 71

原创 Week 12. 第235-258题

235. 二叉搜索树的最近公共祖先分析分情况, 3种情况如果p, q在两边, 那么lca就是根节点如果p, q在左边, 那么递归到左子树, 那么递归到左子树(因为变成了相同的问题)如果p, q在右边, 那么递归到右边每次递归只会递归一个分支, 因此递归最大深度就是树的高度, 时间复杂度O(h), h是树的高度提高班LCA正规的lca O(logn)离线做法O(1)code/** * Definition for a binary tree node. * struct TreeNo

2021-03-23 11:46:35 154

原创 Week11. 第225-234题

225. 用队列实现栈分析压入压入的话, 直接把5压入队列弹出弹出的话, 按照栈的弹出方式, 应该将5弹出, 但是我们按照队列的话, 会把1弹出去所以我们先想办法把5找到, 再把5弹出去所以这里我们需要用一个额外的缓存的点, 先将1234从队列里弹出来, 然后存起来然后队列里就不存在1234了然后这样的话, 5就找到了, 将5弹出来, 弹完之后,我们将1234 放回去这个缓存的数据结构也是队列所以我们从缓存中往外去弹, 也是1234往外去弹因此再把1234顺次放到队列就可以了

2021-03-23 00:15:56 115

原创 shellmad-25_C++新特性 强弱指针计数器增减分析

这节课讲讲智能指针的计数器如何去管理的以及我们自己来编写一个自己的有强弱指针关系的智能指针版本具体而言:按道理, 我们要跟踪源码, 为什么呢因为我们要知道几个问题何时我们的强指针次数会+1, 何时我们的弱指针次数会+1我们需要去跟踪这里我们提供跟踪的思路强指针构造, 析构, =赋值, 拷贝构造等情况下, 计数器的变化弱指针构造, 析构, =赋值, 拷贝构造等情况下, 计数器的变化弱指针提升为强指针, 计数器变化代码运行分析:强指针构造的时候, 计数器变化情况单步走, f5,

2021-03-22 12:25:56 189

原创 shellmad-24_C++新特性 share_ptr与weak_ptr的源码分析

深入分析shared_ptr与weak_ptr的实现stl中使用了shared_ptr来管理一个对象的内部指针,并且使用了weak_ptr来防止前面所提到的shared_ptr循环引用的问题。接下来简单的分析shared_ptr和weak_ptr的实现,最后通过自己写代码来模拟shared_ptr和weak_ptr,达到深入学习的目的:测试代码如下:#include "stdafx.h"#include <memory>int _tmain(int argc, _TCHAR* ar

2021-03-22 11:15:09 210 1

原创 shellmad-23_C++新特性 weak_ptr的提出及解决循环引用的思路

深入分析shared_ptr与weak_ptr的实现stl中使用了shared_ptr来管理一个对象的内部指针,并且使用了weak_ptr来防止前面所提到的shared_ptr循环引用的问题。接下来简单的分析shared_ptr和weak_ptr的实现,最后通过自己写代码来模拟shared_ptr和weak_ptr,达到深入学习的目的:测试代码如下:#include "stdafx.h"#include <memory>int _tmain(int argc, _TCHAR* ar

2021-03-22 08:49:15 145

原创 shellmad-22_C++新特性 智能指针循环引用问题原理解析

智能指针的循环引用// TestC11.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <cstring>using namespace std;//智能指针:// 1. 用起来像指针// 2. 会自己对资源进行释放class CStudent{public: CStudent() {} void test() { cout &l

2021-03-22 08:20:46 105

原创 Week 11. 第215-224题

215. 数组中的第K个最大元素分析快速选择模板题回顾一下快速选择确定一个基准值x将小于等于x的数 放到左边, 大于等于x的数放到右边然后递归排左边, 递归排右边这样左右两边递归完以后, 整个数组就排序完了快排期望是O(nlogn), 因为每次内部调整是O(n)的, 每次除以2, 期望会递归O(logn)层, 所以总的时间复杂度是O(nlogn)快速选择基于快排如果第k大元素在左边, 那么只递归左边就可以了如果k第k大元素在右边, 那么只递归右边就可以了也就是在递归的时候只递归一边

2021-03-21 21:20:06 273

原创 第五章 动态规划(二)

本节目录线性DP区间DP1. 线性DP递推顺序是线性的898. 数字三角形分析见寒假每日一题code#include <iostream>using namespace std;const int N = 510;int n, a[N][N];int main(){ scanf("%d", &n); for (int i = 1; i <= n; i ++ ) for (int j = 1; j <=

2021-03-21 15:15:45 185

原创 寒假每日一题(提高组)Week 3

1262. 鱼塘钓鱼分析最开始在1号鱼塘在去做的时候, 我们可以先去枚举下最远走到哪个鱼塘, 为什么要这样枚举呢我们发现在每个鱼塘钓到鱼的数量, 只取决于在这个鱼塘钓鱼的总时间因此不可能出现折返的情况(先往前走, 钓几分钟, 再回来钓❌)如果出现折返的情况的话, 我可以改进方案, 直接在第1个鱼塘钓满可以钓的时间, 再去第2个鱼塘钓鱼, 这样我们总时间就会变小因此不可能往回走, 所以会往前走所以我们枚举最远到达哪个鱼塘, 那么路上所花的时间就确定了因此总共的钓鱼时间就确定了, = T(总时

2021-03-21 09:23:02 81

原创 Week 10. 第205-214题

205. 同构字符串分析题目要求:相同字符不能映射到相同字符不同字符不能被映射到相同字符解决思路:3. 开个hash表, 存下映射, 存下当前哪个字符—>哪个字符, 每次来个新的字符的时候, 判断下字符是否被映射过了;如果被映射过的话, 判断下映射的字符是否和之前的字符一样 (存一个s—>t)4. 两个不同的字符是否映射为同一个字符, 这里需要存一个t—>s, 每次对于一个新的字符, 需要判断下, 新的字符时候被之前的某些字符映射过; 如果映射过的话, 需要看一下, 映

2021-03-20 17:10:48 98

原创 第三章 搜索与图论(一)

01:55:34开始拓扑排序图的宽搜的经典应用—> 求拓扑序列图的拓扑序列是针对有向图来说的有向无环图---->拓扑图度数:入度: 一个点有几条边进来出度: 一个点有几条边出去入度为0的点可以作为起点(因为没有任何点指向我)queue <--- 所有入度为0的点while (queue 不空) { t<--队头 枚举t的所有出边t->j; 删掉t->j边, d[j] --; // 为什么要删掉t->j呢, if (d[j] == 0

2021-03-20 15:23:35 139

原创 第五章 动态规划(一)

1.背包问题当空间优化为一维之后,只有完全背包问题的体积是从小到大循环的。(1)01背包:每件物品最多只用一次(2)完全背包:每种物品有无限个(3)多重背包:每种物品最多有Si个(4)分组背包:物品分为N组,每一组有若干个物品,每一组只能选一件物品2. 01背包问题分析解析:一件物品只有选和不选两种可能,所以是0-1背包。dp[i][j] 表示只考虑前 i 个物品,物品总体积 <= j 的情况下,最大价值是多少dp[i][j]怎么来呢?来自两种情况:1.不选择第 i 个物品d

2021-03-20 12:42:12 83

原创 Week 10. 第189-204题

189. 旋转数组分析1 2 3 4 5 6 7向右边移动3位5 6 7 1 2 3 4移动k次, 相当于后面k个数移动到前面当然先要对 k % n先原地算法当然想用原地算法的话, 每次移动1个, 移动k次, 这样时间复杂度O(n^2)因为移动1次要搬运n - 1个数, k次的话要搬k(n - 1)次将数组翻转的话, 可以用原地算法来做第1次交换 第1, 第n - 12次交换, 第2, 第n - 2个数当两个指针相遇的时候, 就结束了所以可以原地算法翻转一段那么能不能用翻转

2021-03-19 23:11:32 197

原创 Week 9. 第167-188题

167. 两数之和 II - 输入有序数组分析只是说同一个下标上的位置上的数只能用1次, 但是如果有2个2, 在不同下标, 可以用2次code(hash)class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hash; for (int i = 0; i < num

2021-03-19 00:04:12 176 1

原创 Week 1

AcWing 35. 反转链表 (3月18日)注意if (!head || !head->next) return head; 表示只有一个点一定要加!head->next 否则递归死分析迭代的话, 只需要挨个翻转即可注意head->next = NULL 因为头节点变成了尾节点, 因此需要置空code/** * Definition for singly-linked list. * struct ListNode { * int val; *

2021-03-18 23:36:13 80

原创 (*(void (*)())0)()

(*(void (*)())0)()首先可以看见最后面一个括号, 肯定是函数调用, 才会出现的, 砍掉(*(void (*)())0)然后看到中间主体void(*)() 是一个返回值为void 参数为空的 函数指针一般声明一个函数指针变量 int (fp) (int, int)转换为类型的话 fp去掉就可以了 int ()(int, int)(void (*)())0 表示将0转换为函数指针类型前面再来一个*, 表示取函数指针的值, 就是函数了最后跟个砍掉的(), 表示函数调用..

2021-03-18 11:58:07 250

原创 寒假每日一题(入门组)Week3

1208. 翻硬币(1月18日)分析长度100, 如果用dfs, 每个状态有2种, 2^100, 必定超时需要想额外的方法去做观察下一些性质长度是n的话, 一共可以进行的操作n - 1种, 第1次操作前两个, 以此类推能够改变第1个位置, 其实只有1种, 而且发现n - 1种操作有以下性质操作顺序没影响每个操作最多1次, 操作2次等于没有操作可以列下列表操作列表12…n - 1能否操作第1硬币与目标状态是否相同: 相同1, 不同0所以第1个

2021-03-17 10:56:57 118

原创 右值引用_自己总结

普通对象 右值引用来接收减小内存消耗#include <iostream>using namespace std;int g_constructCount=0;int g_copyConstructCount=0;int g_destructCount=0;struct A{ A(){ cout<<"construct: "<<++g_constructCount<<endl; } A

2021-03-17 10:17:50 141

转载 shellmad-右值引用

七大爷的备课的内容, 转载过来右值引用右值引用是 C++11 引入的与 Lambda 表达式齐名的重要特性之一。它的引入解决了 C++ 中大量的历史遗留问题,消除了诸如 std::vector、std::string 之类的额外开销,也才使得函数对象容器 std::function 成为了可能。(1)左值、右值的纯右值、将亡值、右值要弄明白右值引用到底是怎么一回事,必须要对左值和右值做一个明确的理解。左值(lvalue, left value),顾名思义就是赋值符号左边的值。准确来说,左值是表达式

2021-03-17 08:59:21 137

原创 shellmad-10_C++新特性 lambda表达式与匿名函数

代码中会遇到这样一种情况, 写的某一个函数, 有可能只会被调用1次, 或者说不会在被其他地方复用了, 这时候专门写一个函数就不太划算, 但是不写的话, 代码逻辑就会比较混乱, 所以就有一个匿名函数的东西举个例子比如点击某个按钮, 会执行某个动作那么在执行动作的时候, 对应的是某个函数的处理而实际上动作只是针对于这个点击操作而言的, 才触发的在其他地方都不会被使用到的, 只有在这里被使用的, 所以最好的方式是为他提供一个匿名函数lambda表达式就是匿名函数(没有名字的函数)一般函数写法

2021-03-17 08:12:44 195

原创 Week 9. 第151-166题

151. 翻转字符串里的单词分析单词不能翻转, 但是所有单词要颠倒下前后位置字符串前后会有多余的空格, 中间至多2个空格, 题目要求前后删除, 中间改成1个要求空间O(1)先将字符串以字母为最小单位翻转每个单词内部翻转(双指针)多余空格处理: 直接将原数组排到前面code注意观察细节, 刚开始j = i, t = k, 赋值, 因为需要从这里开始变换中间位置变换k = t, i = j, // k变为变化后t的位置, i变为变化后j的位置class Solution {

2021-03-16 23:07:05 330

原创 基础渲染光照介绍(一)(先行版)

基础光照lambert(漫反射)Phong(reflect(-r, n) dot v)Bling-Phong(half-verctor dot n)法线贴图要获取法线贴图里的法线的信息, 需要先Unpack一下, 然后获得的是模型空间的法线, 再用TBN矩阵转换到世界空间, 这样就得到了世界空间的法线然后将法线代入到 lambert, Phong, Bling-Phong就得到了相应的光照信息CubeMap环境贴图用于做反射效果, 环境光效果详情见庄懂老师课程, 百人计划暂时没详细内容调

2021-03-15 22:33:34 444

原创 Week8. 第141-150题

141. 环形链表分析链表找环有环意味着从前往后遍历会遇到重复的点(重复是指地址重复)最多只有1个环, 如果有很多环图中一个蓝色点会有2个next, 分叉出去, 一个向下走, 一个向右走其实每个点只有一个指针, 因此有环的话就只有1个环开个hash表存下地址, 然后遍历的过程中判断有无出现重复的点, 如果有重复点, 说明有环时间O(n), 空间O(n)题目要求空间O(1)快慢指针:如果这样走每次迭代 快指针与慢指针之间的距离k(图中绿色段)会-1, 所以迭代k次, 快指针会追上慢指

2021-03-15 17:29:12 117

原创 《剑指Offer》第56-66题 Week6

73. 数组中只出现一次的两个数字分析可以对数组中所有数取异或^运算因为x != y, 因此 z = x^y != 0由于x!= y, 那么z的二进制表示, 肯定有一个1, 然后找出1所在的位置, 比如为二进制表示中的第k位为1然后将原数每个数都变成二进制, 根据第k位是否为1, 将原数组划分, 那么原数组中的每一个数 要么第k位二进制表示为1 , 要么第k位二进制表示不为1, ,每个数只可能属于其中的一个集合不可能存在一个数第k位既为1, 又为0, 有这样的数吗??? hhh比方说a

2021-03-15 13:56:12 73

Blueprints Visual Scripting for Unreal Engine pdf虚幻引擎的蓝图可视化脚本

Blueprints Visual Scripting for Unreal Engine pdf 虚幻引擎的蓝图可视化脚本 pdf

2023-03-16

虚幻 大象无形 资源pdf

虚幻 大象无形 资源pdf

2023-02-22

CUDA_C_Programming_Guide.pdf

Nvidia CUDA 编程指南

2021-12-17

52128计算机图形学编程(使用OpenGL和C++).zip

本学期上图形学编程课,老师提供的辅助材料,无任何版权问题,可以拿去边看书,边翻阅,里面包含ppt,以及程序的参考答案。

2020-11-19

50823操作系统导论.rar

老师那里要过来的,操作系统导论ppt,方便期末考试复习,以及平时读书的时候翻阅,还有一些老外整理的笔记。

2020-11-19

操作系统概念(恐龙书)英文书第9版笔记,自己整理的.zip

操作系统概念(恐龙书)英文书第9版笔记,自己整理的,每张都整理过,包括课后的编程题,都已经写了,可以拿去参考。

2020-11-19

信息学奥赛一本通 题目数据

信息学奥赛一本通 题目数据, 可以用于自测。还有一些pdf文档等等,方便学习。当然还有一些书本中没有的题目,可以拿来参考下。

2020-11-05

空空如也

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

TA关注的人

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