设计模式是在面向对象的软件设计的工程中,针对某一特定的问题的一种解决方案。采用设计模式可以提高代码的可读性、可维护性和可扩展性,同时降低系统的复杂度。
blender转换pmx模型到glb材质问题记录
记录一下使用blender以及插件mmd_tools转换pmx模型为gltf,并用threejs的GLTFLoader加载时遇到的一些问题。
计算几何-凸包(二)
1.极性(Extremity)的概念
/2024-01-08-计算几何-凸包(二)/images/pasted-0.png)
在如图所示的一个凸包内,存在两种点,对构成凸包有实质作用的点(蓝色)和没有实质作用的点(绿色)。而对构成凸包有实质作用的点则被称为极点(Extreme Points)。
极点存在一个特性:存在一条穿过极点的直线,使得凸包内所有点都在这条线的同一侧。
2.判断极点的方法
1.In-Triangle Test
/2024-01-08-计算几何-凸包(二)/images/pasted-1.png)
取一个点,枚举其余点集可产生的所有三角形,判断该点是否包含于某个三角形内,如果不存在,则该点为极点。伪代码如下
1 | for (const Point of AllPoints) { |
该方法复杂度为,其中计算AllTriangles时间复杂度为,效率极差。
1.1 To-Left Test
/2024-01-08-计算几何-凸包(二)/images/pasted-2.png)
实现Triangle.contains(Point)可用To-Left Test方法。此方法将三角形三个点按照逆时针首尾相连的到三条直线,然后判断对于这三条直线来说,是否Point全在直线左侧。
判断点是否在线段左侧可通过判断这三个点逆时针所形成的三角的有向面积是否大于0,公式如下
计算几何-凸包(一)
1.定义
凸包(Convex Hull):凸包指的是包含一组点集合中所有点的最小凸多边形或凸多面体。简而言之,凸包是一个尽可能紧密包围给定点集的凸形状。橡皮筋绷紧后形成的一个凸多边形就是一个凸包。/2024-01-05-计算几何-凸包(一)/images/pasted-0.png)
凸集(Convex Set): 凸集是一个具有特定性质的点集合,即对于该集合内的任意两点,连接这两点的线段上的所有点也都在该集合内。凸包是一个给定点的最小凸集。
凸组合(Convex Combination): 凸组合是指在向量空间中取一组向量,并用非负的标量权重对这些向量线性组合,使得权重之和等于 1。一个点集的凸包是由该点集生成的所有可能凸组合组成的集合。例如在两个点AB组成的线段作为凸包的场景中,凸组合可为AB间的任意一点。而所有的凸组合的点构成了 AB 这个凸包线段。又比如在ABC形成的三角中,凸组合可为三角内部的任意一点,而这些点集组合成了 ABC 这个凸包。
页面卸载时向后端发送接口
工作中遇到一个需求,需要在用户关闭或者刷新页面时向后端发送该用户的身份信息。
浏览器页面卸载时会触发beforeunload和unload事件,由于unload限制比较多,因此这里选择了beforeunload。
问题:常用的异步ajax请求在unload/beforeunload事件内是不可靠的,浏览器可能会无视异步请求从而导致后端收不到。可以使用下述方法。
强引用,弱引用
此概念与JS垃圾回收机制紧密相关:JS垃圾回收机制文档传送门

