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

news/2024/3/4 12:12:01/文章来源:https://blog.csdn.net/q610098308/article/details/136097192

 相机的运动

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

 

移动

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

 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();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ldbm.cn/p/343338.html

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Molecular Cell | MD鉴定琥珀酸与SUCNR1的结合路径以及在SUCNR1上的两个高亲和力结合位点

Background SUCNR1&#xff08;GPR91&#xff09;是一种G蛋白偶联受体&#xff0c;能够感知代谢应激信号&#xff0c;如琥珀酸。这种受体在细胞修复、重塑以及炎症反应中发挥作用。尽管已经确定了SUCNR1的正位结合位点&#xff0c;但其分子激活机制尚不清楚。本研究旨在通过分子…

tab 切换类交互功能实现

tab切换类交互&#xff1a; 记录激活项&#xff08;整个对象/id/index)动态类型控制 下面以一个地址 tab 切换业务功能为例&#xff1a; <div class"text item" :class"{active : activeAddress.id item.id}" click"switchAddress(item)"…

C++ STL string类使用及实现详解

1. string简介 C语言中&#xff0c;可以用字符数组来存储字符串&#xff0c;如&#xff1a; char ch[] "hello world"; C中&#xff0c;可以使用string类对象来存储字符串&#xff0c;使用起来比C语言中的字符数组要方便得多&#xff0c;而且不用考虑容量的问题。…

Redis核心技术与实战【学习笔记】 - 24.Redis 脑裂

简述 所谓脑裂&#xff0c;就是指在主从集群中&#xff0c;同时有两个主节点&#xff0c;它们都能接收写请求。而脑裂最直接的影响就是客户端不知道该往哪个主节点写入数据&#xff0c;结果就是不同的客户端会往不同的主机诶点上写入数据。而且&#xff0c;严重的话&#xff0…

Android Studio 中使用 Gradle 配置多渠道打包 配置不同的渠道名称 配置不同的App名称 配置不同的Logo

废话 三种操作都是可以混合一起用的&#xff0c;本来也不是很难的事情&#xff0c;为了方便分别理解&#xff0c;这里我就分开处理了。 如果需要将打包出来的apk的名称自动命名成指定格式&#xff0c;也可以进行配置&#xff0c;我这里没这个需求&#xff0c;所以这里就不讨论了…

应用程序数字证书生成及签名步骤

1.非管理员权限切换到管理员用户下&#xff0c;再C盘找到C:\Program Files (x86)\Windows Kits&#xff0c;查看当前路径下是否包含生成数字签名的文件。 注意&#xff1a; 此时不同的电脑会有不同的路径&#xff08;如蓝色框&#xff09;&#xff0c;需要找到具备生成工具的相…

Spring是怎么解决循环依赖的

首先先解释一下什么叫循环依赖 循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在的,spring框架依据三级缓存已经解决了大部分的循环依赖 一级缓存:单例池,缓存已经经历了完整的…

【漏洞复现】狮子鱼CMS文件上传漏洞(image_upload.php)

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

re:从0开始的CSS学习之路 1. CSS语法规则

0. 写在前面 现在大模型卷的飞起&#xff0c;感觉做页面的活可能以后就不需要人来做了&#xff0c;不知道现在还有没有学前端的必要。。。 1. HTML和CSS结合的三种方式 在HTML中&#xff0c;我们强调HTML并不关心显示样式&#xff0c;样式是CSS的工作&#xff0c;现在就轮到C…

disql备份还原

disql备份还原 前言 本文档根据官方文档&#xff0c;进行整理。 一、概述 在 disql 工具中使用 BACKUP 语句你可以备份整个数据库。通常情况下&#xff0c;在数据库实例配置归档后输入以下语句即可备份数据库&#xff1a; BACKUP DATABASE BACKUPSET db_bak_01;语句执行完…

Spring基础 - Spring简单例子引入Spring要点

Spring基础 - Spring简单例子引入Spring要点 设计一个Spring的Hello World 设计一个查询用户的案例的两个需求&#xff0c;来看Spring框架帮我们简化了什么开发工作 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"htt…

x-cmd pkg | httpx - 为 Python 设计的下一代 HTTP 客户端库

目录 简介首次用户功能特点进一步探索 简介 HTTPX 是一个为 Python 设计的下一代 HTTP 客户端库&#xff0c;由 Tom Christie 创建。它提供了同步和异步的 API&#xff0c;并支持 HTTP/1.1 和 HTTP/2 协议。与 Requests 库类似&#xff0c;但增加了对异步请求的支持和 HTTP/2 …

《UE5_C++多人TPS完整教程》学习笔记9 ——《P10 创建会话(Creating A Session)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P10 创建会话&#xff08;Creating A Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

拟合案例1:matlab积分函数拟合详细步骤及源码

本文介绍一下基于matlab实现积分函数拟合的过程。采用的工具是lsqcurvefit和nlinfit两个函数工具。关于包含积分运算的函数,这里可以分为两大类啊。我们用具体的案例来展示:一种是积分运算中不包含这个自变量,如下图的第一个公式,也就是说它这个积分运算只有R和Q这两个待定…

基于图像掩膜和深度学习的花生豆分拣(附源码)

目录 项目介绍 图像分类网络构建 处理花生豆图片完成预测 项目介绍 这是一个使用图像掩膜技术和深度学习技术实现的一个花生豆分拣系统 我们有大量的花生豆图片&#xff0c;并以及打好了标签&#xff0c;可以看一下目录结构和几张具体的图片 同时我们也有几张大的图片&…

《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)

文章目录 6.1 使用 CSS 变量进行设计&#xff1a;魔法配方的调配6.1.1 基础知识6.1.2 重点案例&#xff1a;创建可定制的主题6.1.3 拓展案例 1&#xff1a;响应式字体大小6.1.4 拓展案例 2&#xff1a;使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…

【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总

【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总 前言请看此正文预训练 Pre-Training无监督学习 unsupervised learning概念&#xff1a;标签PCA 主成分分析&#xff08;Principal Component Analysis&#xff09;降维算法LSA 潜在语义分析&#xff08;…

Github 2024-02-07 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-07统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目2TypeScript项目2Python项目2Ruby项目1HTML项目1NASL项目1Go项目1C项目1Svelte项目1C项目1 React Nat…

【MySQL】——数值函数的学习

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Z1fAnfrxGD7I5gqp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

阿里云带宽计费模式怎么选?如何收费的?

阿里云服务器带宽计费模式分为“按固定带宽”和“按使用流量”&#xff0c;有什么区别&#xff1f;按固定带宽是指直接购买多少M带宽&#xff0c;比如1M、5M、10M、100M等&#xff0c;阿里云直接分配用户所购买的带宽值&#xff0c;根据带宽大小先付费再使用&#xff1b;按使用…