自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (3)
  • 收藏
  • 关注

原创 【Java25】内部类

把一个类定义在另一个类内部,就是内部类(也叫嵌套类)。包含内部类的类称为外部类(也叫宿主类)。大部分情况下,把内部类看成是成员内部类,也就是和成员变量、成员方法、构造器、初始化块类似的东西(想一想能够放在Java类内部的五种东西)。因此,成员内部类也就有两种:static修饰的“类内部类”(太拗口了,所以还是遵循传统叫静态内部类,或者就直接叫static修饰的成员内部类)和普通内部类。除此之外,成员内部类做为外部类的组成部分,具有访问权限,即publicprivateprotected。

2024-07-25 10:06:06 750

原创 【Java24】面向接口编程

利用接口可以降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。

2024-07-23 15:34:54 380

原创 【Java23】接口

抽象类是多个子类抽象出来的模版。如果把这种抽象进行得再彻底一些,就可以提炼出更加特殊的”抽象类“,即。所谓接口,是比抽象类更抽象的东西:它不关心类方法的实现细节,甚至连类内部状态数据也不关心。它只规定类内必须提供某些方法(行为)。可以认为接口是多个相似类的行为的抽象,是某种。,体现了面向对象的特点。由上图可见,接口是比类更抽象的存在。通过使用接口,既可以让相似类之间聚起来(遵循同一个接口),又避免关系过于紧密(继承),从而实现。

2024-07-23 15:33:23 693

原创 【Java22】抽象类

编写类的时候,通常会为这个类定义一些方法,用来描述该类的行为方式,这些方法通常应该有具体的实现代码。但在有些情况下,父类只知道子类应该有什么行为,却不知道子类该如何实现这些行为。例如,父类Shape知道,它的子类应该能够计算周长。但是不同的子类计算周长的方式不同,即Shape类不知道子类该如何实现这个方法。既然这样,那父类干脆不要知道这个行为就好了。但是这样一来,假设一个Shape引用变量Shape a实际上指向的是Shape的子类的实例,那么这个引用变量就无法调用子类的方法了。

2024-07-18 15:17:19 396

原创 【Java21】final修饰符

final可以用来修饰类、变量和方法。类似C++里的const,表示被修饰的类、变量和方法不可改变。finalfinal修饰的变量并不是不能赋值,而是不能被重新赋值。一旦获得初始值之后,就不能修改的意思。final。

2024-07-17 15:23:03 1092

原创 【Java20】单例类

系统第一次使用这个类的时候,系统会为该类变量分配内存空间,类变量开始生效,直到该类被卸载,类变量所占空间才会被垃圾回收机制回收。一个类内,可以有5种成员:成员变量、成员方法、构造器、初始化块、内部类(包括接口和枚举)。类变量既可以通过类来访问,也可以通过对象来访问。但后者只是Java允许的,是一种假象,实际上访问的还是类变量。但如果不太像反复创建实例,比如房子里只有一个茶几、游戏只有一个窗口,这时反复创建多个对象就没有太大的实际意义。与类变量类似,类方法也是既可以通过类,也可以通过对象来调用。

2024-07-17 15:22:15 139

原创 【Java19】包装类

早期Java提供的基本类型变量和包装类对象之间的转换比较麻烦。现在大幅简化了,JDK1.5以后提供了自动装箱(autoboxing)和自动拆箱(autounboxing)功能。Java是面向对象的编程语言,但也包含了8种基本数据类型。这8种基本数据类型不支持面向对象的编程机制:没有成员变量、方法可以调用。自动包装和拆装必须注意类型匹配。返回来也可以把包装类的实例”近似“当成基本类型变量使用。把基本类型变量转换为字符串还有一种更简单的方法:将基本类型变量与空字符串。方法用于将基本类型变量转换成字符串。

2024-07-15 21:47:53 302

原创 【Java18】初始化块

和一起,是能在类中出现的成员。staticdefaultstatic虽然但是,同样修饰符的代码块没必要分成一个个小块块。因为代码块就是在创建Java对象的时候隐式执行的,而且总是全部执行。所以分成小块块和合并成一个大块块,没有区别。

