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

VTK知识学习(53)- 交互与Widget(四)

1、测量类Widget

1)概述

与测量相关的主要 Widget如下:

  • vtkDistanceWidget:用于在二维平面上测量两点之间的距离。
  • vtkAngleWidget:用于二维平面的角度测量。
  • vtkBiDimensionalWidget:用于测量二维平面上任意两个正交方向的轴长。

按照前面提到的步骤创建一个用于测量距离的 Widget,示例MeasurementWidget 演示了这个过程。

2)代码
 private void TestMeasureDemo(){vtkBMPReader read = vtkBMPReader.New();read.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\lena.bmp");read.Update();vtkImageActor imageActor = vtkImageActor.New();imageActor.SetInputData(read.GetOutput());vtkRenderer renderer = vtkRenderer.New();renderer.SetBackground(1, 1, 1);vtkRenderWindow renderWindow = vtkRenderWindow.New();// renderWindowControl.RenderWindow;renderWindow.AddRenderer(renderer);renderer.AddActor(imageActor);renderWindow.Render();renderWindow.SetSize(400, 400);vtkRenderWindowInteractor renderWindowInteractor = vtkRenderWindowInteractor.New();renderWindowInteractor.SetRenderWindow(renderWindow);vtkInteractorStyleImage style = vtkInteractorStyleImage.New();renderWindowInteractor.SetInteractorStyle(style);int widgetType = 2;if (widgetType == 0)//vtkDistanceWidget{// 两个点之间的距离// 用户只要用鼠标左键点击屏幕,然后松开鼠标并移至另外一个点,即会在两点之间生成一条线段,并有距离的测量值 。vtkDistanceWidget distanceWidget = vtkDistanceWidget.New(); //实例化distanceWidget.SetInteractor(renderWindowInteractor);       //设置渲染容器交互器distanceWidget.CreateDefaultRepresentation();                //创建默认的几何表达实体//设置两点之间所测距离 的文本表示格式((vtkDistanceRepresentation)distanceWidget.GetRepresentation()).SetLabelFormat("%-#6.3g px");renderWindowInteractor.Initialize();renderWindow.Render();distanceWidget.On();       //激活实例renderWindowInteractor.Start();}else if (widgetType == 1) //vtkAngleWidget{//角度测量vtkAngleWidget angleWidget = vtkAngleWidget.New();angleWidget.SetInteractor(renderWindowInteractor);vtkAngleRepresentation2D angleRep = vtkAngleRepresentation2D.New();angleRep.GetRay1().GetProperty().SetColor(1, 0, 0);angleRep.GetRay2().GetProperty().SetColor(0, 1, 0);angleRep.GetArc().GetProperty().SetColor(0, 0, 1);angleWidget.SetRepresentation(angleRep);renderWindowInteractor.Initialize();renderWindow.Render();angleWidget.On();renderWindowInteractor.Start();}else if (widgetType == 2) //vtkBiDimensionalWidget{//测量二维平面上任意两个正交方向的轴长vtkBiDimensionalWidget biDimensionalWidget = vtkBiDimensionalWidget.New();biDimensionalWidget.SetInteractor(renderWindowInteractor);biDimensionalWidget.CreateDefaultRepresentation();//vtkBiDimensionalCallback vtkBiDimensionalCallback = (vtkBiDimensionalCallback)vtkBiDimensionalCallback.New();biDimensionalWidget.InteractionEvt += BiDimensionalWidget_RenderEvt;//biDimensionalWidget.AddObserver((uint)vtkCommand.EventIds.InteractionEvent, vtkBiDimensionalCallback, 0f);// vtkCommand.CreaterenderWindowInteractor.Initialize();renderWindow.Render();biDimensionalWidget.On();renderWindowInteractor.Start();}}
private void BiDimensionalWidget_RenderEvt(vtkObject sender, vtkObjectEventArgs e){if (sender is vtkBiDimensionalWidget biDimensionalWidget){if (biDimensionalWidget.GetRepresentation() is vtkBiDimensionalRepresentation2D representation2D){IntPtr data = Marshal.AllocHGlobal(sizeof(double) * 3);representation2D.GetPoint1DisplayPosition(data);double[] p1 = new double[3];Marshal.Copy(data, p1, 0, 3);representation2D.GetPoint2DisplayPosition(data);double[] p2 = new double[3];Marshal.Copy(data, p2, 0, 3);representation2D.GetPoint3DisplayPosition(data);double[] p3 = new double[3];Marshal.Copy(data, p3, 0, 3);representation2D.GetPoint4DisplayPosition(data);double[] p4 = new double[3];Marshal.Copy(data, p4, 0, 3);Console.WriteLine($"p1:{p1[0]} {p1[1]} {p1[2]}  " +$"p2:{p2[0]} {p2[1]} {p2[2]}  " +$"p3:{p3[0]} {p3[1]} {p3[2]}  " +$"p4:{p4[0]} {p4[1]} {p4[2]}  ");}}}
3)效果

