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

VTK 三维场景的基本要素(相机) vtkCamera 相机的运动

 相机的运动

当物体在处于静止位置时,相机可以在物体周围移动,摄取不同角度的图像 

 

移动

  移动分为相机的移动,和相机焦点的移动;移动改变了相机相对焦点的位置,离焦点更近或者更远;这样就会改变被渲染的物体在视野中的部分;
  相机的移动可以有水平上的移动,垂直方向的移动,前后的移动;

 vtkCamera::Dolly(double value);将相机与焦点的距离除以给定的推拉值。使用大于1的值向焦点推拉,
使用小于1的值远离焦点推拉。(缩放)

旋转


相机的旋转:是相机在以焦点为中心的圆球面上移动,因为相机可以水平旋转和垂直旋转;水平旋转就是在相机围绕球心过朝上方向这个轴旋转,也可以说是在球面上的维度进行旋转,但相机的镜头始终指向焦点;水平旋转就是在相机绕球面上的经线向上或者向下旋转;

围绕投影方向旋转相机。这将使摄影机绕其轴旋转:

 vtkCamera::Roll(double angle);

  围绕以焦点为中心的视图向上矢量旋转相机

请注意,视图向上矢量是通过SetViewUp设置的,不一定垂直于投影方向。结果是相机的水平旋转(纬度)

  vtkCamera::Azimuth(double angle);

    使用焦点作为旋转中心,围绕投影方向的负值与视图向上向量的叉积旋转相机。结果是场景的垂直旋转(经度)

    vtkCamera::Elevation(double angle);

    使用相机的位置作为旋转中心,围绕视图向上矢量旋转焦点

请注意,视图向上矢量是通过SetViewUp设置的,不一定垂直于投影方向。结果是场景的水平旋转(纬度)。

 vtkCamera::Yaw(double angle);

    使用相机的位置作为旋转中心,围绕视图向上矢量和投影方向的叉积旋转焦点。

结果是摄影机垂直旋转(经度)。

vtkCamera::Pitch(double angle);

缩放:

    vtkCamera::Zoom(double factor);在透视模式下,将视角减小指定的因子。在平行模式下,将平行比例减小指定的因子。
值大于1表示放大,
值小于1表示缩小@注意:当UseExplicitProjectionTransformMatrix为true时,
将忽略此设置。

    重置相机参数 :
 

void ResetCamera();

视频:

相机的旋转:

vtkCameraTest

视频代码:

注意这个只有初始时,旋转是对的;一但旋转后,再旋转可能是错的;