2024-07-15 20:08:09 696

原创 【Java17】组合

则在实现代码复用的同时,保留了原本类的封装性。这两者一定程度上是有取舍的。

2024-07-12 22:15:14 610

原创 【Java16】多态

对面向对象语言来说,所有的对象(Object),或者说类的实例,本质上都是引用变量。因此,多态最主要就是针对对象来说的:声明时引用变量指向的对象的类型,和运行时引用变量指向的对象的类型不一致。即其编译时类型是父类类型,运行时类型是子类类型。那么也可以反过来,执行。引用变量在编译阶段只能调用其编译时类型拥有的方法,但是在运行时可以执行其运行时类型拥有的方法。类型转换运算符可以实现基本类型之间的转型,也能实现引用变量的转型。,这种引用变量的类型在声明它的时候就决定了;,这种变量的类型由实际赋给它的对象决定。

2024-07-11 22:21:17 1129

原创 【Java15】继承

(2)在子类的方法中也可以使用。

2024-07-09 00:00:01 803

原创 【Java14】构造器

如果有一天,A的代码改了,那么就要把B,C……实际上,调用构造器时,系统首先为该对象分配内容,并对这个对象执行默认初始化,这时这个对象已经产生了。当构造器执行完毕后,这个对象以构造器的返回值(注意构造器并没有显式定义返回值,但默认返回值就是对象的引用)被返回,通常直接赋值给一个。如果类中没有任何显式定义的构造器,系统会提供一个无参数的构造器,这个构造器执行体为空,不做任何事情(但是实际上执行了默认初始化)。的话,A修改完,B,C……既要在B中调用A,又不想创建额外的对象,方法就是依然使用构造器B来。

2024-07-08 22:41:01 464

原创 【Java13】包

虚拟机在装载lee.Hello类时,会依次搜索CLASSPATH环境变量所指定的系列路径,查找这些路径下是否包含lee路径,并在lee路径下查找是否包含Hello.class文件。如果在lee包下再定义一个子包,那么子包中的类不能直接访问lee包中的类了。此外,在使用子包中的类时,要使用该类的全名(包名+类名),不能省略前面lee包的路径。按道理,-d是指定编译结果.class文件的位置,这里指定是当前目录(.),但实际上是在当前路径下创建了一个文件夹lee,里面包含Hello.class。

2024-07-07 22:23:27 782

原创 【Java12】封装

从此之后,要么用锁开(成员类),要么通过这几个窗子来访问箱子内部的东西。如果一个Java源文件中,所有的类都没有public修饰,那这个源文件的文件名可以是任意名称;但是一旦有一个类被修饰为。三个访问控制符,表示3个访问控制级别(权限),再加上一个没有任何访问控制符的级别(default),一共4个级别。封装(Encapsulation)是面向对象的三大特征之一(另两个是继承和多态),指的是。,这是由于Java独特的**包(package)**机制导致的。在C++的基础上,Java的访问控制多了一个级别,

2024-07-07 22:22:33 467

原创 【Java11】变量的初始化和内存中的运行机制

对引用类型的局部变量,方法或代码块结束时,它销毁。此时堆中的对象或数组没有人指向它了。若没有任何引用变量指向它,会启动垃圾回收机制,销毁堆内存中的它。尽量使用类来调用类变量。虽然Java允许使用对象来调用类变量,但这太容易造成误会了。没必要非考验自己的智商。系统加载类或创建类的实例时,系统自动为成员变量分配内存空间,然后自动为成员变量指定初始值。

2024-07-05 22:49:09 338

原创 【Java10】成员变量与局部变量

Java中的变量只有两种:成员变量和局部变量。和C++不同,没有全局变量了。,field,我习惯称之为**”属性“**(但这些年,因为attribute更适合被叫做属性,所以渐渐不这么叫了)。是在方法中定义的变量。

2024-07-05 22:13:38 423

原创 【Java09】方法(下)

形参的类型后加。

