当前位置: 首页 > news >正文

WPF-3D图形

WPF-3D图形

WPF的3D功能可以在不编写任何c#代码的情况下进行绘制,只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念, 以及常用到的命中测试、2d控件如何在3D对象中进行渲染,除此之外,还演示了如何导入外部3D模型。

关键概念

视口

视口指的是图像要展示在哪里,可以理解为展示图形的舞台。在WPF中视口使用Viewport3D标签表示。

相机

如果把视口比作舞台,那相机就可以理解为观众的眼睛,不同的眼睛位置会看到不同的角度。

<Viewport3D><!--相机--><Viewport3D.Camera><!--透视相机--><PerspectiveCamera Position="8,5,10"LookDirection="-7,-2,-10"FarPlaneDistance="40"NearPlaneDistance="10"FieldOfView="60"> <PerspectiveCamera.Transform><RotateTransform3D CenterX="1.5" CenterY="1" CenterZ="0.5"><RotateTransform3D.Rotation><AxisAngleRotation3D Angle="45" Axis="0,1,0"/></RotateTransform3D.Rotation></RotateTransform3D></PerspectiveCamera.Transform></PerspectiveCamera><!--正交相机,用法类似--><!--<OrthographicCamera/>-->
</Viewport3D.Camera>

光源

没有光源也就看不到3D对象

<!--光线-->
<ModelVisual3D><ModelVisual3D.Content><Model3DGroup><!--散射光线--><AmbientLight Color="#FFF"/><!--平行光--><!--<DirectionalLight Color="#FFF" Direction="0,-1,0"/>--><!--点光源--><!--<PointLight Position="0,0,0"/>--><!--锥形辐射光:手电筒--><!--<SpotLight Position="0,0,0" Direction="0,0,-3"/>--></Model3DGroup></ModelVisual3D.Content>
</ModelVisual3D>

材质

3D几何对象只是将轮廓定义出来,表面是没有定义的,所以需要使用材质来展现出不同的物体表面。也可以理解为3D几何对象只是勾勒出物体的轮廓,而材质则是上颜色。

<ModelUIElement3D ><ModelUIElement3D.Model><GeometryModel3D><!--材质--><GeometryModel3D.Material><!--散射材质--><DiffuseMaterial Brush="Blue"/><!--镜面材质--><!--<SpecularMaterial SpecularPower="1" Brush="Blue"/>--><!--自发光材质--><!--<EmissiveMaterial Color="Green" />--></GeometryModel3D.Material><GeometryModel3D.Geometry><MeshGeometry3D Positions="0,0,1 0,2,1 3,2,1 3,0,10,0,0 0,2,0 3,2,0 3,0,0"TriangleIndices="2,3,7 7,6,2 1,5,4 0,1,4"/></GeometryModel3D.Geometry></GeometryModel3D></ModelUIElement3D.Model>
</ModelUIElement3D>

3D对象

3D对象则是具体的对象,在WPF中视口使用<ModelUIElement3D>标签表示。在WPF中,图形是以三角面片作为最基本的展示单元,因为三角形是最稳定的即三个点可以确定出唯一的一个平面,任何复杂的图形都是由多个三角面片组成的。在给TriangleIndices属性赋值时,一定注意三个点的顺序。

命中测试(鼠标交互)

想要使用鼠标点击得到某个图形,可以在具体的某个3D对象中,增加MouseLeftButtonDown事件

<ModelUIElement3D MouseLeftButtonDown="ModelUIElement3D_MouseLeftButtonDown">事件中可以进行改变颜色等操作

private void ModelUIElement3D_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{ModelUIElement3D mui3d = sender as ModelUIElement3D;var model = mui3d.Model as GeometryModel3D;(model.Material as DiffuseMaterial).Brush = Brushes.Orange;
}

如果有很多3D对象,在每个具体的对象上面增加事件会很麻烦,也可以直接在Viewport3D中增加事件

<Viewport3D MouseLeftButtonDown="Viewport3D_MouseLeftButtonDown">在时间中急性转换处理