4)说明

        以上示例中,使用了 vtkDistanceWidget 类来做二维空间的距离测量。先是实例化一个vtkDistanceWidget 实例;然后调用该类的 SetInteractor()函数来设置渲染窗口交互器;接着调用 CreateDefaultRepresentation()函数来创建默认的几何表达实体,即用十字形表示两个端点,端点之间使用带有刻度的直线连接。需要注意的是,在程序中调用SetLabelFormat()函数来设置两点之间所测距离的文本表示格式;最后调用0n()函数来激活vtkDistanceWidget实例。

        程序运行后,用户只要用鼠标左键点击屏幕,然后松开鼠标并移至另外一个点,即会在两点之间生成一条线段,并有距离的测量值,程序运行结果如图所示。

        角度测量的 vtkAngleWidget 以及二维正交方向长度测量的 vtkBiDimensionalWidget 的使用方法与 vtkDistanceWidget 类似,它们的二维几何表达形式分别为 vtkAngleRepresentation2D和 vtkBiDimensionalRepresentation2D。

2、标注类Widget

1)概述

        在可视化应用程序中,经常会对某个对象做一些标注说明,比如在医学图像诊断中,常常会手动标注出被诊断为肿瘤的区域或者其他病变区域,并用文字等进行标注。又如,在气象领域中,会用一些颜色图标表示各个地理区域在某个时间段温度高低的分布情况等。VTK中,与标注相关的主要 Widget如下:

  • vtkTextWidget:在渲染场景中生成一串标识文本,可以随意调整该文本在渲染场景中的位置,缩放其大小等。
  • vtkScalarBarWidget:根据输入的数据在渲染场景中生成一个标量条,通过设置颜色查找表,可以用标量条上的颜色来指示输入的数据。渲染场景中的标量条可以随意移动、改变大小、设置不同的方向等。
  • vtkCaptionWidget:用一个带线框及箭头的文本信息来标注某一对象。
  • vtkOrientationMarkerWidget:渲染场景中所渲染数据的方向指示标志。在医学图像应用程序中有广泛的应用,比如,通过CT、MR 等扫描的数据,当将其导入可视化应用程序时,需要标识其上、下、左、右、前、后等方位。
  • vtkBalloonWidget:当鼠标停留在渲染场景中的某个 Actor 一段时间后,会弹出提示信息。所提示的信息除了可以用文本表示,也可以用图像表示。

示例  AnnotationWidget 演示了以上几个 Widget 的用法。