#pragma once
//#include "vtk_include.h"
#include <vtkAppendFilter.h>
#include <vtkCamera.h>
#include <vtkCellArray.h>
#include <vtkConeSource.h>
#include <vtkContourFilter.h>
#include <vtkCubeSource.h>
#include <vtkDataSetMapper.h>
#include <vtkImplicitModeller.h>
#include <vtkLODActor.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkRotationalExtrusionFilter.h>
#include <vtkSphereSource.h>
#include <vtkTextActor.h>
#include <vtkTextProperty.h>
#include <vtkTransform.h>
#include <vtkTransformFilter.h>
#include <vtkTransformPolyDataFilter.h>
#include <vtkWarpTo.h>
#include <algorithm>
#include <vtkInteractorStyleTrackballCamera.h>
#include <array>#include<stdio.h>
#include<iostream>
using namespace std;class Normal3DCameraStyle : public vtkInteractorStyleTrackballCamera
{
public:static Normal3DCameraStyle* New();vtkTypeMacro(Normal3DCameraStyle, vtkInteractorStyleTrackballCamera);//virtual void OnLeftButtonDown(void);//virtual void OnLeftButtonUp(void);//virtual void OnRightButtonDown(void);//virtual void OnRightButtonUp(void);//virtual void OnMiddleButtonDown(void);//virtual void OnMiddleButtonUp(void);//virtual void OnMouseWheelForward(void);//virtual void OnMouseWheelBackward(void);//virtual void OnMouseMove(void);//	/**//* OnChar is triggered when an ASCII key is pressed. Some basic key presses//* are handled here ('q' for Quit, 'p' for Pick, etc)//*///virtual void OnChar();OnKeyDown is triggered by pressing any key (identical to OnKeyPress()).An empty implementation is provided. The behavior of this function shouldbe specified in the subclass.//virtual void OnKeyDown();OnKeyUp is triggered by releaseing any key (identical to OnKeyRelease()).An empty implementation is provided. The behavior of this function shouldbe specified in the subclass.//virtual void OnKeyUp();OnKeyPress is triggered by pressing any key (identical to OnKeyDown()).An empty implementation is provided. The behavior of this function shouldbe specified in the subclass.//virtual void OnKeyPress();OnKeyRelease is triggered by pressing any key (identical to OnKeyUp()).An empty implementation is provided. The behavior of this function shouldbe specified in the subclass.//virtual void OnKeyRelease();void  OnKeyPress(){switch (this->Interactor->GetKeyCode()){case 'a':case 'A':cout << "A " << endl;m_Camera->Azimuth(1);break;case 'b':case 'B':m_Camera->Roll(1);cout << "b " << endl;break;case 'v':case 'V':m_Camera->Elevation(1);cout << "v " << endl;break;}m_RenderWindows->Render();}public:vtkCamera * m_Camera;vtkRenderWindow* m_RenderWindows;
};vtkStandardNewMacro(Normal3DCameraStyle);//必须加!!!!void main(){vtkNew<vtkNamedColors> colors;// Set the colors.std::array<unsigned char, 4> azArrowColor{ {255, 77, 77} };colors->SetColor("AzimuthArrowColor", azArrowColor.data());std::array<unsigned char, 4> elevArrowColor{ {77, 255, 77} };colors->SetColor("ElevationArrowColor", elevArrowColor.data());std::array<unsigned char, 4> rollArrowColor{ {255, 255, 77} };colors->SetColor("RollArrowColor", rollArrowColor.data());std::array<unsigned char, 4> spikeColor{ {255, 77, 255} };colors->SetColor("SpikeColor", spikeColor.data());// Set the background color.std::array<unsigned char, 4> bkg{ {26, 51, 102} };colors->SetColor("BkgColor", bkg.data());// Create the RenderWindow, Renderer and both ActorsvtkNew<vtkRenderer> ren1;vtkNew<vtkRenderWindow> renWin;renWin->AddRenderer(ren1);vtkNew<vtkRenderWindowInteractor> iren;iren->SetRenderWindow(renWin);// create a camera modelvtkNew<vtkConeSource> camCS;camCS->SetHeight(1.5);camCS->SetResolution(12);camCS->SetRadius(0.4);vtkNew<vtkCubeSource> camCBS;camCBS->SetXLength(1.5);camCBS->SetZLength(0.8);camCBS->SetCenter(0.4, 0, 0);vtkNew<vtkAppendFilter> camAPD;camAPD->AddInputConnection(camCS->GetOutputPort());camAPD->AddInputConnection(camCBS->GetOutputPort());vtkNew<vtkDataSetMapper> camMapper;camMapper->SetInputConnection(camAPD->GetOutputPort());vtkNew<vtkLODActor> camActor;camActor->SetMapper(camMapper);camActor->SetScale(2, 2, 2);// draw the arrowsvtkNew<vtkPolyData> pd;vtkNew<vtkCellArray> ca;vtkNew<vtkPoints> fp;fp->InsertNextPoint(0, 1, 0);fp->InsertNextPoint(8, 1, 0);fp->InsertNextPoint(8, 2, 0);fp->InsertNextPoint(10, 0.01, 0);fp->InsertNextPoint(8, -2, 0);fp->InsertNextPoint(8, -1, 0);fp->InsertNextPoint(0, -1, 0);ca->InsertNextCell(7);ca->InsertCellPoint(0);ca->InsertCellPoint(1);ca->InsertCellPoint(2);ca->InsertCellPoint(3);ca->InsertCellPoint(4);ca->InsertCellPoint(5);ca->InsertCellPoint(6);pd->SetPoints(fp);pd->SetPolys(ca);vtkNew<vtkPolyData> pd2;vtkNew<vtkCellArray> ca2;vtkNew<vtkPoints> fp2;fp2->InsertNextPoint(0, 1, 0);fp2->InsertNextPoint(8, 1, 0);fp2->InsertNextPoint(8, 2, 0);fp2->InsertNextPoint(10, 0.01, 0);ca2->InsertNextCell(4);ca2->InsertCellPoint(0);ca2->InsertCellPoint(1);ca2->InsertCellPoint(2);ca2->InsertCellPoint(3);pd2->SetPoints(fp2);pd2->SetLines(ca2);vtkNew<vtkImplicitModeller> arrowIM;arrowIM->SetInputData(pd);arrowIM->SetSampleDimensions(50, 20, 8);vtkNew<vtkContourFilter> arrowCF;arrowCF->SetInputConnection(arrowIM->GetOutputPort());arrowCF->SetValue(0, 0.2);vtkNew<vtkWarpTo> arrowWT;arrowWT->SetInputConnection(arrowCF->GetOutputPort());arrowWT->SetPosition(5, 0, 5);arrowWT->SetScaleFactor(0.85);arrowWT->AbsoluteOn();vtkNew<vtkTransform> arrowT;arrowT->RotateY(60);arrowT->Translate(-1.33198, 0, -1.479);arrowT->Scale(1, 0.5, 1);vtkNew<vtkTransformFilter> arrowTF;arrowTF->SetInputConnection(arrowWT->GetOutputPort());arrowTF->SetTransform(arrowT);vtkNew<vtkDataSetMapper> arrowMapper;arrowMapper->SetInputConnection(arrowTF->GetOutputPort());arrowMapper->ScalarVisibilityOff();// draw the azimuth arrowsvtkNew<vtkLODActor> a1Actor;a1Actor->SetMapper(arrowMapper);a1Actor->RotateZ(180);a1Actor->SetPosition(1, 0, -1);a1Actor->GetProperty()->SetColor(colors->GetColor3d("AzimuthArrowColor").GetData());a1Actor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());a1Actor->GetProperty()->SetSpecular(0.3);a1Actor->GetProperty()->SetSpecularPower(20);a1Actor->GetProperty()->SetAmbient(0.2);a1Actor->GetProperty()->SetDiffuse(0.8);vtkNew<vtkLODActor> a2Actor;a2Actor->SetMapper(arrowMapper);a2Actor->RotateZ(180);a2Actor->RotateX(180);a2Actor->SetPosition(1, 0, 1);a2Actor->GetProperty()->SetColor(colors->GetColor3d("AzimuthArrowColor").GetData());a2Actor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());a2Actor->GetProperty()->SetSpecular(0.3);a2Actor->GetProperty()->SetSpecularPower(20);a2Actor->GetProperty()->SetAmbient(0.2);a2Actor->GetProperty()->SetDiffuse(0.8);// draw the elevation arrowsvtkNew<vtkLODActor> a3Actor;a3Actor->SetMapper(arrowMapper);a3Actor->RotateZ(180);a3Actor->RotateX(90);a3Actor->SetPosition(1, -1, 0);a3Actor->GetProperty()->SetColor(colors->GetColor3d("ElevationArrowColor").GetData());a3Actor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());a3Actor->GetProperty()->SetSpecular(0.3);a3Actor->GetProperty()->SetSpecularPower(20);a3Actor->GetProperty()->SetAmbient(0.2);a3Actor->GetProperty()->SetDiffuse(0.8);vtkNew<vtkLODActor> a4Actor;a4Actor->SetMapper(arrowMapper);a4Actor->RotateZ(180);a4Actor->RotateX(-90);a4Actor->SetPosition(1, 1, 0);a4Actor->GetProperty()->SetColor(colors->GetColor3d("ElevationArrowColor").GetData());a4Actor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());a4Actor->GetProperty()->SetSpecular(0.3);a4Actor->GetProperty()->SetSpecularPower(20);a4Actor->GetProperty()->SetAmbient(0.2);a4Actor->GetProperty()->SetDiffuse(0.8);// draw the DOPvtkNew<vtkTransform> arrowT2;arrowT2->Scale(1, 0.6, 1);arrowT2->RotateY(90);vtkNew<vtkTransformPolyDataFilter> arrowTF2;arrowTF2->SetInputData(pd2);arrowTF2->SetTransform(arrowT2);vtkNew<vtkRotationalExtrusionFilter> arrowREF;arrowREF->SetInputConnection(arrowTF2->GetOutputPort());arrowREF->CappingOff();arrowREF->SetResolution(30);vtkNew<vtkPolyDataMapper> spikeMapper;spikeMapper->SetInputConnection(arrowREF->GetOutputPort());vtkNew<vtkLODActor> a5Actor;a5Actor->SetMapper(spikeMapper);a5Actor->SetScale(.3, .3, .6);a5Actor->RotateY(90);a5Actor->SetPosition(-2, 0, 0);a5Actor->GetProperty()->SetColor(colors->GetColor3d("SpikeColor").GetData());a5Actor->GetProperty()->SetAmbient(0.2);a5Actor->GetProperty()->SetDiffuse(0.8);// focal pointvtkNew<vtkSphereSource> fps;fps->SetRadius(0.5);vtkNew<vtkPolyDataMapper> fpMapper;fpMapper->SetInputConnection(fps->GetOutputPort());vtkNew<vtkLODActor> fpActor;fpActor->SetMapper(fpMapper);fpActor->SetPosition(-9, 0, 0);fpActor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());fpActor->GetProperty()->SetSpecular(0.3);fpActor->GetProperty()->SetAmbient(0.2);fpActor->GetProperty()->SetDiffuse(0.8);fpActor->GetProperty()->SetSpecularPower(20);// create the roll arrowsvtkNew<vtkWarpTo> arrowWT2;arrowWT2->SetInputConnection(arrowCF->GetOutputPort());arrowWT2->SetPosition(5, 0, 2.5);arrowWT2->SetScaleFactor(0.95);arrowWT2->AbsoluteOn();vtkNew<vtkTransform> arrowT3;arrowT3->Translate(-2.50358, 0, -1.70408);arrowT3->Scale(0.5, 0.3, 1);vtkNew<vtkTransformFilter> arrowTF3;arrowTF3->SetInputConnection(arrowWT2->GetOutputPort());arrowTF3->SetTransform(arrowT3);vtkNew<vtkDataSetMapper> arrowMapper2;arrowMapper2->SetInputConnection(arrowTF3->GetOutputPort());arrowMapper2->ScalarVisibilityOff();// draw the roll arrowsvtkNew<vtkLODActor> a6Actor;a6Actor->SetMapper(arrowMapper2);a6Actor->RotateZ(90);a6Actor->SetPosition(-4, 0, 0);a6Actor->SetScale(1.5, 1.5, 1.5);a6Actor->GetProperty()->SetColor(colors->GetColor3d("RollArrowColor").GetData());a6Actor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());a6Actor->GetProperty()->SetSpecular(0.3);a6Actor->GetProperty()->SetSpecularPower(20);a6Actor->GetProperty()->SetAmbient(0.2);a6Actor->GetProperty()->SetDiffuse(0.8);// Add the actors to the renderer, set the background and sizeren1->AddActor(camActor);ren1->AddActor(a1Actor);ren1->AddActor(a2Actor);ren1->AddActor(a3Actor);ren1->AddActor(a4Actor);ren1->AddActor(a5Actor);ren1->AddActor(a6Actor);ren1->AddActor(fpActor);ren1->SetBackground(colors->GetColor3d("BkgColor").GetData());ren1->SetBackground(colors->GetColor3d("SlateGray").GetData());renWin->SetSize(640, 480);renWin->SetWindowName("CameraModel1");// render the imagevtkCamera* cam1 = (ren1->GetActiveCamera());ren1->ResetCamera();cam1->Azimuth(150);cam1->Elevation(30);cam1->Dolly(1.5);ren1->ResetCameraClippingRange();// Create a TextActor for azimuth  (a1 and a2 actor's color)vtkNew<vtkTextActor> text;text->SetInput("Azimuth");vtkTextProperty* tprop = text->GetTextProperty();tprop->SetFontFamilyToArial();tprop->ShadowOff();tprop->SetLineSpacing(1.0);tprop->SetFontSize(36);tprop->SetColor(a1Actor->GetProperty()->GetColor());text->SetDisplayPosition(20, 50);ren1->AddActor2D(text);// Create a TextActor for elevation  (a3 and a4 actor's color)vtkNew<vtkTextActor> text2;text2->SetInput("Elevation");tprop = text2->GetTextProperty();tprop->SetFontFamilyToArial();tprop->ShadowOff();tprop->SetLineSpacing(1.0);tprop->SetFontSize(36);tprop->SetColor(a3Actor->GetProperty()->GetColor());text2->SetDisplayPosition(20, 100);ren1->AddActor2D(text2);// Create a TextActor for roll (a6 actor's color)vtkNew<vtkTextActor> text3;text3->SetInput("Roll");tprop = text3->GetTextProperty();tprop->SetFontFamilyToArial();tprop->ShadowOff();tprop->SetLineSpacing(1.0);tprop->SetFontSize(36);tprop->SetColor(a6Actor->GetProperty()->GetColor());text3->SetDisplayPosition(20, 150);ren1->AddActor2D(text3);vtkNew<Normal3DCameraStyle> style;cam1->SetFocalPoint(fpActor->GetPosition());cam1->SetPosition(camActor->GetPosition());style->m_Camera = cam1;style->m_RenderWindows = renWin;iren->SetInteractorStyle(style);renWin->Render();iren->Initialize();iren->Start();}