2024-07-04 22:27:37 281

原创 【Java08】方法(上)

没有独立存在的。

2024-07-03 00:16:23 370

原创 【Java07】类中的this关键字

当static修饰的方法遇到this时,因为static修饰的方法属于类方法,不属于某个具体对象。因此,static方法中的this是无法指向明确的对象的。上述代码中,info()前使用this是允许的(Java允许),但是实际上应该是Example.info()才对。如果仅仅如此,this也就是个指示符而已,但是this还有一个作用,就是可以作为对象的引用变量。上述代码中,在run中实例化dog对象d,再调用d的方法,这么做本身没有问题,但是开辟了一块新的堆内存。构造器中的this也可以省略。

2024-06-25 23:41:56 275

原创 【Java06】Java中的类与对象

Java中对象(实例)的本质,是一个引用变量,和C++,以及之前介绍的数组引用变量类似。类似地,当没有任何指针指向这个对象,Java的垃圾回收机制就会启动。Java中的static关键字用来修饰方法、成员变量,表示。虽然static翻译成“静态”,但其实真正作用就是区分。因此也把static修饰的方法或变量称为。不用static修饰的成员方法或变量称为。这4中成员到底属于类本身还是属于单一实例。

2024-06-25 00:08:58 313

原创 【Java05】Java中的多维数组

从数组底层运行机制上看,Java没有多维数组一说。所谓多维数组,是说一个引用变量指向的元素也是引用变量。这里相当于初始化了一个一维数组,这个数组的长度是length,这length个元素的初始值都是。是个指向type类型元素的数组。倘若type也是数组引用变量,比如。按照上述方式定义的二维数组,本质上还是一维数组。,这时并没有关心第二个维度的初始化。,那么这个数组就可以定义为。时,和普通类型没有区别。

2024-06-17 22:32:33 235

原创 【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。

2024-06-16 23:05:37 270

原创 【Java03】Java中数组在内存中的机制

初始化4块内存:a,b是两个引用变量(指针),在栈上;堆内存中的对象不会随方法结束和销毁。只有没有任何引用变量引用它时,系统垃圾回收器才会。只要类型兼容,就可以让一个数组变量指向另一个实际的数组(指针的赋值)。这实际上是让b指向a指向的数组对象。通过这个数组的引用变量(指针)来访问。Java中的数组变量其实就是指针。Java中的数组是一种。如果想要访问数组元素,

2024-06-16 22:34:51 316

原创 【Java02】Java中数组的定义与初始化

推荐第一种方式。这种方式容易让人理解,数据类型是type[],对象名称是arrayName。第二种方式有些老旧了。由于数组是一种引用变量(也就是一个指针),所以定义的时候还没有指向任何有效的内存空间,因此在定义数组的时候不能指定数组的长度,也不能直接使用。必须进行初始化。可以使用var让系统自动推断变量类型,既可以用于静态初始化,也可以用于动态初始化。

2024-06-10 21:57:08 709

原创 【Java01】Java 17中的switch

如果表达式的case块中有多条语句,使用yield返回值。做为表达式使用时,可以将其赋值给某个变量。

2024-06-10 21:31:54 598

原创 【笔记】Polygon mesh processing 学习笔记(10)