2)代码
private void TestAnnotation(){vtkUnstructuredGridReader reader = vtkUnstructuredGridReader.New();reader.SetFileName("F:\\code\\VTK\\TestActiViz\\data\\scalarBarWidgetTestData.vtk");reader.Update();vtkLookupTable lut = vtkLookupTable.New();lut.Build();vtkDataSetMapper mapper = vtkDataSetMapper.New();mapper.SetInputData(reader.GetOutput());double[] scalar = reader.GetOutput().GetScalarRange();mapper.SetScalarRange(scalar[0], scalar[1]);mapper.SetLookupTable(lut);vtkActor actor = vtkActor.New();actor.SetMapper(mapper);vtkRenderer renderer = vtkRenderer.New();renderer.AddActor(actor);renderer.SetBackground(1, 1, 1);vtkRenderWindow renderWindow = vtkRenderWindow.New();renderWindow.AddRenderer(renderer);renderWindow.SetWindowName("AnnotationWidget");renderWindow.SetSize(400, 400);renderWindow.Render();vtkRenderWindowInteractor interactor = vtkRenderWindowInteractor.New();interactor.SetRenderWindow(renderWindow);vtkScalarBarActor scalarBarActor = vtkScalarBarActor.New();scalarBarActor.SetOrientationToHorizontal();scalarBarActor.SetLookupTable(lut);// vtkScalarBarWidgetvtkScalarBarWidget scalarBarWidget = vtkScalarBarWidget.New();scalarBarWidget.SetInteractor(interactor);scalarBarWidget.SetScalarBarActor(scalarBarActor);scalarBarWidget.On();// vtkTextWidgetvtkTextActor textActor = vtkTextActor.New();textActor.SetInput("VTK Widgets");textActor.GetTextProperty().SetColor(0, 1, 0);vtkTextWidget textWidget = vtkTextWidget.New();vtkTextRepresentation textRepresentation = vtkTextRepresentation.New();textRepresentation.GetPositionCoordinate().SetValue(0.15, 0.15);textRepresentation.GetPosition2Coordinate().SetValue(0.7, 0.2);textWidget.SetRepresentation(textRepresentation);textWidget.SetInteractor(interactor);textWidget.SetTextActor(textActor);textWidget.On();// vtkBalloonWidgetvtkBalloonRepresentation balloonrep = vtkBalloonRepresentation.New();balloonrep.SetBalloonLayoutToImageRight();vtkBalloonWidget balloonWidget = vtkBalloonWidget.New();balloonWidget.SetInteractor(interactor);balloonWidget.SetRepresentation(balloonrep);balloonWidget.AddBalloon(actor, "This is a widget example");balloonWidget.On();//vtkOrientationMarkerWidgetvtkAxesActor iconActor = vtkAxesActor.New();vtkOrientationMarkerWidget orientation = vtkOrientationMarkerWidget.New();orientation.SetOutlineColor(0.93, 0.57, 0.13);orientation.SetOrientationMarker(iconActor);orientation.SetInteractor(interactor);orientation.SetViewport(0, 0, 0.2, 0.2);orientation.SetEnabled(1);orientation.InteractiveOn();vtkCaptionWidget//vtkCaptionRepresentation captionRepresentation = vtkCaptionRepresentation.New();//captionRepresentation.GetCaptionActor2D().SetCaption("Caption Widget");//captionRepresentation.GetCaptionActor2D().GetTextActor().GetTextProperty().SetFontSize(20);//double[] pos = new double[] { 0.5, 0, 0 };//IntPtr dataPtr = Marshal.AllocHGlobal(sizeof(double) * 3);//Marshal.Copy(pos, 0, dataPtr, 3);//captionRepresentation.SetAnchorPosition(dataPtr);//vtkCaptionWidget captionWidget = vtkCaptionWidget.New();//captionWidget.SetInteractor(interactor);//captionWidget.SetRepresentation(captionRepresentation);//captionWidget.On();renderWindow.Render();interactor.Initialize();interactor.Start();}
3)效果

4)说明

        以上 Widget 在使用时需要注意的地方是,除了指定Widget 的表达实体以外,某些Widget 还需要与其他 Actor 协同使用,比如 vkScalarBarWidget要与 vtkScalarBarActor 协同工作vtkTextWidget 要与 vtkTextActor 协同工作等。