相关文章:

VTK 三维场景的基本要素(相机) vtkCamera 相机的运动

相机的运动 当物体在处于静止位置时&#xff0c;相机可以在物体周围移动&#xff0c;摄取不同角度的图像 移动 移动分为相机的移动&#xff0c;和相机焦点的移动&#xff1b;移动改变了相机相对焦点的位置&#xff0c;离焦点更近或者更远&#xff1b;这样就会改变被渲染的物体…...

C++ //练习 6.53 说明下列每组声明中的第二条语句会产生什么影响,并指出哪些不合法(如果有的话)。

C Primer&#xff08;第5版&#xff09; 练习 6.53 练习 6.53 说明下列每组声明中的第二条语句会产生什么影响&#xff0c;并指出哪些不合法&#xff08;如果有的话&#xff09;。 (a) int calc(int &, int &);int calc(const int &, const int &); (b) int …...

缓慢变化维 常用的处理方法

什么是缓慢变化维 维度 在数仓中&#xff0c;表往往会被划分成两种类型&#xff0c;一种是 事实表&#xff0c;另一种是维度表&#xff0c;举个例子&#xff0c;比如说&#xff1a; ❝ 2024年2月14日&#xff0c;健鑫在12306上买了两张火车票&#xff0c;每张火车票400元&…...