应用问题分析挑战层次化的方法两个半球空间变换的方向信息,分配给每个点Magnitude + directionMulti-valued field常见的场:1-vector field (有大小有方向),2-direction field (只有方向没大小,也叫line field,2-RoSy field),131^313-vector field(三个独立的向量,这个3表示3个独立);4-vector field(4方向的向量场,只有一个独立的方向);4-direction field(没有长度,也叫u

2022-06-28 20:55:07 631 1

原创 【笔记】Polygon mesh processing 学习笔记(9)

simplification,approximation,decimation把一个模型transform到另一个模型,更少的面、边、顶点简化和近似通常被用户定义的一个质量标准(quality criteria)来控制Vertex removal/ vertex insertionEdge collapse / vertex splitHalf-edge collapse / vertex split注意要避免illegal collapse (非流形)Vertex contraction,这种操作使顶点-

2022-06-05 09:37:03 565

原创 【笔记】Polygon mesh processing 学习笔记(8)

多边形网格处理(8)Mapping参数化和Deformation的本质都是MappingIntroductionf:Ω⊂Rd→Rdf: \Omega \subset R^d \rightarrow R^df:Ω⊂Rd→RdMesh-based mapping仿射变换,定义在每个三角形面片上的ft(x)=Jtx+btf_t(x)=J_t x + b_tft​(x)=Jt​x+bt​Meshless mappingf(x)=x+∑i=1mciBi(x)f(x) = x + \sum_

2022-05-30 16:01:02 997

原创 【笔记】Polygon mesh processing 学习笔记(7)

多边形网格处理(7)7. RepairingDefinetionProblem statementModel repair, removing artifacts from a geometric model, generate output suitable for further processing by downstream applciations that require centain quality guarantees.Application dependentDepen

2022-05-16 22:11:02 434

原创 【笔记】Polygon mesh processing 学习笔记(6)

6. Deformation(变形)引言所谓变形,是指交互式地改变网格。形式化定义:S′={p+d(p)∣p∈S}\mathcal{S}' =\{p+d(p)|p\in \mathcal{S}\}S′={p+d(p)∣p∈S}对离散三角网格而言,位移函数ddd是分段线性的,完全由原始网格的顶点对应的位移向量定义。用户预先定义一个位移区域, handle points,同时约束一些区域保持不变,fixedpointsfixed pointsfixedpointsd(pi)=diˉ,pi∈

2022-05-10 14:19:14 804

原创 【笔记】Libig从入门到放弃(续)

参数化参数化方法可大致分为四族:Single patch, fixed boundary. parametrize a disk-like part of the surface given fixed 2D positions for its boundary. 简单,高校,但是参数化后的map有很大distortionSingle patch, free boundary. 减少了map distortion,但是可能出现self-intersectionGlobal parametrizat

2022-05-02 20:54:47 1051

原创 【笔记】Libigl从入门到放弃

主要内容Libigl基本知识离散几何参量与算子Libigl基本知识Libigl设计原则没有复杂的数据类型。只使用矩阵和向量;尽可能减少对外部库的依赖只有头文件(也可以做一个静态编译库)函数封装性下载Libiglgit clone https://github.com/libigl/libigl.gitLigigl核心功能只依赖C++标准库和Eigen但是编译起来还是挺费劲的,哈!Mesh表示Libigl使用Eigen库编码向量和矩阵Eigen参考指南: Dense

2022-04-30 12:10:11 3908

原创 【笔记】《WebGL编程指南》学习(10)

WebGL编程指南学习(10)This is just the end of the beginning. —— Winston Curchill10. 高级技巧(又续)绘制阴影实现阴影有若干种不同的方法,书里的例子是阴影贴图(Shadow map)或称深度贴图(Depth map)如何实现阴影?物理上:对一根光线上的两个点,如果一个点的z值大于另一个点,则它在阴影中算法上:计算光源到物体的距离根据计算出的结果,绘制场景计算机实现上:一组着色器用来计算光源到物体的距离,得到一

2022-04-24 14:36:20 1566

原创 【笔记】《WebGL编程指南》学习(9)

WebGL编程指南学习(9)Ragnarok!9. 高级技巧(续)α\alphaα混合如何实现α\alphaα混合两个步骤:开启混合功能gl.enable(gl.BLEND)指定混合函数gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)混合函数gl.blendFund()在进行α\alphaα混合时,实际上用到了两个颜色,源颜色(source color)和目标颜色(destination color)。前者是“待被混合的颜色”,也就是

2022-04-09 22:19:36 361

原创 【笔记】《WebGL编程指南》学习(8)