private void Viewport3D_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{Viewport3D viewport3D=sender as Viewport3D; Point location=e.GetPosition(viewport3D);HitTestResult hitTestResult=VisualTreeHelper.HitTest(viewport3D, location);if (hitTestResult != null){...//具体操作}
}

3D对象中2D控件渲染

如果要在3D对象中增加控件,可以使用Viewport2DVisual3D标签,实现如下图所示的效果。

image-20230126121543225

<Viewport3D><Viewport2DVisual3D><Viewport2DVisual3D.Geometry><MeshGeometry3D Positions="0,0,1 0,2,1 3,2,1 3,0,10,0,0 0,2,0 3,2,0 3,0,0"TriangleIndices="0,2,1 0,3,2 6,4,5 6,7,4"TextureCoordinates="0,1 0,0 1,0 1,1"/><!--TextureCoordinates:表示的二维平面坐标,原点:左上角--></Viewport2DVisual3D.Geometry><Viewport2DVisual3D.Material><DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/></Viewport2DVisual3D.Material><Viewport2DVisual3D.Visual><Border BorderThickness="1" BorderBrush="Yellow"><StackPanel><TextBlock Text="Hello World" Foreground="Green" /><Button Content="Button" Click="Button_Click"/></StackPanel></Border></Viewport2DVisual3D.Visual></Viewport2DVisual3D>
<Viewport3D>

外部导入3D模型

在wpf中绘制3D模型还是非常麻烦的,在实际工作中用的比较多的是从外部导入已有的3d模型。推荐一个比较好的第三方库HelixToolKit

1

<Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp2"xmlns:helix="http://helix-toolkit.org/wpf"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><helix:HelixViewport3D  Name="viewPort3d"ShowViewCube="True"ViewCubeBackText="" ViewCubeFrontText="" ViewCubeHeight="100" ViewCubeWidth="100" ViewCubeVerticalPosition="Bottom"ViewCubeHorizontalPosition="Right"ShowCoordinateSystem="True"CoordinateSystemLabelForeground="Red"CoordinateSystemHorizontalPosition="Left"CoordinateSystemVerticalPosition="Bottom"ShowFrameRate="True"IsViewCubeEdgeClicksEnabled="False"><helix:HelixViewport3D.Camera><PerspectiveCamera FieldOfView="45"  LookDirection="0,0,-414.387754871885" FarPlaneDistance="30000"NearPlaneDistance="0.1" Position="9.9475983006414E-14,91.037123633789,414.387754871885" UpDirection="0,1,0"/></helix:HelixViewport3D.Camera><helix:HelixViewport3D.Background><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="#444" Offset="0"/><GradientStop Color="#EEE" Offset="1"/></LinearGradientBrush></helix:HelixViewport3D.Background><helix:GridLinesVisual3D Width="16000" Length="16000" Thickness="2" MinorDistance="500" MajorDistance="500" Fill="Gray" /><!--很重要,没有灯光场景是黑的--><helix:DefaultLights/><ModelVisual3D x:Name="model"></ModelVisual3D></helix:HelixViewport3D></Grid>
</Window>
namespace WpfApp2
{public partial class MainWindow : Window{List<string> modelPaths = new List<string>();string basePath = AppDomain.CurrentDomain.BaseDirectory + "\\ModelFiles\\";public MainWindow(){InitializeComponent();modelPaths.Add("IRB4600_20kg-250_LINK1_CAD_rev04.stl");modelPaths.Add("IRB4600_20kg-250_LINK2_CAD_rev04.stl");modelPaths.Add("IRB4600_20kg-250_LINK3_CAD_rev005.stl");modelPaths.Add("IRB4600_20kg-250_LINK4_CAD_rev04.stl");modelPaths.Add("IRB4600_20kg-250_LINK5_CAD_rev04.stl");modelPaths.Add("IRB4600_20kg-250_LINK6_CAD_rev04.stl");modelPaths.Add("IRB4600_20kg-250_LINK3_CAD_rev04.stl");modelPaths.Add("IRB4600_20kg-250_CABLES_LINK1_rev03.stl");modelPaths.Add("IRB4600_20kg-250_CABLES_LINK2_rev03.stl");modelPaths.Add("IRB4600_20kg-250_CABLES_LINK3_rev03.stl");modelPaths.Add("IRB4600_20kg-250_BASE_CAD_rev04.stl");this.Loaded += MainWindow_Loaded;viewPort3d.RotateGesture = new MouseGesture(MouseAction.RightClick);viewPort3d.PanGesture = new MouseGesture(MouseAction.LeftClick);}private void MainWindow_Loaded(object sender, RoutedEventArgs e){viewPort3d.Camera.LookDirection = new Vector3D(2038, -5200, -2930);viewPort3d.Camera.UpDirection = new Vector3D(-0.145, 0.372, 0.917);viewPort3d.Camera.Position = new Point3D(-1571, 4801, 3774);this.model.Content = InitializeModels(this.modelPaths);}private Model3DGroup InitializeModels(List<string> modelsNames){Model3DGroup group = new Model3DGroup();try{ModelImporter import = new ModelImporter();foreach (string modelName in modelsNames){var materialGroup = new MaterialGroup();Color mainColor = Colors.White;//EmissiveMaterial emissMat = new EmissiveMaterial(new SolidColorBrush(mainColor));DiffuseMaterial diffMat = new DiffuseMaterial(new SolidColorBrush(mainColor));//SpecularMaterial specMat = new SpecularMaterial(new SolidColorBrush(mainColor), 2000);//materialGroup.Children.Add(emissMat);materialGroup.Children.Add(diffMat);//materialGroup.Children.Add(specMat);var link = import.Load(basePath + modelName);GeometryModel3D model = link.Children[0] as GeometryModel3D;model.Material = materialGroup;model.BackMaterial = materialGroup;group.Children.Add(link);}}catch (Exception e){MessageBox.Show("未知异常:" + e.StackTrace);}return group;}}
}

HelixToolKit使用文档

相关文章:

MapReduce

1.需求 创建一个文件上传到HDFS&#xff0c;统计每个学生的总成绩&#xff0c;文件内容如下&#xff1a; 使用MapReduce 张三 英语 80 河南省 张三 数学 50 河南省 张三 语文 60 河南省 李四 英语 90 河南省 李四 语文 90 河南省 李四 数学 85 河南省 通过结果&#xff…...

Scala网络爬虫实战:抓取QQ音乐的音频资源

引言 在当今数字化时代&#xff0c;互联网中蕴藏着海量的数据&#xff0c;而网络爬虫技术则是获取这些数据的重要工具之一。而Scala作为一种功能强大的多范式编程语言&#xff0c;结合了面向对象和函数式编程的特性&#xff0c;为网络爬虫开发提供了更多的可能性。在本文中&am…...

第八次 Scrum Meeting

-...

【自动驾驶|毫米波雷达】卡尔曼滤波

目录 一. 滤波器分类 二.卡尔曼滤波&#xff08;Kalman Filter&#xff09;原理 &#xff08;1&#xff09;定性理解 &#xff08;2&#xff09;定量推导 1. 预测阶段 2. 更新阶段 3. 卡尔曼增益 1&#xff09;卡尔曼增益 2&#xff09;如何理解卡尔曼增益&#xff1f; 三…...

在 Linux 中复制文件和目录

目录 ⛳️推荐 前言 在 Linux 命令行中复制文件 将文件复制到另一个目录 复制文件但重命名 将多个文件复制到另一个位置 复制时处理重复文件 交互式复制文件 在 Linux 命令行中复制目录 仅复制目录的内容&#xff08;不是目录&#xff09; 复制多个目录 测试你的知…...

+63+条消息++狂神+docker+学习笔记_GaleTeng+的博客+-+CSDN+博客

+63+条消息++狂神+docker+学习笔记_GaleTeng+的博客+-+CSDN+博客 文章目录前言Docker 概述1.Docker 为什么会出现?2.Docker 历史3.Docker 能干嘛Docker 安装1. Docker 的基本组成2. 安装 Docker3. 阿里云镜像加速4. 回顾 HelloWorld 流程5. 底层原理Docker 常用命令1. 帮助命令…...

WPF-3D图形

WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制&#xff0c;只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念&#xff0c; 以及常用到的命中测试、2d控件如何在3D对象中进行渲染&#xff0c;除此之外&#xff0c;还演示了如何导入外部…...

返回值的理解

前言 我们写的函数是怎么返回的&#xff0c;该如何返回一个临时变量&#xff0c;临时变量不是出栈就销毁了吗&#xff0c;为什么可以传递给调用方&#xff1f;返回对象的大小对使用的方式有影响吗&#xff1f;本文将带你探究这些问题&#xff0c;阅读本文需要对函数栈帧有一定…...

前端布局神器display:flex

Flexbox&#xff0c;一种CSS3的布局模式&#xff0c;也叫做弹性盒子模型&#xff0c;用来为盒装模型提供最大的灵活性。首先举一个栗子&#xff0c;之前我们是这样实现一个div盒子水平垂直居中的。在知道对象高宽的情况下&#xff0c;对居中元素绝对百分比定位&#xff0c;然后…...

【Typescript学习】使用 React 和 TypeScript 构建web应用(三)所有组件

教程来自freecodeCamp&#xff1a;【英字】使用 React 和 TypeScript 构建应用程序 跟做&#xff0c;仅记录用 其他资料&#xff1a;https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第三天 以下是视频(0:40-0:60) 的内容 目录第三天1 创建Todo…...

7.3 矩阵范数

定义 向量有范数&#xff0c;矩阵也有范数&#xff0c;定义和向量范数类似&#xff0c;不过多了一条要求。它的定义如下&#xff1a; 正定性positivity,∥A∥≥0\parallel A\parallel\ge 0∥A∥≥0&#xff0c;只有A0A0A0时才取等号&#xff1b;非负齐次性homogeneity或scalin…...

Jetpack架构组件库:Hilt

Hilt Hilt 是基于 Dagger2 的依赖注入框架&#xff0c;Google团队将其专门为Android开发打造了一种纯注解的使用方式&#xff0c;相比 Dagger2 而言使用起来更加简单。 依赖注入框架的主要作用就是控制反转&#xff08;IOC, Inversion of Control&#xff09;, 那么什么是控制…...

InstanceNorm LayerNorm

InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN&#xff1a;一个token就是一层layer&#xff0c;对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNorm&#xff…...

数据结构---堆

堆 定义 基本操作 建堆 堆排序 优先队列 一、堆的定义&#xff1a; 堆必须是一个完全二叉树 还得满足堆序性 什么是完全二叉树呢&#xff1f; 完全二叉树只允许最后一行不为满 且最后一行必须从左到右排序 最后一行元素之间不可有间隔&#xff0c;中间不可有空缺 如下几棵树…...

3小时精通opencv(五) 利用TrackBar进行颜色检测

3小时精通opencv(五) 利用TrackBar进行颜色检测 参考视频资源:3h精通Opencv-Python 本章内容介绍如何利用TrackBar调节色域, 手动提取到我们需要的颜色 文章目录3小时精通opencv(五) 利用TrackBar进行颜色检测创建Trackbar色彩检测创建Trackbar 在opencv中使用createTrackbar函…...

学习记录673@项目管理之进度管理案例

本文主要是进度管理之关键链路法的案例。 案例 Perfect 项目的建设方要求必须按合同规定的期限交付系统&#xff0c;承建方项目经理李某决定严格执行项目进度管理&#xff0c;以保证项目按期完成。他决定使用关键路径法来编制项目进度网络图。在对工作分解结构进行认真分析后&…...

【设计模式】结构型模式·组合模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概述 又称为部分整体模式&#xff0c;用于把一组相似的对象当作一个单一的对象。组合模式依…...

Vue-Router详解

1、前端路由的发展历程 1.1、认识前端路由 路由其实是网络工程中的一个术语&#xff1a; 在架构一个网络时&#xff0c;非常重要的两个设备就是路由器和交换机。当然&#xff0c;目前在我们生活中路由器也是越来越被大家所熟知&#xff0c;因为我们生活中都会用到路由器&…...

Eclipse中的Build Path

Eclipse中的Build Path简介如果修改了Build Path中的中的JRE版本&#xff0c;记得还需要同步修改Java编译器的版本&#xff0c;如下图红框所示简介 Build Path是Java工程包含的资源属性合集&#xff0c;用来管理和配置此Java工程中【除当前工程自身代码以外的其他资源】的引用…...

Python与Matlab混合编程案例

前言因为项目需要&#xff0c;需要批处理很多Matlab的.m文件&#xff0c;从每个文件中提取结果合并到一个文件中。 很明显&#xff0c;如果手工统计&#xff0c;几百个文件会累死的。 因此立即想到了Python在批处理方面的优势&#xff0c;因此就在网上找了相关资料&#xff0c;…...

stack、queue、priority_queue

容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转换成客户希望的另外一个接口。 其中stack和queue都是容器适配器&#xff0c;其中stack可以封装vector、list以及我们…...

高通平台开发系列讲解(GPS篇)gpsONE 系统架构

文章目录 一、系统架构图二、gpsONE系统组成三、gpsONE交互流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢高通的定位系统模块,名称叫gpsONE。 一、系统架构图 二、gpsONE系统组成 GPS系统架构可以分为六个部分: APP层Framework Client端(LocationManager API…...

zkMove——针对Move合约生态的zkVM

1. 引言 Move为不同于Solidity的&#xff0c;开源的安全的智能合约开发语言&#xff0c;最早由Facebook为Diem链创造开发。不过&#xff0c;Move本身设计为与平台无关的语言&#xff0c;具有通用的库、工具&#xff0c;并使得采用完全不同数据模型和执行模型的链的开发者社区都…...

贪心算法的题目

每一步都做出一个局部最优的选择&#xff0c;最终的结果就是全局最优 只有一部分问题才能用贪心算法&#xff08;严格来讲&#xff0c;一个问题能不能用贪心算法需要证明的&#xff09; 2022.8.30 蔚来笔试题&#xff1a; 有a个y,b个o,c个u,用这些字母拼成一个字符串&#xf…...

线程控制--Linux

文章目录线程理解线程的优点与缺点进程的多个线程共享线程控制线程创建线程终止线程等待线程分离总结线程理解 谈及线程&#xff0c;就不得不谈起进程与线程的关系了。学习完前面有关进程的知识&#xff0c;之前我们对进程的定义是&#xff1a;内核数据结构代码和数据。但是今…...

17 | 如何做好面试复盘?将经验提升为能力

前言 前言&#xff1a;面试是最好的查漏补缺机会&#xff0c;做好面试复盘又是十分的重要。 文章目录前言一. 关于复盘1. 什么是复盘&#xff08;What&#xff09;2. 复盘的目的&#xff08;Why&#xff09;3. 什么时候需要复盘&#xff08;When&#xff09;4. 怎么进行复盘&am…...

数据结构-树

1. 二叉树遍历 #include <stdbool.h> #include "stdio.h" #include "stdlib.h"typedef struct TNode *Position; typedef Position BinTree; // 二叉树类型 typedef char ElementType;// 树结点定义 struct TNode {ElementType Data; // 结点数据Bin…...

Python3 循环语句

本章节将为大家介绍 Python 循环语句的使用。 Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示&#xff1a; while 循环 Python 中 while 语句的一般形式&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)…… 执行流程…...

时序数据处理中的拟合问题

对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(…...

[数据结构基础]排序算法第一弹 -- 直接插入排序和希尔排序

目录 一. 排序的概念及分类 1.1 排序的概念 1.2 常见的排序算法 二. 直接插入排序 2.1 直接插入排序的实现逻辑 2.2 直接插入排序的实现代码 2.3 直接插入排序的时间复杂度分析 三. 希尔排序 3.1 希尔排序的实现逻辑 3.2 希尔排序实现代码 3.3 希尔排序的效率测试 …...

厚积薄发打卡Day115:Debug设计模式<简单工厂、工厂方法、抽象工厂>

厚积薄发打卡Day115&#xff1a;Debug设计模式<简单工厂、工厂方法、抽象工厂> 简单工厂 定义 由一个工厂对象决定创建出哪一种产品类的实例&#xff08;严格意义并不是设计模式&#xff0c;更是一种风格&#xff09; 类型&#xff1a;创建型&#xff0c;但不属于GOF…...

python元组

python元组 文章目录python元组一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建元组2.访问元组3.修改元组4.删除元组5.索引及截取6.元组运算符7.内置函数总结一、实验目的 掌握元组的用法 二、实验原理 Python 的元组与列表类似&#xff0c;不同之处在…...

gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__

今天在看Linux系统编程这本书的代码的时候看到了__GNUC__&#xff0c;不太清楚这个宏所以去查了一下&#xff0c;以此记录。GNU C预定义了一系列的宏&#xff0c;这些宏都是以双下划线开始的&#xff0c;这里只讲一下__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__&#xff0c;完…...

AxMath使用教程(持续更新中)

前言 这两天学了学Latex&#xff0c;主要是为了以后写毕业论文做铺垫&#xff0c;而且Latex在数学公式这一方面&#xff0c;要比Word方便许多&#xff0c;于是我就下载了一款国产的公式编辑器——AxMath。永久会员不贵&#xff0c;只要36元&#xff0c;而且软件很好用&#xf…...

day11 栈和队列 | 20、有效的括号 1047、删除字符串中的所有相邻重复项 150、逆波兰表达式求值

题目 20、有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序…...

【前端面试】http面试整理

"一问一答"模型的协议 客户端通过http请求&#xff1b;服务器端根据请求返回客户想要的资源&#xff1b;客户端接收到资源&#xff1b;http是什么 HTTP是超文本传输协议&#xff0c;是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约…...

倒霉倒霉倒霉(传送门 bfs 三维数组 递归 综合运用

题目描述“啊&#xff01;倒霉倒霉倒霉~”龙叔被困在一座大厦里了&#xff0c;可恶的瓦龙把这座大厦点燃了&#xff0c;他借机消灭龙叔。这座大厦有L层&#xff0c;每一层都有R*C个房间。熊熊火焰蔓延十分快&#xff0c;有的房间已经着火了&#xff0c;龙叔没办法通过。这时老爹…...

C++函数定义和调用介绍

C函数定义和调用介绍 函数的意义&#xff1a;利用率高&#xff0c;可读性强&#xff0c;利于移植。 一个C程序中主函数有且只有一个&#xff0c;是程序的入口&#xff0c;而函数&#xff08;或称子函数&#xff09;可以有很多。 每个 C 程序都至少有一个函数&#xff0c;即主…...

手把手带初学者快速入门 JAVA Web SSM 框架

博主也是刚开始学习SSM&#xff0c;为了帮大家节省时间&#xff0c;写下SSM快速入门博客 有什么不对的地方还请 私信 或者 评论区 指出 ​只是一个简单的整合项目&#xff0c;让初学者了解一下SSM的大致结构 项目先把框架写好&#xff0c;之后在填写内容 项目压缩包 完整的蓝奏…...

RocketMQ源码本地搭建调试

1 GitHub源码 git clone https://github.com/apache/rocketmq.git导入IDEA&#xff0c;可在命令行执行mvn compile一下&#xff0c;保证源码能够正确编译。本次我使用的master分支的版本-4.8.0。下面我们开始准备启动Namesrv。 2 启动Namesrv 到namesrv模块找到NamesrvStart…...

Axios 二次封装并使用

index.js import axios from "axios";let token localStorage.getItem("token"); // let token "123213"; class Request {// 自定义变量instance;constructor(config) {// console.log(config)// 创建axios 实例&#xff0c;变量接收this.in…...

【SpringCloud】Nacos集群搭建

集群结构图官方给出的Nacos集群图如下&#xff1a;其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们接下来要尝试 Nacos集群搭建&#xff0c;效果图如下所示&#xff1a;三个nacos节点的地址&#xff1a;节点ipportnacos1l…...

【CSDN的2022与2023】普普通通的三年,从懵懂、焦虑到坚定、奋进,破除焦虑努力成为更好的自己

大家好&#xff0c;我是黄小黄&#xff01;一名普通的软件工程在读学生。最近终于闲下来了一丢丢&#xff01;借着休息之余&#xff0c;来写一篇年度总结散散心~与其说是年度总结&#xff0c;不如说是给大学生活与莽莽撞撞的自己一个交代叭&#xff01; 这些都是小标题~碎碎念1…...

k8s单机版使用本地存储local-path-provisioner

在k8s单机环境中&#xff0c;我们经常使用本机路径作为持久化存储。在k8s官方文档中有两种方式使用本机存储&#xff0c;一种是hostPath&#xff0c;另一种是local volume&#xff0c;这两种都不支持动态扩容&#xff0c;并且程序移植改动比较大&#xff0c;而local-path-provi…...

MySQL优化(1)执行计划explain中type属性详解

系列文章目录1.初始化测试数据1.初始化表格&#xff08;user表&#xff09;2.初始化表格&#xff08;product表&#xff09;3.初始化表格&#xff08;user表数据初始化&#xff09;4.初始化表格&#xff08;product表函数&#xff09;5.初始化表格&#xff08;product表数据初始…...

servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别

servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别servlet过滤器1.filter过滤器的含义2.filter过滤器的使用3.测试-过滤字符编码正确响应中文编码3.1 创建servlet用于显示中文字符3.2 自定义过滤器3.3 配置web.xml中的servlet映射以及过滤器请求拦截3.4 运行输出…...

Java链表OJ题

目录1. 删除链表中等于给定值val的所有结点2. 逆置单链表3. 链表的中间结点4. 链表中倒数第k个结点5. 将两个有序链表合并为一个新的有序链表6. 以给定值x为基准将链表分割成两部分7. 判断是否为回文链表8. 两个链表的第一个公共结点9. 判断链表中是否有环10. 链表开始入环的第…...

0、Spring工程构建Spring快速入门Spring配置文件详解注入Sprint相关API

1、Spring工程构建 创建工程项目目录文件夹 IDEA选择项目new一个module 配置案例 aop创建 创建并下载完毕后&#xff0c;点击file选择projert 选择按照的jdk版本 output选择当前目录&#xff0c; 点击右下方apply 选择facets&#xff0c;点击""号选择web 选择当前…...

网络原理之HTTP/HTTPS、TCP、IP四层协议栈

文章目录一、应用层&#xff08;一&#xff09;xml协议&#xff08;二&#xff09;json协议&#xff08;三&#xff09;protobuffer协议&#xff08;四&#xff09;HTTP协议1. 抓包工具&#xff0c;fiddler2. HTTP报文格式3. HTTP请求(Request)&#xff08;1&#xff09;URL基本…...

CS61B 2021spring HW0

HW 0: A Java Crash Course 文章目录HW 0: A Java Crash CourseA Basic ProgramCreative Exercise 1a: Drawing a TriangleCreative Exercise 1b: DrawTriangleExercise 2、3Optional: Exercise 4Java可视化orz表达积累参考资料这个hw是optional&#xff0c;然后主要是给至少学…...

自动驾驶环境感知——视觉传感器技术

文章目录1. 摄像头的成像原理1.1 单目视觉传感器的硬件结构1.2 单目视觉的成像原理 –小孔成像模型1.3 单目视觉的成像原理 – 像素坐标系1.4 单目视觉三维坐标系转换 – 外参1.5 单目视觉的坐标系转换 – 从世界坐标点到像素坐标1.6 单目视觉的特性2. 视觉传感器的标定2.1 视觉…...

分享148个ASP源码,总有一款适合您

ASP源码 分享148个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 148个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1e2PvBmXxZA8C3IelkP8ZtQ?pwdj7lp 提取码&#x…...

Java线程的生命周期的五种状态

前面在《有关Java多线程的几个概念》&#xff08;https://blog.csdn.net/helloworldchina/article/details/128753898&#xff09;讲述了Java线程的生命周期的五种状态。在这里再详述一下线程的5种状态。 在java中&#xff0c;任何对象都要有生命周期&#xff0c;线程也一样&a…...

springboot自定义拦截器的简单使用和一个小例子

springboot自定义拦截器的使用1. 自定义拦截器2. 拦截器登录验证的小demo2.1 配置pom.xml2.2 创建User的bean组件2.3 创建需要的表单页面以及登录成功的页面2.4 编写controller映射关系2.5 自定义拦截器类&#xff0c;实现intercepetor接口2.6注册添加拦截器&#xff0c;自定义…...

APT之木马静态免杀

前言 这篇文章主要是记录手动编写代码进行木马免杀&#xff0c;使用工具也可以免杀&#xff0c;只不过太脚本小子了&#xff0c;而且工具的特征也容易被杀软抓到&#xff0c;指不定哪天就用不了了&#xff0c;所以要学一下手动去免杀木马&#xff0c;也方便以后开发一个只属于…...

设计模式 - 创建型模式_抽象工厂模式

文章目录创建型模式概述Case场景模拟工程模拟早期单机Redis的使用Bad ImplBetter Impl &#xff08;抽象⼯⼚模式重构代码&#xff09;定义适配接⼝实现集群适配器接口代理方式的抽象工厂类单元测试小结创建型模式 创建型模式提供创建对象的机制&#xff0c; 能够提升已有代码…...

ChatGPT DALL-E绘图,制作各种表情包,实现穿衣风格的自由切换

DALL-E绘图功能探索&#xff1a; 1、保持人物形象一致&#xff0c;适配更多的表情、动作 2、改变穿衣风格 3、小女孩的不同年龄段展示 4、不同社交平台的个性头像创作 如果不会写代码&#xff0c;可以问GPT。使用地址&#xff1a;我的GPT4 视频&#xff0c;B站会发&#…...

SD-Turbo部署

stabilityai/sd-turbo 官网 2023 年 11 月 30 日 继推出 SDXL-Turbo 之后&#xff0c;我们又发布了SD-Turbo。 2023 年 11 月 28 日 我们正在发布 SDXL-Turbo&#xff0c;一种闪电般快速的文本到图像模型。除了模型之外&#xff0c;我们还发布了技术报告 用法&#xff1…...

加州大学欧文分校英语中级语法专项课程03:Tricky English Grammar 学习笔记

Tricky English Grammar Course Certificate Course Intro 本文是学习 https://www.coursera.org/learn/tricky-english-grammar?specializationintermediate-grammar 这门课的学习笔记 文章目录 Tricky English GrammarWeek 01: Nouns, Articles, and QuantifiersLearning …...

redis 指定数据目录

redis 指定数据目录 1、redis2、redis数据目录 3、配置redis数据目录 1、redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中介。它支持多种类型的数据结构&#xff0…...

C#核心之面向对象-继承

面向对象-继承 文章目录 1、继承的基本规则1、基本概念2、基本语法3、示例4、访问修饰符的影响5、子类和父类的同名成员 2、里氏替换原则1、基本概念2、is和as3、基本实现 3、继承中的构造函数1、基本概念2、父类的无参构造函数3、通过base调用指定父类构造 4、万物之父和装箱拆…...

计算机网络期末试题

第一章 概述 一. 单选题&#xff08;共13题&#xff0c;36.4分&#xff09; 1. (单选题) 因特网起源于( &#xff09;网络。 A. ARPANETB. EthernetC. CATVD. CERNET 我的答案: A:ARPANET;正确答案: A:ARPANET; 2.8分 2. (单选题)人们把( &#xff09;年作为因特网的诞…...

2024高安全个人密码本程序源码,贴身密码管家-随机密码备忘录二代密码

项目概述&#xff1a; 在这个网络高度发展的时代&#xff0c;每个人都需要上网&#xff0c;而上网就不可避免地需要使用账号和密码。 在众多账号的情况下&#xff0c;你是否还在为复杂难记的密码感到烦恼&#xff1f;现在只需要记录一次&#xff0c; 就可以随时查看你的密码…...

Springboot集成Redis操作缓存-06

Redis简介 Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 功能特点 数据结构丰富&#…...

使用ffmpeg对视频进行转码(支持浏览器播放)

在开发中&#xff0c;算法保存的mp4视频文件通过路径打开该视频发现视频播放不了&#xff0c;需要转码进行播放。使用java代码进行转码。代码如下&#xff0c;inputFilePath是转之前的视频路径&#xff0c;outputFilePath是转之后的视频路径。ffmpeg命令中libx264也可以改为其它…...

Golang | Leetcode Golang题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; func minWindow(s string, t string) string {ori, cnt : map[byte]int{}, map[byte]int{}for i : 0; i < len(t); i {ori[t[i]]}sLen : len(s)len : math.MaxInt32ansL, ansR : -1, -1check : func() bool {for k, v : range ori {if c…...

标准Modbus TCP双网口开关量模块

M140E以太网远程I/O无线数据采集模块是一款工业级、隔离设计、高可靠性、高稳定性和高精度数据采集模块&#xff0c;嵌入式32位高性能微处理器MCU&#xff0c;集成2路工业10/100M自适应以太网模块里面。提供多种I/O&#xff0c;支持标准Modbus TCP&#xff0c;可集成到SCADA、O…...

缓存一致性

缓存数据一致性 双写模式失效模式 都会导致缓存不一致问题。 解决方案-Canal 更新 DB 会产生的 binlog&#xff0c;Canal 订阅 binlog&#xff0c;监测到数据库的更新&#xff0c;从而更新缓存。 解决方案-分布式读写锁 适用于读多写少的情况...