3、分割/配准灯Widget

         图像分割与配准是数字图像处理技术两大主要的应用领域,特别是在医学图像处理中,其应用更加广泛。著名的医学图像分割与配准工具包ITK(Insight Segmentation and RegistrationToolkit)的重要应用领域就是图像分割与配准。ITK 实现了许多经典的分割、配准算法,但不提供可视化的功能,因此,在应用中一般都会和 VTK 一起使用。由ITK负责分割、配准等数据处理,其处理结果由 VTK进行显示,必要时可以使用VTK的交互 Widget,从用户的交互过程中获取所需的数据,并向ITK的处理算法传递用户的参数设置。比如,对于区域增长算法,需要设置初始的种子点,而种子点的设置则可以使用VTK的vtkSeedWidget。与图像分割、配准应用相关的主要 Widget 如下。

  • vtkContourWidget:绘制轮廓线。所绘制的轮可以是闭合的,也可以是不闭合的,取决于最后一个点的位置。
  • vtkImageTracerWidget:绘制轨迹线。该类在手动分割图像中应用得较多。
  • vtkSeedWidget:放置种子点。在基于种子点的分割算法中应用得较多。
  • vtkCheckerboardWidget:在二维图像上生成棋盘格,而且可以控制棋盘格的数目。使用该类可以查看两幅图像配准后的重叠效果。
  • vtkRectilinearWipeWidget:在二维图像上生成棋盘格,与 vtkCheckboardWidget 不同的是,该类不可以控制棋盘格的数目,所生成的棋盘格是固定的2X2,但是该2x2的棋盘格可以调节大小,主要也是应用于图像配准中。

4、其他Widget

        除了以上介绍的 Widget 以外,VTK 还提供与绘图相关的 Widget,如 vtkXYPlotWidget;与动画、视频相关的 Widget,如 vkCameraWidget、vtkPlaybackWidget;与参数控制等相关的Widget,如 vtkCompassWidget、vtkSliderWidget、vtkCenteredSliderWidget 等;与数据探测提取等相关的 Widget,如vtkPlaneWidget、vtklmagePlaneWidget、vtkImplicitPlaneWidget2、vtkTensorProbeWidget;还有与空间变换相关的 Widget,如 vtkAffneWidget 等。

        虽然每个 Widget 都有不同的功能及应用范围,但是它们的使用方法大同小异,基本都是遵循 前面所述的操作步骤。每个 Widget内部都会绑定不同的事件,在使用这些 Widget 类时,只要知道应该捕获哪些消息,然后根据具体的需求实现相应的回调函数即可,而 Widget的样式则由相应的 Represention 类进行表达。用户可以使用默认的表达实体或者指定其他的表达实体,这就是 vtkAbstractWidget里“交互/表达实体”分离的好处。

相关文章:

VTK知识学习(53)- 交互与Widget(四)

1、测量类Widget 1)概述 与测量相关的主要 Widget如下: vtkDistanceWidget:用于在二维平面上测量两点之间的距离。vtkAngleWidget:用于二维平面的角度测量。vtkBiDimensionalWidget:用于测量二维平面上任意两个正交方向的轴长。 按照前面提到的步骤创…...

基础服务系列-Windows10 安装AnacondaJupyter

下载 https://www.anaconda.com/products/individual 安装 安装Jupyter 完成安装 启动Jupyter 浏览器访问 默认浏览器打开,IE不兼容,可以换个浏览器 修改密码 运行脚本...

使用c++调用deepseek的api(附带源码)

可以给服务器添加deepseek这样就相当于多了一个智能ai助手 deepseek的api申请地址使用格式测试效果源码 deepseek的api申请地址 这边使用硅基流动的api,注册就有免费额度 硅基流动: link 使用格式 api的调用格式,ds的api调用就是用固定协议然后发送到…...

