曲线与曲面的绘制
一、学习目标
(1)掌握常用规则参数曲线与曲面的编程绘制方法。
(2)掌握自由曲线与曲面的编程绘制方法。
(3)了解自由曲面的拼接编程方法。
二、学习内容
(1)编程绘一个规则参数曲线(如抛物线、星开线、心脏线)和规则参数曲面(如球、园柱、圆台、圆环线等)。
(2)编程绘制一个n次Bezier曲线和一个网格状三次Bezier曲面正轴测投影图。
三、实现代码
(1)parametric_curves_surfaces.py,核心算法文件
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 参数曲线绘制函数
def plot_parametric_curves():# 创建图形fig, axs = plt.subplots(2, 2, figsize=(12, 10))# 抛物线t = np.linspace(-2, 2, 100)x_parabola = ty_parabola = t**2axs[0, 0].plot(x_parabola, y_parabola)axs[0, 0].set_title('抛物线')# 星形线t = np.linspace(0, 2*np.pi, 100)x_astroid = np.cos(t)**3y_astroid = np.sin(t)**3axs[0, 1].plot(x_astroid, y_astroid)axs[0, 1].set_title('星形线')# 心脏线t = np.linspace(0, 2*np.pi, 100)x_cardioid = 2*np.cos(t) - np.cos(2*t)y_cardioid = 2*np.sin(t) - np.sin(2*t)axs[1, 0].plot(x_cardioid, y_cardioid)axs[1, 0].set_title('心脏线')plt.tight_layout()plt.show()# 参数曲面绘制函数
def plot_parametric_surfaces():fig = plt.figure(figsize=(15, 10))# 球面ax1 = fig.add_subplot(221, projection='3d')u = np.linspace(0, 2 * np.pi, 100)v = np.linspace(0, np.pi, 100)x_sphere = np.outer(np.cos(u), np.sin(v))y_sphere = np.outer(np.sin(u), np.sin(v))z_sphere = np.outer(np.ones(np.size(u)), np.cos(v))ax1.plot_surface(x_sphere, y_sphere, z_sphere)ax1.set_title('球面')# 圆柱面ax2 = fig.add_subplot(222, projection='3d')theta = np.linspace(0, 2*np.pi, 100)z = np.linspace(0, 1, 100)theta_grid, z_grid = np.meshgrid(theta, z)x_cylinder = np.cos(theta_grid)y_cylinder = np.sin(theta_grid)z_cylinder = z_gridax2.plot_surface(x_cylinder, y_cylinder, z_cylinder)ax2.set_title('圆柱面')# 圆台面ax3 = fig.add_subplot(223, projection='3d')r1, r2 = 1, 0.5theta = np.linspace(0, 2*np.pi, 100)z = np.linspace(0, 1, 100)theta_grid, z_grid = np.meshgrid(theta, z)r = r1 + (r2 - r1) * z_gridx_cone = r * np.cos(theta_grid)y_cone = r * np.sin(theta_grid)z_cone = z_gridax3.plot_surface(x_cone, y_cone, z_cone)ax3.set_title('圆台面')# 圆环面ax4 = fig.add_subplot(224, projection='3d')R, r = 2, 1u = np.linspace(0, 2*np.pi, 100)v = np.linspace(0, 2*np.pi, 100)u_grid, v_grid = np.meshgrid(u, v)x_torus = (R + r*np.cos(v_grid)) * np.cos(u_grid)y_torus = (R + r*np.cos(v_grid)) * np.sin(u_grid)z_torus = r * np.sin(v_grid)ax4.plot_surface(x_torus, y_torus, z_torus)ax4.set_title('圆环面')plt.tight_layout()plt.show()# Bezier曲线和曲面
def bezier_curve(points, t):n = len(points) - 1result = np.zeros(2)for i in range(n + 1):result += points[i] * comb(n, i) * (1 - t)**(n - i) * t**ireturn resultdef comb(n, k):return np.math.factorial(n) / (np.math.factorial(k) * np.math.factorial(n - k))def plot_bezier_curve():# 控制点points = np.array([[0, 0],[1, 2],[2, -1],[3, 1],[4, 0]])# 生成曲线点t = np.linspace(0, 1, 100)curve_points = np.array([bezier_curve(points, ti) for ti in t])# 绘制plt.figure(figsize=(8, 6))plt.plot(points[:, 0], points[:, 1], 'ro-', label='控制点')plt.plot(curve_points[:, 0], curve_points[:, 1], 'b-', label='Bezier曲线')plt.legend()plt.title('5次Bezier曲线')plt.grid(True)plt.show()def bezier_surface(points, u, v):n, m = points.shape[0] - 1, points.shape[1] - 1result = np.zeros(3)for i in range(n + 1):for j in range(m + 1):result += points[i, j] * comb(n, i) * comb(m, j) * (1 - u)**(n - i) * u**i * (1 - v)**(m - j) * v**jreturn resultdef plot_bezier_surface():# 控制点网格points = np.array([[[0, 0, 0], [1, 0, 1], [2, 0, 0]],[[0, 1, 1], [1, 1, 2], [2, 1, 1]],[[0, 2, 0], [1, 2, 1], [2, 2, 0]]])# 生成曲面点u = np.linspace(0, 1, 20)v = np.linspace(0, 1, 20)u_grid, v_grid = np.meshgrid(u, v)surface_points = np.zeros((len(u), len(v), 3))for i in range(len(u)):for j in range(len(v)):surface_points[i, j] = bezier_surface(points, u[i], v[j])# 绘制fig = plt.figure(figsize=(10, 8))ax = fig.add_subplot(111, projection='3d')# 绘制控制点网格for i in range(points.shape[0]):for j in range(points.shape[1]):ax.scatter(points[i, j, 0], points[i, j, 1], points[i, j, 2], color='red')# 绘制曲面ax.plot_surface(surface_points[:, :, 0], surface_points[:, :, 1], surface_points[:, :, 2], alpha=0.5)ax.set_title('3x3控制点网格的Bezier曲面')plt.show()if __name__ == "__main__":# 绘制参数曲线plot_parametric_curves()# 绘制参数曲面plot_parametric_surfaces()# 绘制Bezier曲线plot_bezier_curve()# 绘制Bezier曲面plot_bezier_surface()
(2)app.py,使用Flask框架,提供参数曲线和曲面的Web可视化。
from flask import Flask, render_template, jsonify
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import io
import base64app = Flask(__name__)def get_parametric_curves():# 创建图形fig, axs = plt.subplots(2, 2, figsize=(12, 10))# 抛物线t = np.linspace(-2, 2, 100)x_parabola = ty_parabola = t**2axs[0, 0].plot(x_parabola, y_parabola, 'b-', linewidth=2)axs[0, 0].set_title('抛物线', fontsize=12)axs[0, 0].grid(True)# 星形线t = np.linspace(0, 2*np.pi, 100)x_astroid = np.cos(t)**3y_astroid = np.sin(t)**3axs[0, 1].plot(x_astroid, y_astroid, 'r-', linewidth=2)axs[0, 1].set_title('星形线', fontsize=12)axs[0, 1].grid(True)# 心脏线t = np.linspace(0, 2*np.pi, 100)x_cardioid = 2*np.cos(t) - np.cos(2*t)y_cardioid = 2*np.sin(t) - np.sin(2*t)axs[1, 0].plot(x_cardioid, y_cardioid, 'g-', linewidth=2)axs[1, 0].set_title('心脏线', fontsize=12)axs[1, 0].grid(True)plt.tight_layout()return fig_to_base64(fig)def get_parametric_surfaces():fig = plt.figure(figsize=(15, 10))# 球面ax1 = fig.add_subplot(221, projection='3d')u = np.linspace(0, 2 * np.pi, 100)v = np.linspace(0, np.pi, 100)x_sphere = np.outer(np.cos(u), np.sin(v))y_sphere = np.outer(np.sin(u), np.sin(v))z_sphere = np.outer(np.ones(np.size(u)), np.cos(v))ax1.plot_surface(x_sphere, y_sphere, z_sphere, cmap='viridis')ax1.set_title('球面', fontsize=12)# 圆柱面ax2 = fig.add_subplot(222, projection='3d')theta = np.linspace(0, 2*np.pi, 100)z = np.linspace(0, 1, 100)theta_grid, z_grid = np.meshgrid(theta, z)x_cylinder = np.cos(theta_grid)y_cylinder = np.sin(theta_grid)z_cylinder = z_gridax2.plot_surface(x_cylinder, y_cylinder, z_cylinder, cmap='plasma')ax2.set_title('圆柱面', fontsize=12)# 圆台面ax3 = fig.add_subplot(223, projection='3d')r1, r2 = 1, 0.5theta = np.linspace(0, 2*np.pi, 100)z = np.linspace(0, 1, 100)theta_grid, z_grid = np.meshgrid(theta, z)r = r1 + (r2 - r1) * z_gridx_cone = r * np.cos(theta_grid)y_cone = r * np.sin(theta_grid)z_cone = z_gridax3.plot_surface(x_cone, y_cone, z_cone, cmap='inferno')ax3.set_title('圆台面', fontsize=12)# 圆环面ax4 = fig.add_subplot(224, projection='3d')R, r = 2, 1u = np.linspace(0, 2*np.pi, 100)v = np.linspace(0, 2*np.pi, 100)u_grid, v_grid = np.meshgrid(u, v)x_torus = (R + r*np.cos(v_grid)) * np.cos(u_grid)y_torus = (R + r*np.cos(v_grid)) * np.sin(u_grid)z_torus = r * np.sin(v_grid)ax4.plot_surface(x_torus, y_torus, z_torus, cmap='magma')ax4.set_title('圆环面', fontsize=12)plt.tight_layout()return fig_to_base64(fig)def get_bezier_curve():points = np.array([[0, 0],[1, 2],[2, -1],[3, 1],[4, 0]])t = np.linspace(0, 1, 100)curve_points = np.array([bezier_curve(points, ti) for ti in t])plt.figure(figsize=(8, 6))plt.plot(points[:, 0], points[:, 1], 'ro-', label='控制点')plt.plot(curve_points[:, 0], curve_points[:, 1], 'b-', label='Bezier曲线')plt.legend()plt.title('5次Bezier曲线', fontsize=12)plt.grid(True)return fig_to_base64(plt.gcf())def get_bezier_surface():points = np.array([[[0, 0, 0], [1, 0, 1], [2, 0, 0]],[[0, 1, 1], [1, 1, 2], [2, 1, 1]],[[0, 2, 0], [1, 2, 1], [2, 2, 0]]])u = np.linspace(0, 1, 20)v = np.linspace(0, 1, 20)u_grid, v_grid = np.meshgrid(u, v)surface_points = np.zeros((len(u), len(v), 3))for i in range(len(u)):for j in range(len(v)):surface_points[i, j] = bezier_surface(points, u[i], v[j])fig = plt.figure(figsize=(10, 8))ax = fig.add_subplot(111, projection='3d')for i in range(points.shape[0]):for j in range(points.shape[1]):ax.scatter(points[i, j, 0], points[i, j, 1], points[i, j, 2], color='red')ax.plot_surface(surface_points[:, :, 0], surface_points[:, :, 1], surface_points[:, :, 2], alpha=0.5, cmap='viridis')ax.set_title('3x3控制点网格的Bezier曲面', fontsize=12)return fig_to_base64(fig)def bezier_curve(points, t):n = len(points) - 1result = np.zeros(2)for i in range(n + 1):result += points[i] * comb(n, i) * (1 - t)**(n - i) * t**ireturn resultdef bezier_surface(points, u, v):n, m = points.shape[0] - 1, points.shape[1] - 1result = np.zeros(3)for i in range(n + 1):for j in range(m + 1):result += points[i, j] * comb(n, i) * comb(m, j) * (1 - u)**(n - i) * u**i * (1 - v)**(m - j) * v**jreturn resultdef comb(n, k):return np.math.factorial(n) / (np.math.factorial(k) * np.math.factorial(n - k))def fig_to_base64(fig):canvas = FigureCanvasAgg(fig)buf = io.BytesIO()canvas.print_png(buf)data = base64.b64encode(buf.getvalue()).decode('utf-8')plt.close(fig)return data@app.route('/')
def index():return render_template('index.html')@app.route('/get_curves')
def get_curves():return jsonify({'parametric_curves': get_parametric_curves(),'parametric_surfaces': get_parametric_surfaces(),'bezier_curve': get_bezier_curve(),'bezier_surface': get_bezier_surface()})if __name__ == '__main__':app.run(debug=True)
(3)HTML页面,可视化展示。
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>参数曲线与曲面可视化</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"><style>body {background-color: #f8f9fa;padding-top: 20px;}.container {max-width: 1200px;}.card {margin-bottom: 20px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);border: none;}.card-header {background-color: #007bff;color: white;font-weight: bold;}.loading {text-align: center;padding: 20px;}.plot-container {text-align: center;padding: 10px;}.plot-container img {max-width: 100%;height: auto;border-radius: 5px;}h1 {color: #007bff;margin-bottom: 30px;text-align: center;}</style>
</head>
<body><div class="container"><h1>参数曲线与曲面可视化</h1><div class="row"><div class="col-md-6"><div class="card"><div class="card-header">参数曲线</div><div class="card-body"><div class="plot-container" id="parametric-curves"><div class="loading"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div></div></div></div></div></div><div class="col-md-6"><div class="card"><div class="card-header">参数曲面</div><div class="card-body"><div class="plot-container" id="parametric-surfaces"><div class="loading"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div></div></div></div></div></div></div><div class="row"><div class="col-md-6"><div class="card"><div class="card-header">Bezier曲线</div><div class="card-body"><div class="plot-container" id="bezier-curve"><div class="loading"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div></div></div></div></div></div><div class="col-md-6"><div class="card"><div class="card-header">Bezier曲面</div><div class="card-body"><div class="plot-container" id="bezier-surface"><div class="loading"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div></div></div></div></div></div></div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script><script>// 加载所有图形fetch('/get_curves').then(response => response.json()).then(data => {// 更新参数曲线document.getElementById('parametric-curves').innerHTML = `<img src="data:image/png;base64,${data.parametric_curves}" alt="参数曲线">`;// 更新参数曲面document.getElementById('parametric-surfaces').innerHTML = `<img src="data:image/png;base64,${data.parametric_surfaces}" alt="参数曲面">`;// 更新Bezier曲线document.getElementById('bezier-curve').innerHTML = `<img src="data:image/png;base64,${data.bezier_curve}" alt="Bezier曲线">`;// 更新Bezier曲面document.getElementById('bezier-surface').innerHTML = `<img src="data:image/png;base64,${data.bezier_surface}" alt="Bezier曲面">`;}).catch(error => {console.error('Error:', error);document.querySelectorAll('.loading').forEach(el => {el.innerHTML = '<div class="alert alert-danger">加载失败,请刷新页面重试</div>';});});</script>
</body>
</html>
四、运行结果
五、项目简介
# 参数曲线与曲面可视化项目
## 项目概述
本项目使用Python Flask框架和Matplotlib库,实现了多种参数曲线和曲面的可视化展示,包括Bezier曲线/曲面的算法实现。
## 功能模块
### 1. 参数曲线可视化
- 抛物线
- 星形线
- 心脏线
### 2. 参数曲面可视化
- 球面
- 圆柱面
- 圆台面
- 圆环面
### 3. Bezier曲线/曲面
- 5次Bezier曲线
- 3x3控制点网格的Bezier曲面
## 技术特点
- 使用Flask提供Web服务接口
- Matplotlib生成高质量图形
- 参数方程精确计算曲线/曲面
- 响应式前端展示
## 运行方式
```bash
pip install -r requirements.txt
python app.py
```
访问 http://localhost:5000 查看可视化效果
相关文章:
曲线与曲面的绘制
一、学习目标 (1)掌握常用规则参数曲线与曲面的编程绘制方法。 (2)掌握自由曲线与曲面的编程绘制方法。 (3)了解自由曲面的拼接编程方法。 二、学习内容 (1)编程绘一个规则参数…...
Python Cookbook-6.2 定义常量
任务 你需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定。 解决方案 你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py,并放入你的Python的sys.path 指定的目录中: class _const(object):class ConstEr…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(信息化系统综合管理平台)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划范围管理2、收集需求3、定义范围4、创建WBS5、确认范围6、控制范围论文 2017年6月,我作为项目经理参与了 XX市经济和信息化委员会系统综合管理平台建设项目,该项目投资共150万元人民币,建设工期…...
用Webpack 基础配置快速搭建项目开发环境
Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具,但是Webpack有大量的配置项,对新手不太友好,但是我们可以根据webpack-cli的init命令根据项目需求快速生成webpack的配置文件,本文将手把手教你如何用 Webpack 和 npm 快…...
【LLM Agent】SystemMessage 和 HumanMessage
文章目录 SystemMessage 和 HumanMessageSystemMessage(系统消息)HumanMessage(用户消息)结合使用高级设置能否将用户消息(HumanMessage)写在系统消息(SystemMessage) SystemMessage…...
机器学习核心知识:从基础概念到关键算法
摘要 本文深度剖析机器学习知识体系,从基本概念、学习方式,到分类算法、逻辑回归等关键内容均有涉及。详细阐述各知识点原理与应用场景,并对比多种算法的优劣。 关键词:机器学习;监督学习;分类算法&#x…...
信奥赛之c++基础(for与if的嵌套使用)
🍭 糖果工厂大闯关——for与if的嵌套魔法 🚚 第一章:快递站的故事(情景引入) 📦 快递分拣员小明 快递站每天要处理100个包裹,小明发现: 有些包裹要立即派送(红色标签)有些包裹可以暂存仓库(蓝色标签)for (int 包裹号=1; 包裹号<=100; 包裹号++) {if (包裹颜…...
凡泰极客亮相QCon2025鸿蒙专场,解析FinClip“技术+生态”双引擎
2025年4月10日,备受瞩目的QCon开发者技术峰会盛大举行,本次活动开设鸿蒙专场以“HarmonyOS NEXT 创新特性与行业实践”为主题,汇聚了众多鸿蒙生态的领军人物与技术专家,共同探讨鸿蒙操作系统的技术创新与行业应用。 凡泰极客CTO徐…...
day25 学习笔记
文章目录 前言一、图像翻转二、图像的仿射变换1.仿射变换的原理2.仿射变换函数3.图像旋转4.图像平移5.图像缩放6.图像剪切 三、插值方法1.最近领插值2.双线性插值法3.双三次插值4.代码展示 前言 通过今天的学习,我掌握了OpenCV中有关图像翻转,图像仿射变…...
Docker构建go-web应用
https://www.liwenzhou.com/posts/Go/deploy-in-docker/#c-0-4-0 本文介绍了如何使用Docker以及Docker Compose部署我们的 Go Web 程序。 Docker部署示例 准备代码 这里我先用一段使用net/http库编写的简单代码为例讲解如何使用Docker进行部署,后面再讲解稍微复杂…...
人工智能100问☞第4问:人工智能与机器学习、深度学习的区别?
目录 一、通俗解释 二、专业解析 三、权威参考 人工智能(AI)是目标:让机器具备智能(如建造一辆车);机器学习(ML)是引擎:提供动力方法(如燃油发动机);深度学习(DL)是涡轮增压:提升引擎性能(如处理复杂路况)。三者协同驱动技术发展,如同车辆需要…...
电子电器架构 --- 智能座舱的定义
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...
JavaScript Map 对象深度解剖
JavaScript Map 对象深度解剖 一、Map 核心特性 1.1 什么是 Map? 通俗解释: Map 就像是一个“超级版对象”,它用更灵活的方式存储键值对。举个生活例子: 普通对象(Object)像一本传统电话簿,…...
zlm启用webrtc交叉编译指南
zlm启用webrtc交叉编译指南 一、交叉编译openssl 下载openssl-1.1.1k版本,其他版本可能会有问题 $ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz $ tar -xvzf openssl-1.1.1k.tar.gz $ cd openssl-1.1.1k $ ./config no-asm shared --openssld…...
树莓派超全系列教程文档--(23)内核参数
内核参数 内核命令行 (cmdline.txt)命令行选项标准条目设置KMS显示模式 其他条目 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 内核命令行 (cmdline.txt) Linux 内核在启动过程中接受一系列命令行参数。在 Raspberry Pi 上,该命令…...
机器学习 从入门到精通 day_05
1. 线性回归 前面介绍了很多分类算法,分类的目标变量是标称型数据,回归是对连续型的数据做出预测。 标称型数据(Nominal Data)是统计学和数据分析中的一种数据类型,它用于分类或标记不同的类别或组别,数据点之间并没有…...
读者、写者问题优化
#include <stdio.h> #include <time.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #define NUM_READERS 5 #define NUM_WRITERS 5 // 定义信号量和全局变量 sem_t sdata, srcount; int rea…...
DeepSeek-V3与DeepSeek-R1架构原理及应用对比分析
DeepSeek-V3与DeepSeek-R1架构原理及应用对比分析 DeepSeek作为中国人工智能领域的重要参与者,推出了V3和R1两款大模型,它们在架构设计和应用场景上各有侧重。本文将深入分析这两款模型在架构原理上的核心差异,并探讨它们如何分别应对复杂推…...
OpenCV图像增强实战教程:从理论到代码实现
OpenCV图像增强实战教程:从理论到代码实现 🔥🚀 📚 想要掌握图像增强的核心技术?本文手把手教你使用OpenCV实现多种图像增强技术,从基础的线性变换到高级的频域滤波,全方位提升你的图像处理能力…...
一文介绍关于多模态的基础知识 !!
文章目录 前言 一、机器学习 二、深度学习 三、应用领域 前言 多模态不再局限于单一类型的数据处理,它融合图像、文本和音频等多种信息源。其基础知识涵盖机器学习、深度学习及其在多模态领域的应用。机器学习部分包含分类、回归、聚类和降维等四类算法;…...
mysql DQL
一.基本查询 1.查询多个字段 2.查看所有字段 3.设置别名 4.去除重复记录 二.条件查询 1.大于小于等于 2.查询 身份证为空的 没有所以没有记录 3.在15到20这个区间范围内 4.or/in 或者 4.like 匹配 (_匹配单个字符 %匹配多个字符) 查询员工信…...
Android Studio 项目文件夹结构详解
文章目录 一、项目视图概览1. Android 视图(简化视图)2. Project 视图(完整物理结构) 二、核心目录详解1. 项目根目录文件2. app 模块目录(主模块)2.1 manifests/2.2 java/2.3 res/ - 资源目录2.4 assets/2…...
Linux系统常见磁盘扩容操作(Common Disk Expansion Operations in Linux Systems)
Linux系统常见磁盘扩容操作 目录说明 一、准备工作:获取目标磁盘信息 (1)确认分区表格式和文件系统 二、扩容已有MBR分区 (1)分区后扩容 ext为例 xfs为例 三、扩容已有GPT分区 (1)分区…...
【UE5 C++】“ProceduralMeshComponent”的使用记录
效果 如下所示,通过“ProceduralMeshComponent”创建了一个自定义形状的Mesh,并且该Mesh包含碰撞信息,然后2s后更新Mesh形状。 步骤 1. 在“xxx.Build.cs”中引入“ProceduralMeshComponent”模块 2. 新建一个Actor类,这里命名为…...
源代码加密之零日攻击
# SDC沙盒:有效防御零日攻击的多层防护体系 在当今复杂多变的网络安全环境中,零日攻击已成为企业面临的重大威胁之一。零日攻击利用尚未被公众发现或尚未被软件供应商修复的漏洞进行攻击,具有极高的隐蔽性和破坏性。SDC沙盒作为一种先进的数…...
Vue2 集成VTK.js 并显示3D影像
Vue2 集成VTK.js 并显示3D影像(核心代码) 作者:coder_fang vtk.js目前官网只有vue3的示例,对于已有vue2系统的集成,需要使用指定版本的vtk,itk等库并修改部分配置即可。 需要的主要库和版本: vue:2.3.4; vtk-v32.9.0.min.js,itk-wasm.min.…...
本地git操作
一、初始化与基础操作 1. 初始化仓库 git init # 当前目录新建仓库 git init <目录名> # 指定目录初始化 2. 查看状态 git status # 显示工作区和暂存区状态 git status -s # 简洁版状…...
AI的出现,是否能替代IT从业者?
*AI在IT领域中的应用已成趋势,IT 从业者们站在这风暴之眼,面临着一个尖锐问题:AI 是否会成为 “职业终结者”?有人担忧 AI 将取代 IT 行业的大部分工作,也有人坚信 IT 从业者的专业技能与创新思维无可替代。那么&#…...
3、组件:魔法傀儡的诞生——React 19 组件化开发全解析
一、开篇:魔法傀儡的觉醒 "每个React组件都像一具魔法傀儡,"邓布利多校长挥动魔杖,空中浮现出闪烁的代码字符,"它们能自主思考、协同工作,甚至能跨越时空(服务器与客户端)执行任…...
Vue 解决 Error: please transfer a valid prop path to form item!
在 Vue.js 中使用表单验证库(如 VeeValidate 或 Element UI 的表单组件时),遇到错误信息 "please transfer a valid prop path to form item!" 通常指的是在表单项的属性绑定中,路径(prop path)不…...
day29 第八章 贪心算法 part03
134. 加油站 “可以换一个思路,首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。 每个加油站的剩余量rest[i]为gas[i] - cost[i]。 i从0开始累加rest[i],和记为curSum…...
贪心算法(19)(java)重构字符串
题目:给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。 返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。 示例 1: 输入: s "aab" 输出: "aba"示例 2: 输入:…...
Linux下C语言与OpenGL游戏开发指南
1. 为什么选择 Linux C OpenGL? 跨平台兼容性:OpenGL 是跨平台的图形 API,编写的代码稍作修改即可在 Windows/macOS 上运行。 性能控制:C 语言提供底层内存管理和硬件访问能力,适合高性能游戏开发。 开源生态&…...
深入 Java 正则表达式源码:透视 Matcher.group(int) 的分组提取机制
在 Java 中,正则表达式无疑是文本处理的重要工具。而 Matcher.group(int group) 是其中非常关键的一个方法,它用于提取正则中的分组内容。今天我们不仅通过一个例子来看它的使用方法,还会结合底层源码,深入理解它背后的机制。 实…...
解决 Spring Boot 启动报错:数据源配置引发的启动失败
启动项目时,控制台输出了如下错误信息: Error starting ApplicationContext. To display the condition evaluation report re-run your application with debug enabled. 2025-04-14 21:13:33.005 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporte…...
【深度学习的骨架与脉搏】语义分割的卷积神经网络·U-Net
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 …...
ELK+Filebeat 深度部署指南与实战测试全解析
一、介绍 ELK: ELasticsearch ,Logstash,Kibana三大开源框架首字母简写,市面上也被称为Elastic Stack。 Elasticsearch 是一个基于 Lucene 的分布式搜索平台框架,通过 Restful 方式进行交互,具备近实时搜索能力。像百度、Google 这类大数据全…...
Java设计模式之中介者模式:从入门到架构级实践
一、什么是中介者模式? 中介者模式(Mediator Pattern)是一种行为型设计模式,其核心思想是通过引入一个中介对象来封装多个对象之间的交互关系。这种模式将原本复杂的网状通信结构转换为星型结构,类似于现实生活中的机…...
L2TP通道基础实验
目录 实验拓扑: 一、需求配置LAC设置: 界面设置: 编辑LNS设置: 建立静态路由:编辑 策略配置: 二、测试 通讯测试: 实验拓扑: 一、需求配置 LAC设置: [LAC]l2…...
关于字节跳动旗下的豆包(DouBao)软件的详解、核心功能以及与同类产品的对比分析
以下是关于豆包(DouBao)软件的详解、核心功能以及与同类产品的对比分析: 一、豆包(DouBao)详解 豆包是字节跳动推出的一款多功能人工智能助手,主打“智能助手场景化工具”结合,覆盖日常生活、…...
如何在本地修改 Git 项目的远程仓库地址
✅ 场景说明 你当前的 Git 项目地址是: http://192.168.0.16/xxx.git你希望把它改成: http://192.168.0.22:8099/xxx.git🧩 操作步骤 步骤 ①:进入项目所在目录 你已经在正确路径下了: cd C:\Develop\xxx确认这个…...
Gitea 1.23.7 速配
复用容器内的postgresql CREATE USER gitea WITH PASSWORD gitea; CREATE DATABASE gitea; GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; docker-compose.yml 内容 gitea:image: gitea/gitea:latestcontainer_name: giteaenvironment:- GITEA__server__HTTP_ADDR0.0.0.…...
JavaScript — 函数定义
介绍 JavaScript函数是执行特定任务的代码块,可通过多种方式定义。传统函数声明使用function关键字,后接函数名和参数列表,这种声明会被提升至作用域顶部。函数表达式则将匿名或具名函数赋值给变量,遵循变量作用域规则࿰…...
Allure安装与使用【macOS】
安装: brew install allure 安装插件: pip install allure-pytest2.8.16 生成一个html格式的报告,步骤: 执行生成json,制定结果保存目录 pytest --alluredirreport test_demo.py 查看测试保报告方式 将json转成h…...
FireCrawl爬虫工具, Craw4ai
FireCrawl是一款开源的AI爬虫工具,专门用于Web数据提取,并将其转换为Markdown格式或其他结构化数据。FireCrawl特别适合处理使用JavaScript动态生成的网站,能够自动抓取网站及其所有可访问的子页面内容,并将其转换为适合大语言…...
【Python爬虫】详细入门指南
目录 一、简单介绍 二、详细工作流程以及组成部分 三、 简单案例实现 一、简单介绍 在当今数字化信息飞速发展的时代,数据的获取与分析变得愈发重要,而网络爬虫技术作为一种能够从互联网海量信息中自动抓取所需数据的有效手段,正逐渐走入…...
Cesium.Cesium3DTileset设置贴地,tileset.readyPromise.then报错
tileset.readyPromise.then(function(tileset) { }); 用的readyPromise函数,却报错了,通过参考别人的博客内容发现最终修改的是 modelMatrix这个参数的内容,所以直接舍弃使用readyPromise函数,在代码中等 viewer.scene.primitiv…...
卫星电话扬帆智慧海洋,构筑蓝海通信新生态
海洋,承载着全球90%的贸易运输量,更是我国“向海图强”战略的核心战场。但是,全球95%的海洋区域仍处于蜂窝网络覆盖的“真空地带”,近海信号不稳、远洋通信中断的难题长期制约着海洋经济的纵深发展。技术革新是推动发展的强大引擎…...
大模型不是在推理,只是在复述??
目的 看见一篇论文Recitation over Reasoning: How Cutting-Edge Language Models Can Fail on Elementary School-Level Reasoning Problems?,论文中建立了一个推理题库,通过将推理问题进行改写(通过只改写几个字,颠覆整个问题…...
安全编码课程 实验7 并发
实验项目:C 多线程中的数据竞争与同步机制 实验要求: 1. 编写基础代码:模拟账户余额取款 创建一个全局共享变量 int balance 100,表示初始余额; 创建两个线程 Thread A 和 Thread B,尝试各自取出 100 元&a…...