自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

言午日月

数学与算法的代码实现

  • 博客(124)
  • 收藏
  • 关注

原创 L2Norm 的实现

L2 范数归一化(L2 Normalization)是将每个样本(向量)除以其 L2 范数,以使得每个样本的 L2 范数为 1, 这样做可以使得样本在欧几里得空间中位于单元圆上。L2范数(L2 norm),也称为欧几里德范数(Euclidean norm)或2-范数,是向量元素的平方和的平方根。而 L2 范数归一化就是将向量。

2024-03-26 14:04:21 875

原创 线性回归 Pytorch

通常情况下,我们使用均方误差(Mean Squared Error, MSE)作为损失函数,用于衡量模型预测值与真实值之间的差异。线性回归是一种用于建立自变量(输入)和因变量(输出)之间线性关系的方法。在多维线性回归中,我们考虑多个自变量与一个因变量之间的线性关系。,使得损失函数最小化。我们通过梯度下降等优化算法来实现这一目标。具体地,我们反复迭代更新权重和偏置项,直到损失函数收敛到最小值。模型训练的目标是找到最优的权重。

2024-03-08 09:46:22 1003

原创 GoogleTest 单元测试

假设我们有两个函数 complexFunction 和 helperFunction,其中 complexFunction 调用了 helperFunction。我们将编写测试 complexFunction 的单元测试,并在调用 helperFunction 的地方打桩。现在,我们将编写一个单元测试来测试 complexFunction 并在调用 helperFunction 的地方打桩。

2024-02-03 21:18:04 467

原创 工厂方法入门

*缺点:**应用工厂方式模式需要引入许多新的子类,代码可能会因此编的更加复杂。最好的情况是将该模式引入创建者的现有层次结构中。

2024-02-01 21:58:00 250

原创 gmsh 01 对多个面,及体进行剖分

【代码】gmsh 01 对多个面,及体进行剖分。

2024-01-29 22:46:26 246

原创 Gmsh 入门01

使用 gmshAPI 剖分生成网格

2024-01-28 20:15:20 223

原创 Jarvis步进法(Jarvis March)凸包算法

这样可以确保在构建的凸包上,点的极角是递增的,最终形成一个逆时针方向的凸多边形。算法的时间复杂度主要取决于对点的排序操作,通常为O(n log n),其中n是点的数量。从点集中选择一个起始点,然后在每一步中选择下一个顶点,该顶点是当前点集中与当前点形成的线段上,极角最小的点。扫描过程: 从起始点开始,选择当前点(假设为p),然后选择下一个点(假设为q),这个点是当前点p与其他点形成的线段上,极角最小的点。选择起始点的过程可以通过遍历点集,找到y坐标最小的点,并在y坐标相同时,选择x坐标最小的点。

2024-01-10 09:49:35 571

原创 Graham扫描凸包算法

扫描过程: 从第三个点开始,按照排序后的顺序逐个处理每个点。下面,我将提供一个简单的凸包算法实现,基于Graham扫描算法。Graham扫描算法的基本思想是通过选择一个特殊的起点,将点集按照极角排序,然后通过栈的操作来逐步构建凸包。,其中n是点的数量。该算法的优势在于其相对简单的实现和较好的性能。然而,需要注意的是,在特定情况下,例如存在大量共线点的情况下,算法的性能可能会有所下降。通常选择最下面且最左边的点,以确保算法的稳定性。构建凸包: 扫描完成后,栈中的点就是凸包的顶点,它们按照逆时针方向排列。

2024-01-10 09:30:54 445

原创 图片纹理贴图

【代码】图片纹理贴图。

2024-01-09 22:19:03 596

原创 创建一个矩形中有两个三角形

【代码】创建一个矩形中有两个三角形。

2024-01-09 22:13:52 361

原创 OpenGL 绘制一个三角形

在上一篇 OpenGL 顶点着色器和片段着色器的介绍实现中,我们向进一步绘制三角形,事实上只需要修改 一下两处即可。在顶点着色器中定义了三角形的顶点数组。

2024-01-08 20:26:58 369

原创 OpenGL顶点着色器和片段着色器

顶点着色器和片段着色器。

2024-01-08 20:09:22 364

原创 C++/OpenGL应用程序

GLFW 库包含 GLFWwindow 类,我们可以在其上进行 3D 场景绘制。OpenGL 也向我们提供了用于 GLSL 程序载入可编程着色阶段并对其进行编译的命令。最后 OpenGL 使用缓冲将 3D 模型和其他相关图像数据发送到管线中。图像应用程序大部分是 C++ 编写,OpenGL 调用实现与 3D 渲染相关任务将会使用一些扩展库: GLEW、GLM、GLFW、SOLL2 等。

2024-01-07 22:15:25 493

原创 均匀与准均匀 B样条算法