HarmonyOS-ArkUI: animateTo 显式动画

什么是显式动画 啊, 尽管有点糙,但还是解释一下吧, 显式动画里面的“显式”二字, 是程序员在代码调用的时候,就三令五申,明明白白调用动画API而创建的动画。 这个API的名字就是: animateTo。这就是显式动画。说白了您可以大致理解为,显式动画,就是调用animateTo来完成…...

Spring AI MCP

MCP是什么 MCP是模型上下文协议(Model Context Protocol)的简称,是一个开源协议,由Anthropic(Claude开发公司)开发,旨在让大型语言模型(LLM)能够以标准化的方式连接到外…...

Kubernetes 创建 Jenkins 实现 CICD 配置指南

Kubernetes 创建 Jenkins 实现 CICD 配置指南 拉取 Jenkins 镜像并推送到本地仓库 # 从官方仓库拉取镜像(若网络不通畅可使用国内镜像源) docker pull jenkins/jenkins:lts-jdk11# 国内用户可去下面地址寻找镜像源并拉取: https://docker.a…...

01_Flask快速入门教程介绍

一、课程视频 01_Flask快速入门教程介绍 二、课程特点 讲课风格通俗易懂,理论与实战相结合 教程:视频 配套文档 配套的代码 最新本版,Python版本是3.12,Flask版本是3.10 即使是从没接触过Flsk的小白也看得懂学得会 三、适用人…...

SSH反向代理

SSH反向代理 一、过程 1、 确保树莓派和阿里云服务器的 SSH 服务正常运行 检查树莓派的ssh服务 sudo systemctl status ssh如果未启用,请启动并设置开机自启: sudo systemctl enable ssh sudo systemctl start ssh检查阿里云服务器的SSH服务 sudo …...

第 5 篇:初试牛刀 - 简单的预测方法

第 5 篇:初试牛刀 - 简单的预测方法 经过前面四篇的学习,我们已经具备了处理时间序列数据的基本功:加载、可视化、分解以及处理平稳性。现在,激动人心的时刻到来了——我们要开始尝试预测 (Forecasting) 未来! 预测是…...

深度学习中的归一化技术:从原理到实战全解析

摘要:本文系统解析深度学习中的归一化技术,涵盖批量归一化(BN)、层归一化(LN)、实例归一化(IN)、组归一化(GN)等核心方法。通过数学原理、适用场景、优缺点对…...

流量抓取工具(wireshark)

协议 TCP/IP协议簇 网络接口层(没有特定的协议)PPPOE 物理层数据链路层 网络层: IP(v4/v6) ARP(地址解析协议) RARP ICMP(Internet控制报文协议) IGMP传输层:TCP(传输控制协议)UDP(用户数据报协议)应用层…...

【原创】Ubuntu20.04 安装 Isaac Gym 仿真器

Isaac Gym 是 NVIDIA 开发的一个基于GPU的机器人仿真平台。其高效的 GPU 加速能力和大规模并行仿真性能,成为强化学习训练和机器人控制研究的重要选择。 本文将介绍 Isaac Gym 的安装过程【简易】。 1.配置环境 Ubuntu20.04 安装 NVIDIA 显卡驱动 Ubuntu20.04 安…...

AI 速读 SpecReason:让思考又快又准!

在大模型推理的世界里,速度与精度往往难以兼得。但今天要介绍的这篇论文带来了名为SpecReason的创新系统,它打破常规,能让大模型推理既快速又准确,大幅提升性能。想知道它是如何做到的吗?快来一探究竟! 论…...

从“堆料竞赛”到“体验深耕”,X200 Ultra和X200s打响手机价值升维战

出品 | 何玺 排版 | 叶媛 vivo双旗舰来袭! 4月21日,vivo X系列春季新品发布会盛大开启,带来了一场科技与创新的盛宴。会上,消费者期待已久的X200 Ultra及X200s两款旗舰新品正式发布。 vivo两款旗舰新品发布后,其打破…...