free pascal:fpwebview 组件通过JSBridge调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr &#xff0c;编写 js_bind_speak.lpr 如下&#xff0c;通过JSBridge调用本机…...

C语言静态库深入剖析

在C语言编程实践中&#xff0c;库是代码复用和模块化开发的重要基础结构。静态库作为其中一种主要的库类型&#xff0c;其内容在编译链接阶段即被完整地嵌入到最终生成的可执行文件中&#xff0c;从而使得程序在运行时无需外部依赖。本篇博客将系统性、详细地剖析C语言静态库的…...

A股上市以来涨幅排行榜

一、统计数据说明 1. 涨幅排行榜是根据股价的后复权价格计算的&#xff0c;该价格考虑了分红送股拆股等事件对股价的影响&#xff0c;相当于是分红再投资的股价。 2. 年化投资收益率&#xff0c;是根据IPO收盘价至今涨幅计算的复合年化收益率。例如&#xff0c;假设一个股票上…...

鸿蒙开发系列教程(十八)--页面内动画(1)

页面内的动画 显示动画 语法&#xff1a;animateTo(value: AnimateParam, event: () > void): void 第一个参数指定动画参数 第二个参数为动画的闭包函数。 如&#xff1a;animateTo({ duration: 1000, curve: Curve.EaseInOut }, () > {动画代码}&#xff09; dura…...