WebGL编程指南学习(8)漫长的旅行即将到达终点……8. 高级技术8.1 用鼠标控制物体旋转如何实现物体的旋转?如何旋转物体?使用MVP矩阵来变换顶点的坐标;根据鼠标的移动情况创建旋转矩阵,更新MVP矩阵算法思路在鼠标左键按下时记录鼠标的初始坐标;然后在鼠标移动的时候用当前坐标减去初始坐标,获得鼠标的位移;然后根据这个位移来计算旋转矩阵。这就需要一个鼠标移动事件的监听器。注册event handlertick()函数,执行动画function main() { ...

2022-04-06 14:06:31 1292

原创 【笔记】《WebGL编程指南》学习笔记(7)

WebGL编程指南学习(7)7. 层次模型由多个简单的部件组成的复杂模型为复杂物体(机器人手臂)建立具有层次化结构的三维模型7.1 多个简单模型组成的复杂模型层次结构模型当情况较为简单时,实现“部件A转动带动部件B转动”可以很直接,只要对部件B也施以部件A的旋转矩阵即可情况复杂一些时,需要考虑多个旋转矩阵。按照模型中各个部件的层次顺序,从高到低逐一绘制,并在每个关节上应用模型矩阵例程:单关节模型两个立方体部件组成的机器人手臂:arm1(上臂)和arm2(前臂)。使用左右方向键控制a

2022-03-30 14:18:34 421

原创 【笔记】Polygon mesh processing读书笔记(5)

多边形网格处理(5)5. 参数化(Parameterization)5.1 通用目标计算一个目标的参数化意味着为其附着一个坐标系统。这个坐标系统有许多可能的应用,比如纹理映射、法向映射(normal mapping)、重网格(re-meshing)、建模与仿真所谓参数化,是指一个函数,把3D表面以一一对应的方式映射到2D域5.2 三角网格的参数化Triangulated surface(三角网格表面),由顶点、位置和三角表面定义——可以使用分段线性函数参数化——这个分段与三角形表面对应也

2022-03-29 22:01:10 691

原创 【笔记】《WebGL编程指南》学习(6)

WebGL编程指南学习(6)6. 光照光照使场景变得逼真~6.1 从物理出发计算机图形学中着色(shading)的真正含义就是,根据光照条件重建“物体各表面明暗不一的效果”的过程两个物理上的事情需要考虑:发出光线的光源的类型物体表面如何反射光线光源平行光(directional light),或者叫方向光,类似太阳光;点光源(point light),类似灯泡环境光(ambient light),其他非直射的光其他特殊的光源,如聚光灯(spot light)反射类型物体反

2022-03-22 17:27:01 681

原创 【笔记】《WebGL编程指南》学习(5)

WebGL编程指南学习(5)这篇笔记是真正意义上的干货,字面意义上的”干“,干巴巴,哈哈哈!5. GLSL ES(OpenGL ES 着色器语言)WebGL并不支持GLSL ES 1.00的所有特性;实际上,它支持的是1.00版本的一个子集GLSL ES是在OpenGL 着色器语言(GLSL)的基础上,删除和简化一部分功能后形成的5.1 你好,着色器!基础GLSL是大小写敏感的每个语句以分号结束(非常像C)执行次序着色器语言从main()函数开始执行函数需要明确指定返

2022-03-21 21:01:57 543

原创 【笔记】Polygon mesh processing读书笔记(4)

多边形网格处理(4)4. Smoothing(平滑)网格平滑(mesh smoothing)从抽象的层面看,网格平滑是指设计和计算一个三角形的光滑函数f:S→Rd\bold{f}:\mathcal{S}\rightarrow \mathbb{R}^df:S→RdMesh smoothing 是几何处理的基础工具光滑函数可以使用,例如顶点位置、纹理坐标、或顶点偏移量来描述可用于网格参数化、各向异性remeshing、空洞填补、变形等任务网格平滑的两块内容:去噪和光顺去噪的意思是从光滑

2022-03-21 12:45:51 767

Time of flight and depth imaging

Tof相机及深度应用,2014年最新出版,GCPR会议集

2015-03-30

软件成本估算报告实例

软件成本估算报告,管理方面的,采用的FP的方法进行项目估算。

2010-01-01

空空如也

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

TA关注的人

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