Macbook IntelliJ IDEA终端无法运行mvn命令

一、背景 idea工具里执行Maven命令mvn package,报错提示 zsh: command not found: mvn。 macOS,默认使用的是zsh,环境变量通常配置在 ~/.zshrc 文件中。 而我之前一直是配置在~/.bash_profile文件中。 二、环境变量 vi ~/.zshrc设置MAVE…...

CentOS 7进入救援模式——VirtualBox虚拟机

​ 目录 1. 在`VirtualBox`环境下,开机按F12,进入`VirtualBox temporary boot device selection `界面,按`c`键,选中`CD-ROM `回车。2. 选中`Troubleshooting`(故障排除),进入`Troubleshooting`界面3. 接下来会显示救援模式菜单,通常选择`"1) Continue"`(除非您…...

AI软件栈:LLVM分析(六)

LLVM后端代码生成的关键步骤 文章目录 指令选择指令调度寄存器分配 指令选择 完成从基于LLVM IR的DAG转换为基于特定目标平台的DAG(注意,此时描述格式依然是DAG形态)基于TabGen完成指令重映射(典型的处理包括:指令拆散…...

【第十六届 蓝桥杯 省 C/Python A/Java C 登山】题解

题目链接:P12169 [蓝桥杯 2025 省 C/Python A/Java C] 登山 思路来源 一开始想的其实是记搜,但是发现还有先找更小的再找更大的这种路径,所以这样可能错过某些最优决策,这样不行。 于是我又想能不能从最大值出发往回搜&#xf…...

Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍

Jumpserver今日喜提160星,总星飙至2.6万!这个开源堡垒机有三大亮点:① 像哆啦A梦的口袋,支持多云服务器一站式管理;② 安全审计功能超硬核,操作记录随时可回放;③ 网页终端无需装插件&#xff0…...

5V 1A充电标准的由来与技术演进——从USB诞生到智能手机时代的电力革命

点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 一、起源:USB标准与早期电力传输需求 1. USB的诞生背景 1996年,由英特尔、微软、IBM等公司组成的USB-IF(USB Implementers Forum)发布了…...

驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程

🎥 视频教程请关注 B 站:“嵌入式 Jerry” 一、为什么要学习字符设备驱动? 在 Linux 驱动开发中,字符设备(Character Device)驱动 是最基础也是最常见的一类驱动类型。很多设备(如 LED、按键、…...

外网如何连接内网中的mysql数据库服务器

一、MySQL 产品简介 mysql是一款数据库产品,它主要用于存储、管理和检索数据,对用户的数据进行存储管理 二、运维人员遇到的问题 当内网服务器部署好mysql数据库后,外网如何安全的访问数据库进行增删改查,是运维人员遇到的一个…...

你的大模型服务如何压测:首 Token 延迟、并发与 QPS

写在前面 大型语言模型(LLM)API,特别是遵循 OpenAI 规范的接口(无论是 OpenAI 官方、Azure OpenAI,还是 DeepSeek、Moonshot 等众多兼容服务),已成为驱动下一代 AI 应用的核心引擎。然而,随着应用规模的扩大和用户量的增长,仅仅关注模型的功能是不够的,API 的性能表…...

4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!

大家好,我是牢鹅!每年的Q2季度是Google Play重要政策更新的时间节点,一般都伴随着重磅政策的更新,今年也不例外。4月10日,谷歌政策迎来2025年第二次更新,本次政策更新内容相较3月政策更新,不管是…...

第十四届蓝桥杯 2023 C/C++组 有奖问答

目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 蓝桥云课 有奖问答 思路&…...

【Redis】SpringDataRedis

Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互,并且支持不同的 Redis 客户端实现,如 Jedis 和 Lettuce。Spring Data Redis 会自动选择一个客户端,通常情况下,Spring Boot 默认使用 Lettuce 作为 Redis 客户端…...

XAttention

XAttention: Block Sparse Attention with Antidiagonal Scoring 革新Transformer推理的高效注意力机制资源​​ ​​论文链接​​:XAttention: Block Sparse Attention with Antidiagonal Scoring ​​代码开源​​:GitHub仓库 XAttention是韩松团队提…...

07.Python代码NumPy-排序sort,argsort,lexsort

07.Python代码NumPy-排序sort,argsort,lexsort 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是NumPy的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望…...

无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性

飞控程序需要运行在STM32等微控制器(MCU)的实时操作系统(RTOS)而非Linux等非实时操作系统(如通用Linux内核),主要原因在于实时性、资源占用、硬件适配性以及系统可靠性等方面的实质性差异。以下…...

Leetcode - 周赛446

目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题,代码如下: class Solution {public long calculateScore(String…...

Linux——系统安全及应用

目录 一:账号安全控制 1,基本安全措施 系统账号清理 密码安全控制 命令历史,自动注销 2,用户切换与提权 su命令的用法 PAM认证 3,sudo命令——提升执行权限 在配置文件/etc/sudoers中添加授权 通过sudo执行…...

随机面试--<二>

编译安装软件的流程 1-安装所需源代码 2-配置安装环境 3-进行相关设置 4-编译 5-安装 nginx安装新模块的流程 1-准备与原nginx版本相同的源码包,准备模块安装包 2-准备编译安装环境 3-配置参数 来源于nginx -V配置原模块 以及--add-module 增加模块 4-mak…...

LeetCode面试经典 150 题(Java题解)

一、数组、字符串 1、合并两个有序数组 从后往前比较,这样就不需要使用额外的空间 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int l mn-1, i m-1, j n-1;while(i > 0 && j > 0){if(nums1[i] > nums2[j])…...

【技术追踪】Differential Transformer(ICLR-2025)

Differential Transformer:大语言模型新架构, 提出了 differential attention mechanism,Transformer 又多了一个小 trick~ 论文:Differential Transformer 代码:https://github.com/microsoft/unilm/tree/master/Diff…...

报告系统状态的连续日期 mysql + pandas(连续值判断)

本题用到知识点:row_number(), union, date_sub(), to_timedelta()…… 目录 思路 pandas Mysql 思路 链接:报告系统状态的连续日期 思路: 判断连续性常用的一个方法,增量相同的两个列的差值是固定的。 让日期与行号 * 天数…...

【C++类和数据抽象】类的作用域

目录 一、类的作用域基本概念 1.1 什么是类的作用域 1.2 作用域层次体系 1.3 类作用域的特点 1.4 基本访问规则 二、访问控制三剑客 2.1 public:开放接口 2.2 private:数据封装 2.3 protected:继承通道 2.4 跨作用域访问示例 三…...

【区块链技术解析】从原理到实践的全链路指南

目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:创建简单区块链案例2:工作…...

LangGraph(一)——QuickStart样例中的第一步

目录 1. LangGraph简介2. 使用uv初始化项目3. 官网QuickStart——第一步:构建一个ChatBot(仅关注Graph的构建即可)3.1 配置大模型API_KEY3.2 初始化StateGraph3.3 添加chatbot node3.4 添加edges3.5 可视化StateGraph3.6 构建聊天循环 参考 1. LangGraph简介 LangGr…...

spring security +kotlin 实现oauth2.0 认证

基于OAuth 2.0的认证功能实现(Kotlin Spring Security) 以下是使用 AbstractAuthenticationProcessingFilter、AuthenticationProvider、AbstractAuthenticationToken 和 AuthenticationSuccessHandler 实现 OAuth 2.0 认证的完整代码设计。 1. 自定义…...

服务器监控软件推荐

以下是几款常用的服务器监控软件推荐,涵盖开源和商业方案,适用于不同规模和需求: 一、开源免费方案 Prometheus Grafana 特点:时序数据库 可视化仪表盘,支持多维度监控和告警。适用场景:云原生、Kubernet…...

在kali中安装AntSword(蚁剑)

步骤一、下载压缩包 源码:https://github.com/AntSwordProject/antSword,下载压缩包。 加载器:https://github.com/AntSwordProject/AntSword-Loader,根据系统选择压缩包(kali选择AntSword-Loader-v4.0.3-linux-x64&…...

【论文速递】2025年06周 (Robotics/Embodied AI/LLM)

目录 SMOLLM2:当Smol变得大 - 以数据为中心的小语言模型英文摘要中文摘要 OmniHuman-1:重新考虑一阶段的人类动画模型的扩展英文摘要中文摘要 S1:简单的测试时间缩放英文摘要中文摘要 直接对齐算法间的差异日渐模糊英文摘要中文摘要 VideoJAM…...

相机标定(输出相机内参和畸变参数)

相机标定 这里我用笔记本电脑自带的摄像头进行相机标定 仅作示例,实际工程中要用对应的摄像头进行标定 同时代码也要相应的修改,不过修改的主要是相机的初始化 粗略的说就是打开相机那部分要修改(依据实际情况相应修改) 最终的结果…...

Linux-编辑器的使用

实验三 Linux编辑器的使用 一、实验目的 学习使用vi编辑器建立、编辑和保存文本文件。 二、实验内容 1.进入和退出vi。 2.Vi不同工作模式的切换。 3.文本文件基本编辑(光标移动、文本输入、复制、移动、删除、查找、替换)。 4.文本文件的保存和备份。…...

Android开发中的复制和粘贴

Android 提供了一个强大的基于剪贴板的框架,用于复制和粘贴。它支持简单和复杂的数据类型,包括文本字符串、复杂数据结构、文本和二进制流数据,以及应用资源。简单的文本数据直接存储在剪贴板中,而复杂的数据则存储为引用&#xf…...

使用 inobounce 解决 iOS 皮筋效果导致的无法下拉刷新

使用 inobounce 解决 iOS 皮筋效果导致的无法下拉刷新 在移动端 H5 页面开发中,iOS 设备的“皮筋效果”(Rubber Band Effect)是一个常见的挑战。当用户在页面顶部下拉或底部上拉时,iOS 会触发整个页面的回弹效果,这不…...

特征选择与类不平衡处理

特征选择与类不平衡处理技术 一、特征选择方法 1. 过滤法(Filter Methods) 原理: 基于统计学方法或特征本身的分布特性独立于模型进行特征筛选,通过计算特征与目标变量的相关性或特征的发散性进行排序选择。 典型方法&#xf…...

24、ASP.NET⻚⾯之间传递值的⼏种⽅式

1. QueryString(查询字符串) 描述:通过 URL 参数传递数据,例如 Page2.aspx?id123。 适用场景:简单、非敏感数据,页面跳转时使用。 2. Session(会话) 描述:在服务器端…...

【扩展卡尔曼滤波器实际运用案例】

扩展卡尔曼滤波器 算法描述实际案例 算法描述 考虑离散时间非线性动态系统 { x k 1 f k ( x k , w k ) z k h k ( x k , v k ) \left\{\begin{matrix} x_{k1}f_{k}(x_k,w_k)\\ z_{k}h_{k}(x_k,v_k) \end{matrix}\right. {xk1​fk​(xk​,wk​)zk​hk​(xk​,vk​)​ 其中是…...

Centos9 安装 nginx 及配置

1. 安装nginx 安装依赖软件,安装之前可以看一下是否已经安装过以下软件,dnf list installed | grep zlib dnf install gcc-c dnf install zlib dnf install pcre pcre-devel dnf install openssl openssl-devel下载nginx,这里是下载到opt文…...