pt∑i0nPiFiktpti0∑​nPi​Fik​t方程中n1n+1n1个控制点,PiP_iPi​i01⋯ni01⋯n要用到n1n+1n1个kkk次 B 样条基函数FikF_{i, k}Fik​i01⋯ni01⋯n, 节点矢量为Tt0t1⋯tnk1Tt0​t1​⋯tnk1​。FiktFik​t。

2024-01-04 16:30:24 1006

原创 B样条曲线

次的 B 样条基函数的。与节点矢量双精度数组。2. 一次 B 样条,3. 二次 B 样条。

2024-01-04 11:23:00 914

原创 有效边表填充算法

按照扫描线从上往下的顺序,依次处理和多边形相交的扫描线,对于当前处理的扫描线找到和它相交的所有边的交点,按照交点横坐标从小到大的顺序,两个两个配对,配对之后填充每对交点之间的像素,所有的扫描线处理完成之后,图形的扫描就结束了。三角形与当前扫描线相交的边称为有效边。在处理一条扫描线时仅对有效边进行求教运算,可以避免与多边形的所有边求交。桶表是一个纵向扫描线链表,链表的长度为多边形所覆盖的最大扫描线数,链表的每个节点称为桶,链接边表。这个图事实上就是 DDA 算法中的。为主轴位移的方向,执行。

2024-01-02 23:17:53 1142

原创 椭圆中点算法

椭圆的扫描转换与圆的扫描转换有相似之处,但也有不同,主要区别是椭圆弧上存在改变主位移方向的临界点。瞬时针绘制四分椭圆弧的中点算法,根据对称性可以绘制完整的椭圆。方向上减 1 或 减 0, 取决于中点误差项的值,在区域。而在下一个中点处,不等号改变方向,则说明椭圆弧从区域。显然,在临界点处,法矢量分量的大小发生了变化。的方向递增一个单位,第一个参与判断的中点是。从曲线上的斜率角度来看,在临界点处,斜率为。内,椭圆弧的起点扫描转换后的像素点为。方向为主位移方向,在临界点处,有。内,主位移方向发生变化,由。

2023-12-29 08:18:22 1016

原创 Bezier 曲线拼接圆

为了描述复杂物体的轮廓曲线,经常需要将多段 Bezier 曲线拼接起来,并在结合处满足一定的连续性条件。假设两段 三次 Bezier 曲线分别为。使用一段三次 Bezier 曲线绘制拼接圆。两段三次 Bezier 曲线 达到。参考 《孔令德 计算几何算法与实现》, 在这一点处有相同的切线方向,,其控制多边形的顶点分别为。

2023-12-26 14:09:40 417

原创 Bezier 曲线

Bezier 曲线 的算法实现

2023-12-26 09:52:45 512

原创 WU反走样算法

由离散量表示连续量而引起的失真称为走样,用于减轻走样现象的技术成为反走样,游戏中称为抗锯齿。走样是连续图形离散为想想点后引起的失真,真实像素面积不为 零。走样是光栅扫描显示器的一种固有现象,只能减轻,不可避免。空间混色原理指出,人眼对某一区域颜色的识别是取这个区域颜色的平均值,Wu 反走样算法原理是对理想直线上的任一点,同时用两个不同亮度等级的相邻像素来表示。Wu 反走样算法是对距离进行加权的反走样算法。

2023-12-26 09:02:44 1123

原创 圆中点算法

中心在原点,半径为 R 的圆的隐式函数方程为Fxyx2y2−R20把像素上的点的坐标代入上述隐式方程。

2023-12-25 11:11:19 1006

原创 OpenGL初识01

GLFW 和 GLAD 库,分别使用。

2023-12-25 09:08:39 702

原创 直线中点算法

中点算法是一种浮点数算法,现在的计算机做浮点数运算和整数运算一样快中点算法设计巧妙,不需要取证操作中点算法同样适用于绘制圆和椭圆参考 《计算几何算法与实现》孔令德。

2023-12-24 19:35:36 834

原创 Bresenham 算法

1965 年,Bresenham 为数字绘图仪开发了一种绘制直线的算法,该算法同样使用于光栅扫描显示器,被称为 Bresenham 算法。

2023-12-24 15:00:28 997

原创 三次 Bezier 曲线 bern 基函数的形式

Bezier 曲线是三次多项式,称为三次 Bezier 曲线,Bezier 曲线的控制多边形有 4 个控制点,参考 《计算几何算法与实现》孔令德。

2023-12-22 14:20:11 866

原创 deCasteljau 递推

参考 《计算几何算法与实现》孔令德。其中,r = 1,2,

2023-12-22 13:43:01 780

原创 双三次 Bezier 曲面