Web基础01-HTML+CSS

目录 一、HTML 1.概述 2.html结构解析 3.HTML标签分类 4.HTML标签关系 5.HTML空元素 6.HTML属性 7.常用标签 &#xff08;1&#xff09;HTML标签 &#xff08;2&#xff09;标题标签 &#xff08;3&#xff09;换/折行标签 &#xff08;4&#xff09;段落标签 &am…...

Linux命令行全景指南:从入门到实践,掌握命令行的力量

目录 知识梳理思维导图&#xff1a; linux命令入门 为什么要学Linux命令 什么是终端 什么是命令 关于Linux命令的语法 tab键补全 关于命令提示符 特殊目录 常见重要目录 /opt /home /root /etc /var/log/ man命令 shutdown命令 history命令 which命令 bash…...

蓝桥杯嵌入式第11届真题(完成) STM32G431

蓝桥杯嵌入式第11届真题(完成) STM32G431 题目 代码 程序和之前的大同小异&#xff0c;不过多解释 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief :…...

ChatGPT高效提问—prompt实践(教师助手)

ChatGPT高效提问—prompt实践&#xff08;教师助手&#xff09; 下面来看看ChatGPT在教育领域有什么用途。 首先设定ChatGPT的角色为高中教师助手。 输入prompt: ChatGPT输出&#xff1a; ​ 教师助手的角色已经设置完成。下面通过几种不同的情景演示如何使用。 1.1.1 制定…...

