C++ 多维数组 C++ 多维数组在c++中,经常用指针表示一个数组,多维数组则是数组的数组,对于二维数组来说,就像是一个数组里面包含了很多数组的指针,而这些指针又分别对应着一个数组,这样也会使得数组的内存变得不连续,遍历这个数组会花费相比较相同元素个数更多的时间所以应该避免使用多维数组。如下所示,创建了一个二维数组,为里面的一维数组的指针创建了空间,再通过遍历,为每个一维数组的指针赋上了一个10个int大小的指针,这个内存用于存放int。 int** a2d = new int*[10]; for(int i
perspective projection 什么是透视投影?这条铁路两条铁轨并不会像实际的轨道一样无限延伸,而是会在远处相交于某一个点,这个点叫做vanishing point ,离我们越近的物体看着要大一些,离我们较远的物体看着要小一些(比如轨道中间的横梁)就像达芬奇这幅画,我们可以注意到所有的直线都汇交于同一个点,all the lines disappear back to the single point.下图表示的是透视投影的几个要素,首先是spectator,spectator有一个确定的高度,因为其高度不一样,所看到的画面也会
C++ virtual destructors C++的虚析构函数被用于多态之中,用基类指针指向子类对象的地址,当子类对象被删除时,我们希望调用子类的析构函数,而不是父类的析构函数,父类的虚析构函数由此而生。我们定义了两个类class base{ //基类public: base(){cout << "base constructor called" << endl;} ~base(){cout << "base destructor called" << endl;}};clas
C++ template template可以让编译器帮用户写代码,它将会被编译根据你具体的使用,it makes compiler write some code for you based some rules ,and sounds cool !当你使用模板编程时,编译器为此生成一个框架,当你传入某个具体的参数时,编译器将会根据你传入的参数在事先确定的框架里面写入代码。为什么需要模板当我们需要许多函数,其内部执行的操作是相似的,但是我们可能需要接受不同类型的参数,这样的函数就可以写模板模板函数只有当调用这个模板时,才会
C++ virtual function public继承C++中为防止大量的代码重复,使用了继承机制,子类继承父类的函数和属性,子类对象可以调用父类的public函数和属性,子类是对父类的一种扩展,当一些类有一些共同的函数或者属性,我们便可以使用继承机制,将这些函数集成到父类中,减少代码的重复性using namespace std;class entity{public: int x = 0,y = 0; void move(int x_, int y_){ x += x_; y +=
C++ thread(一) C++的多线程编程被用来让一个程序的代码两条路径同时运行,它可以让程序运行的更快,也可以让程序运行时执行不同的操作,比如当程序在执行cin操作时,会一直等待用户输入enter,此时程序就无法执行其他操作,如果使用多线程就可以解决这个问题#include <thread>#include <iostream>static bool finished = false;void doworking(){ while(!finished){ std::co
MIT线性代数学习笔记 一个向量和一个矩阵相乘,可以看作是其列向量的线性组合列空间指的是一个矩阵的列向量所扩张而形成的线性空间,其维数等于独立的列向量的个数,在本例中,维数维2,是一个平面一个矩阵的秩等于其列空间的维数,也等于行空间的维数,矩阵相乘也可以看作第二个矩阵的行向量的线性组合,所以矩阵行空间的维数和列空间的为数相等且都等于矩阵的秩秩为一的矩阵,一列乘以一行,得到的矩阵的所有列都是第一列的倍数,矩阵的所有的行都是第一行的倍数。对Ax = 0,其解组成的空间就是A的零空间,求解x就是相当于求解一个垂直于所有行向
C++ assert assert()函数被包含在头文件assert.h中,当函数括号内的表达式为真时,程序将继续执行,当函数表达式为假时,程序将停止执行。int main(int argc, char* argv[]){ int n = 10; assert(n == 2); return 0;}程序执行的效果如下图...
C++ nested class C++ nested classC++ 的nested class是在类中声明另一个类,nested class的作用域是在class之中,当nested class访问权限设置为public时,可以从class通过作用域解析符号::访问nested class里面的public函数或变量,或者创建一个nested class的对象,就像一个在class名称空间下面的一个类class person{public: string name; person(string _name):na
C++ unordered_set和set set和unordered_set都是C++的关联性容器,set的内部实现为红黑二叉树,unordered_set的内部实现为哈希表,二者存储的值都只能是唯一的,二者的区别是unordered_set的存储的变量没有顺序,set容器则会进行自动排序,unordered_set对插入,删除,查找操作的时间复杂度都为O(1),它运用Hash表将unordered_set中的元素存储在buckets中,buckets是hash函数内部通过插入的元素值分配的一个内存空间,便于快速查找,但是对于数据量较大的情况下ha
相机的归一化图像平面 相机的归一化图像平面在相机的z = 1 前方,将相机平面几百几百的像素单位的坐标转换成了在相机前方的米制(如果有实际尺度)的坐标单位,有利于图像本质矩阵或者三角化的计算,防止求解方程的时候出现退化解,因为相机像素点的齐次坐标形式会有一个1,几百的像素坐标形式可能会使得方程的解退化将相机坐标系下面的一个点PPP三个坐标同时除以ZZZ即可得到相机坐标系下面的归一化坐标P=[x,y,z]T=[x/z,y/z,1]T P = [x,y,z]^T = [x/z,y/z,1]^TP=[x,y,z]T=[x/z,y