Bezier 曲面是由 Bezier 曲线扩展得到,它是两组正交的 Bezier 曲线控制点构造空间网格生成的曲面puv∑i03∑j03PijBi3uBj3vuv∈01×01puvi0∑3​j0∑3​Pij​Bi3​uBj3​vuv∈01×01​​其中,PijP_{ij}Pij​是 16 个控制点,Bi3uBi3​u和Bj3vBj。

2023-12-21 11:17:08 930

原创 Bezier 曲线 2D

控制多边形的第一个顶点和最后一个顶点位于曲线上,多边形的第一条边和最后一条边表示了曲线在起点和终点的切矢量方向,其顶点则用于定义曲线的导数,阶次和形状。在工程项目中,最常见的是三次Bezier 曲线,其次数是二次Bezier 曲线,高次Bezier 曲线一般很少用。二次 Bezier 曲线,当 n=2 时,Bezier 曲线的控制多边形有 3 个控制点,三次 Bezier 曲线,当 n=3 时,Bezier 曲线控制多边形有 4 个控制点,, Bezier 曲线是二次多项式,称为二次 Bezier 曲线,

2023-12-19 23:10:52 931

原创 OCC gp_Pnt创建点

OCC 创建两个点,旋转,及设置轴镜像。

2023-12-18 16:00:15 356

原创 OCC 创建简单几何

使用 OCC 创建 正方体和圆柱体,并且通过布尔运算,切除正方体内的圆柱体,保存 stl 几何模型。

2023-12-18 14:54:23 476

原创 DDA 算法

在 CAD (计算机辅助设计)中,算法是一种简单而有效的直线绘制算法,但有时由于浮点运算的误差,可能导致绘制的直线不够精确。在实际应用中,为了提高精度,可能需要采用其他更复杂的算法,如。CAD 算法是指在计算机辅助设计软件中使用的算法,用于实现各种设计和绘图功能,CAD 广泛应用于建筑、机械、电子等领域,可以大大提高设计效率和精度。绘图算法是 CAD 软件的基础,它包括点、线、圆、曲线、等基本图形绘制方法。CAD 算法是计算机辅助设计的算法,几何算法是解决几何问题的算法。算法常被用来绘制直线。

2023-12-14 14:46:52 243

原创 QVTK 可视化

【代码】QVTK 可视化。

2023-12-13 13:48:51 300

原创 几何对象的凸点集

【代码】几何对象的凸点集。

2023-12-04 21:35:07 59

原创 VTK 的 Math 两个三维点之间的平方距离和欧几里得距离

【代码】VTK 的 Math 两个三维点之间的平方距离和欧几里得距离。

2023-11-28 10:26:55 59

原创 hello vtk 圆柱

【代码】hello vtk 圆柱。

2023-11-28 10:02:54 66

原创 机器视觉 AI 数据集制作

工业中,机器视觉物体分拣时,需要制作,数据集,那么,一般情况下,可以选择几个物体的几张图片,或者视频,将待识别的物体的掩模扣取出来,随机的贴在 传送带背景中,并批量自动的写成 VOC 数据集。使用图像处理的技术手段,将上述的目标的掩模扣取出来,或者使用 ps 的技术扣取掩模均可。

2023-11-27 13:44:19 152

原创 【CUDA GPU 实现 Sobel 边缘

【代码】【无标题】

2023-11-22 21:36:00 70

原创 设计模式- 开闭原则

开闭原则主要概括为:对扩展开放,对修改关闭。增加功能是通过增加代码实现的,而不是修改源代码。程序员更喜欢添加类来增加功能,而不是修改源代码。修改源代码及其容易犯错,若项目文件过大时,类与类的关联性强,改的地方就会特别多。一个类最好只做一件事情。#include <iostream>using namespace std;// 开闭原则, 对扩展开放,对修改关闭,增加功能是通过增加代码来实现,而不是去修改源代码class AbstractCaculator{pu

2021-10-25 12:55:04 132

原创 网格的图示与标记

1.1 基本数据结构我门采用 Chen Long 有限元工具箱 iFEM 中的数据结构,用 node 表示节点坐标, elem 表示单元的连通性, 即单元顶点的编号,例如,下图 L 形区域的一个简单剖分.1. 数组节点用 node 记录每个节点的坐标,它是两列的矩阵,第一列表格各节点的横坐标 (x),第二列表示各节点的纵坐标 (y), 行的索引对应节点编号,下图给出节点的坐标.数组 elem 连通性 (局部整体对应)数组 elem 给出给个三角形的顶点编号,她给出的是单元的连通信息,每行对应一个

2021-09-15 13:33:54 517

原创 黄金分割法

算法 (0.618 法)#include "optimize.h"Optimize::Optimize(){}Optimize::Optimize(double a, double b, double delt, double eps){ a_left = a; b_right = b; delta = delt; epsilon = eps;}Optimize::~Optimize(){}void Optimize::run()

2021-09-07 14:49:46 315

空空如也

空空如也

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

TA关注的人

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