AI绘画作品的展示和变现-2

4.7 制作红包封面 中国的节日和传统文化元素仍然可以成为创作者们的创作灵感&#xff0c;创造出更多的变现机会。比如元宵节&#xff0c;可以制作大型元宵图案&#xff0c;进行引流并卖出元宵。 而春分、谷雨等节气也可以成为创作的灵感来源&#xff0c;创作出与之相关的图案&…...

Linux---网络套接字

端口号 端口号 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用 在公网上&#xff0c;IP地址能表示唯一的一台主机&…...

前端vue 数字 字符串 丢失精度问题

1.问题 后端返回的数据 是这样的 一个字符串类型的数据 前端要想显示这个 肯定需要使用Json.parse() 转换一下 但是 目前有一个问题 转换的确可以 showId:1206381711026823172 有一个这样的字段 转换了以后 发现 字段成了1206381711026823200 精度直接丢了 原本的数据…...

智能汽车行业产业研究报告:4D成像毫米波雷达—自动驾驶最佳辅助

今天分享的是智能汽车系列深度研究报告&#xff1a;《智能汽车行业产业研究报告&#xff1a;4D成像毫米波雷达—自动驾驶最佳辅助》。 &#xff08;报告出品方&#xff1a;开源证券&#xff09; 报告共计&#xff1a;43页 视觉感知最佳辅助——4D 成像毫米波雷达 感知是自动…...

docker 3.1 镜像

docker 3.1 镜像命令 拉取镜像 docker pull debian #从 Docker Hub 拉取名为 debian 的镜像docker pull hello-world #从 Docker Hub 拉入名为 hello-world 的镜像‍ 运行镜像/容器 docker run hello-world ‍ 查看本地所有的镜像 docker images​​ 容器生成镜像…...

如何在极低成本硬件上落地人工智能算法 —— 分布式AI

一、背景 分布式AI的发展前景非常广阔&#xff0c;随着5G、6G等高速网络通信技术的普及和边缘计算能力的提升&#xff0c;以及AI算法和硬件的不断优化进步&#xff0c;分布式AI将在多个领域展现出强大的应用潜力和市场价值&#xff1a; 1. **物联网&#xff08;IoT&#xff0…...

机器学习:ROC曲线笔记

ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;是一种用于评估二分类模型性能的图形化工具&#xff0c;主要用于展示在不同阈值&#xff08;Threshold&#xff09;下模型的真阳性率&#xff08;True Positive Rate&#xff0c;TPR&#xff09;和假阳…...

【lesson54】线程互斥

文章目录 线程互斥 线程互斥 互斥量mutex 大部分情况&#xff0c;线程使用的数据都是局部变量&#xff0c;变量的地址空间在线程栈空间内&#xff0c;这种情况&#xff0c;变量归属单个线程&#xff0c;其他线程无法获得这种变量。但有时候&#xff0c;很多变量都需要在线程间…...

Android14音频进阶:MediaPlayerService如何启动AudioTrack 上篇(五十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...