- 博客(104)
- 收藏
- 关注
原创 JSP与MVC设计模式与三层架构综合案例
java服务端页面,动态的网页技术可以理解为jsp=html+javajsp本质上就是一个servletBut——————JSP有很多缺点这里用了EL表达式(获取数据)与JSTL标签库(这里介绍的是foreach和if标签)替换JSP中的Java代码${brands}就是获取域中存储的key为brands的数据。
2022-11-09 20:58:16
875
原创 TinyRenderer学习笔记
TinyRenderer项目用tga文件来查看渲染出的图片,引入tgaimage.h与.cpp有了以上的头文件支持,就可以输出到tga图片了!运行。此时,发现线段C并没有显示在图片里,为什么呢——其实它和A是一条线,但是现在的画线代码,只有x0,y0比x1,y1小时才管用,否则t算出来是1~~~解决方式是,把这条线转换成根据y=x对称的线,这样,这条线的k就
2022-10-12 17:59:27
1681
2
原创 Games101-Chapter15-Ray Tracing 3(光线传播+全局光照)
理解之前在布林冯光照模型中提到的:衰减的不是indensity而是irradiance。这个点在所有可能的入射方向反射到这个方向的规律:反射方程。BRDF-如何把一个方向收集到的能量辐射到另一个方向去。甚至可以简化为:所有光源辐射出的能量+被反射后的能量。渲染方程:有物体自身发光,有别的光线反射而来。存留一个问题:(这是一个递归的过程)这里要补充一些概率论知识(略)这样写的最终目的是解渲染方程。双向反射分布函数BRDF。
2022-10-01 18:24:21
156
原创 Games101-Chapter14-Ray Tracing 2
--------------------------本节课探讨AABB怎么加速光线与场景求交问题-----------------------Oct-Tree是八叉树,三维中砍三刀,这个图是二维,那就是两刀分成4块,然后再把切出来的每个小区域切分(高维会很复杂)----->形成Bounding Volume Hierarchy结构(BVH)另一个技术-----空间划分(Spatial Partitions)这种方法什么好用什么时候不好用。对物体而不是空间进行划分----格子不能太稀疏也不能太密集。
2022-09-29 18:13:56
250
原创 Games101-Chapter13-Ray Tracing 1
------------------------------------------以下是光线追踪的基础知识--------------------------------现在要解决点与平面是否有交点——求光线上一点p是否在平面上。“光线追踪”---实质上就是从相机发射光线,直到光源。为啥选AABB这样的表达形式:因为计算简单~~~光栅化最大的问题-不适合去表现全局的效果。求点在三角形内-----之前就讨论过这个问题。刚刚遗留的问题:把光线和每个三角形求交太慢了。(分别求三组对面光线进入和离开的时间)
2022-09-29 10:06:15
329
原创 【STL***关联式容器】
RB-Tree的源码太难了,先不学...红黑树有五个特性:以下四种都是适配器!set,map的底层实现均为红黑树multiset和multimap也是基于红黑树,区别就在于可以插入相同的键值什么时候需要用multiset?当然是需要用set,但是又允许重复key存在的时候了。什么时候用set?需要随时往容器中插入元素,随时对元素进行快速查找,又需要按某种顺序对元素进行遍历的时候.
2022-09-27 11:01:18
399
原创 【STL***stack配接器】
会发现stack的功能deque都已经实现了,因此只需要对deque的功能进行部分封装。比如,提取出pop_back,push_back等。严格来说stack不是容器,是一个底部容器完成它所有的工作,而它只修改了容器的接口,它叫做配接器。上一篇,分析了deque.deque是一个双端开口,存放在连续空间中。而stack是栈,仅允许在尾部操作。
2022-09-26 10:30:49
154
原创 【STL***deque容器一】
deque的构造析构等基本属性获取的方法分析了, 注意的 range_initialize函数是我们看不到的实现. 而它确实非常重要的, 有了它, deque就能够对非random_access_iterator_tag类型的迭代器起作用, 考虑到"向下兼容". 下一节再来分析deque的删除操作。
2022-09-23 17:16:47
238
原创 【STL***list容器三】
list是一个循环双向链表, 不是一个连续地址空间, 所以sort功能需要特殊的算法单独实现, 而不能用算法中的sort. 当然还可以将list的元素插入到vector中最后将vector排序好的数据拷贝回来, 不过这种做法很费时, 费效率先分析几个会被调用的函数。
2022-09-21 11:06:02
425
原创 【STL***list容器一】
vector容器在涉及高频率插入删除时效率太低了list是用链表进行实现的,链表删除插入时间复杂度为O(1),效率相当高,不过随机访问就会变成O(n).list在插入和删除操作后,迭代器不会失效。
2022-09-18 10:43:44
246
原创 【STL***vector容器三】
vector适合用来做随机访问很快, 也支持适合频率较低的插入和删除操作, 在每次插入和删除后迭代器都会失效, 因为不能保证操作之后迭代器的位置没有改变。
2022-09-17 21:00:09
236
原创 【STL***vector容器二】
本节将vector的删除, 交换, 重载等操作进行的分析. 学到关于交换数组可以修改头尾指针即可, 并不实际交换整个元素. 同时要注意erase清除是一个左闭右开的区间. 因为insert的代码很多,也有一点复杂, 所以我将插入操作放到下节进行分析。
2022-09-17 20:41:37
230
原创 【STL***vector容器一】
vector的迭代器是一个普通的指针构造函数的重载满足不同的用户需求vector因为是类, 所以在生命周期结束后会自动调用析构函数, 用户不再手动的释放内存, 也不会出现内存泄露的问题, 用户也可以主动调用析构函数释放内存finish是指向最后一个元素的后一位地址, 不是直接指向最后一个元素。
2022-09-15 15:36:25
640
原创 【C++MiNiSTL项目开发笔记】
GitHub 是一个用于版本控制和协作的代码托管平台,ta能够让你和任何地方的其他工作者一起做项目。Git是目前世界上最先进的分布式版本控制系统git clone用于从github上下载源码git init如果是自己新创建一个文件夹,就在里边git然后告诉git管理这个文件夹下的代码就是输入在工作区写完文件夹时,提交(如果不是提交这个文件夹下所有的,就把点改成要提交的文件名就行)此时,那个文件就会进入准备提交的状态(把文件加入暂存区)这样,git会以数据库的形式把代码保存在git仓库中。
2022-09-10 09:18:11
1064
原创 【***二叉树***】
递归前序遍历:另外两个遍历只需要调整一下打印或者放入数组这条语句的位置!递归较简单,迭代怎么实现前中后序遍历呢?递归的实质是:每一次递归,会把当前各种信息压入栈中递归返回时,弹出,返回上一层因此我们可以用栈来实现!对于前序遍历,访问顺序和处理顺序是一致的,所以代码较为简洁但中序遍历不行后序遍历仅需要在前序遍历的基础上做些修改接下来是利用队列实现的二叉树层序遍历。......
2022-08-14 15:54:27
226
原创 【***操作系统---第三章***】
硬盘是慢速设备,CPU高速,所以有速度矛盾,内存速度高些,可以缓和矛盾。可见,从逻辑地址到物理地址的转变,是【装入】这一步需要考虑的。(装入模块装入内存)
2022-07-31 11:54:10
296
原创 【C++Primer---C++知识点记录*VI---泛型算法】
标准库并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法这些算法并不直接操作容器,而是遍历由两个迭代器指定的一个元素范围我们发现,它们都可以使用find算法算法永远不会执行容器的操作。算法运行于迭代器之上,永远不会直接添加或删除元素只读取输入范围内的元素,不改变元素。例如find,count,accumulate(在头文件numeric)如accumulate的第三个参数,就是开始累加的初值,这个值便决定了函数中使用哪个+运算符以及返回值的类型。我们只能写string(""),而不能写"",
2022-06-28 09:58:54
276
原创 【***操作系统---第二章***】
程序:一个指令序列早期计算机只支持单道程序引入多道程序技术后: 现在我们知道了一个进程内部的组成现在要了解多个进程之间的组织 本节总结 就绪态:进程已经有了处理机之外的所有需要的资源为了提高CPU利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务 本节总结 什么是进程控制——实现进程状态转换用什么实现进程控制——原语原语运行在核心态 进程控制相关的原语: 本节总结 本节总结....................................
2022-06-27 18:09:27
256
原创 【C++Primer---C++知识点记录*V---IO库】
目录IO类IO对象无拷贝或赋值条件状态管理输出缓冲文件输入输出string流iostream定义了用于读写流的基本类型fstream定义了读写命名文件的类型sstream定义了读写内存string对象的类型标准库使我们能忽略不同类型的流之间的差异,这是通过继承机制实现的(例如ifstream继承自istream)因为不能拷贝,所以不能将形参和返回值类型设置为流类型,所以进行IO操作的函数要以引用的方式传递和返回流。有一些函数和标志,可以帮助我们访问和操纵流的条件状态p280每个输出流都管理一个缓冲区,用来保
2022-06-27 16:56:14
127
原创 【C++Primer---C++知识点记录IV---类】
类的基本思想是数据抽象和封装数据抽象是一种依赖于接口和实现分离的编程技术定义在类内部的函数是隐式的inline函数成员函数通过一个名为this的额外隐式参数来访问调用它的那个对象,当我们调用一个函数时,会用请求该函数的对象地址初始化thisreturn a相当于 return this->a在函数的参数列表后加const,const会修改隐式this指针的类型常量对象,常量对象的引用或指针都只能调用常量成员函数编译器在处理类时,先编译成员的声明,然后才轮到函数体若在类的外部定义成员函数,除了要和声明一模一样
2022-06-24 10:31:52
70
原创 【***操作系统---第一章***】
针对操作系统的功能和目标,提出三个问题:1.作为系统资源的管理者 2.作为用户与计算机硬件之间的接口 3.作为最接近硬件的层次 本节总结1.并发 即便有多核CPU,并发依旧必不可少2.共享 3.虚拟 4.异步...............
2022-06-22 09:17:14
304
原创 【***数组***】
C++中,二维数组的内存空间也是线性的连续的704. 二分查找 - 力扣(LeetCode)27. 移除元素 - 力扣(LeetCode)有序数组的平方 977. 有序数组的平方 - 力扣(LeetCode)
2022-06-21 21:27:15
306
原创 【C++Primer---C++知识点记录III---表达式、语句、函数】
左值和右值lvalue代表一个在内存中占有确定位置的对象(换句话说就是有一个地址)。rvalue通过排他性来定义,每个表达式不是lvalue就是rvalue。因此从上面的lvalue的定义,rvalue是在不在内存中占有确定位置的表达式。在C++中一个简单的归纳:当一个对象被用作右值时,用的是对象的值(内容),当一个对象被用作左值时,用的是对象的身份(在内存中的位置)一个重要的原则是在需要右值的地方可以用左值来代替,但是不能把右值当做左值使用右值引用(C++11)有四种运算符明确规定了运算对象的求值顺序&
2022-06-21 17:40:24
275
原创 【C++Primer---C++知识点记录II-标准库类型初识】
头文件不该包含using声明(这个属于规范内容)目录标准库类型string标准库类型vector迭代器介绍数组初始化string:使用=,是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用=,执行的是直接初始化若初始化要用到的值有多个,只能使用直接初始化----> string s(10,'c');这实际上是创建了一个string对象然后又拷贝给了s,10和c是参数string对象上的操作(待扩展)string 对象会自动忽略开头的空白并从第一个真正的字符开始读取,直到遇到下一个空白如
2022-06-21 09:26:44
223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人