FlyControls 是 THREE.js 中用于实现飞行控制的类,它用于控制摄像机在三维空间中的飞行。

在这里插入图片描述

demo演示地址

FlyControls 是 THREE.js 中用于实现飞行控制的类,它用于控制摄像机在三维空间中的飞行。

入参:

  1. object:摄像机对象,即要控制的摄像机。
  2. domElement:用于接收用户输入事件的 HTML 元素,通常是渲染器的 DOM 元素。

出参:

FlyControls 类本身没有直接返回出参,但通过修改传入的摄像机对象的位置和方向,从而影响场景中的摄像机视角。

使用示例:

// 初始化摄像机、控制器、场景和渲染器
function init() {camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);controls = new FlyControls(camera, renderer.domElement);scene = new THREE.Scene();renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);// 设置摄像机初始位置camera.position.set(0, 0, 5);// 添加一个立方体到场景中const geometry = new THREE.BoxGeometry();const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);scene.add(cube);// 渲染场景animate();
}// 动画循环
function animate() {requestAnimationFrame(animate);// 更新飞行控制器controls.update();// 渲染场景renderer.render(scene, camera);
}

在这个示例中,我们创建了一个 FlyControls 实例,并将摄像机和渲染器的 DOM 元素传递给它。然后在动画循环中,我们调用 controls.update() 来更新控制器状态,以响应用户的输入事件,并通过 renderer.render() 渲染场景。

import * as THREE from 'three'; // 导入主 THREE.js 库import Stats from 'three/addons/libs/stats.module.js'; // 导入性能监控模块 Statsimport { FlyControls } from 'three/addons/controls/FlyControls.js'; // 导入飞行控制器 FlyControls
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; // 导入后期处理特效组件 EffectComposer
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; // 导入渲染通道 RenderPass
import { FilmPass } from 'three/addons/postprocessing/FilmPass.js'; // 导入胶片特效 FilmPass
import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; // 导入输出通道 OutputPass// 行星及其环境属性的常量定义
const radius = 6371; // 地球半径
const tilt = 0.41; // 行星倾斜角度
const rotationSpeed = 0.02; // 行星旋转速度const cloudsScale = 1.005; // 云层纹理比例
const moonScale = 0.23; // 月球比例const MARGIN = 0; // 场景边距
let SCREEN_HEIGHT = window.innerHeight - MARGIN * 2; // 计算屏幕高度
let SCREEN_WIDTH = window.innerWidth; // 计算屏幕宽度let camera, controls, scene, renderer, stats; // 摄像机、控制器、场景、渲染器和性能监控模块的全局变量声明
let geometry, meshPlanet, meshClouds, meshMoon; // 几何体和代表行星、云层和月球的网格变量声明
let dirLight; // 光源的声明let composer; // 后期处理特效的 Composer 声明const textureLoader = new THREE.TextureLoader(); // 创建纹理加载器实例let d, dPlanet, dMoon; // 距离计算的变量声明
const dMoonVec = new THREE.Vector3(); // 月球距离计算的向量const clock = new THREE.Clock(); // 创建时钟用于计时

创建透视摄像机,初始化场景

function init() {// 创建透视摄像机camera = new THREE.PerspectiveCamera(25, SCREEN_WIDTH / SCREEN_HEIGHT, 50, 1e7);camera.position.z = radius * 5; // 设置摄像机位置scene = new THREE.Scene(); // 创建场景scene.fog = new THREE.FogExp2(0x000000, 0.00000025); // 添加雾效dirLight = new THREE.DirectionalLight(0xffffff, 3); // 创建定向光源dirLight.position.set(-1, 0, 1).normalize(); // 设置光源位置scene.add(dirLight); // 将光源添加到场景中// 创建具有法线贴图的材质const materialNormalMap = new THREE.MeshPhongMaterial({specular: 0x7c7c7c, // 设置镜面高光颜色shininess: 15, // 设置光泽度map: textureLoader.load('textures/planets/earth_atmos_2048.jpg'), // 设置漫反射贴图specularMap: textureLoader.load('textures/planets/earth_specular_2048.jpg'), // 设置镜面高光贴图normalMap: textureLoader.load('textures/planets/earth_normal_2048.jpg'), // 设置法线贴图normalScale: new THREE.Vector2(0.85, -0.85) // 设置法线贴图缩放});materialNormalMap.map.colorSpace = THREE.SRGBColorSpace; // 设置贴图颜色空间// 创建行星geometry = new THREE.SphereGeometry(radius, 100, 50);meshPlanet = new THREE.Mesh(geometry, materialNormalMap);meshPlanet.rotation.y = 0;meshPlanet.rotation.z = tilt;scene.add(meshPlanet);// 创建云层const materialClouds = new THREE.MeshLambertMaterial({map: textureLoader.load('textures/planets/earth_clouds_1024.png'), // 设置云层贴图transparent: true // 开启透明});materialClouds.map.colorSpace = THREE.SRGBColorSpace; // 设置贴图颜色空间meshClouds = new THREE.Mesh(geometry, materialClouds);meshClouds.scale.set(cloudsScale, cloudsScale, cloudsScale);meshClouds.rotation.z = tilt;scene.add(meshClouds);// 创建月球const materialMoon = new THREE.MeshPhongMaterial({map: textureLoader.load('textures/planets/moon_1024.jpg') // 设置月球贴图});materialMoon.map.colorSpace = THREE.SRGBColorSpace; // 设置贴图颜色空间meshMoon = new THREE.Mesh(geometry, materialMoon);meshMoon.position.set(radius * 5, 0, 0);meshMoon.scale.set(moonScale, moonScale, moonScale);scene.add(meshMoon);// 创建星星const r = radius,starsGeometry = [new THREE.BufferGeometry(), new THREE.BufferGeometry()];const vertices1 = [];const vertices2 = [];const vertex = new THREE.Vector3();for (let i = 0; i < 250; i++) {vertex.x = Math.random() * 2 - 1;vertex.y = Math.random() * 2 - 1;vertex.z = Math.random() * 2 - 1;vertex.multiplyScalar(r);vertices1.push(vertex.x, vertex.y, vertex.z);}for (let i = 0; i < 1500; i++) {vertex.x = Math.random() * 2 - 1;vertex.y = Math.random() * 2 - 1;vertex.z = Math.random() * 2 - 1;vertex.multiplyScalar(r);vertices2.push(vertex.x, vertex.y, vertex.z);}starsGeometry[0].setAttribute('position', new THREE.Float32BufferAttribute(vertices1, 3));starsGeometry[1].setAttribute('position', new THREE.Float32BufferAttribute(vertices2, 3));const starsMaterials = [new THREE.PointsMaterial({ color: 0x9c9c9c, size: 2, sizeAttenuation: false }),new THREE.PointsMaterial({ color: 0x9c9c9c, size: 1, sizeAttenuation: false }),new THREE.PointsMaterial({ color: 0x7c7c7c, size: 2, sizeAttenuation: false }),new THREE.PointsMaterial({ color: 0x838383, size: 1, sizeAttenuation: false }),new THREE.PointsMaterial({ color: 0x5a5a5a, size: 2, sizeAttenuation: false }),new THREE.PointsMaterial({ color: 0x5a5a5a, size: 1, sizeAttenuation: false })];for (let i = 10; i < 30; i++) {const stars = new THREE.Points(starsGeometry[i % 2], starsMaterials[i % 6]);stars.rotation.x = Math.random() * 6;stars.rotation.y = Math.random() * 6;stars.rotation.z = Math.random() * 6;stars.scale.setScalar(i * 10);stars.matrixAutoUpdate = false;stars.updateMatrix();scene.add(stars);}// 创建 WebGL 渲染器renderer = new THREE.WebGLRenderer({ antialias: true });renderer.setPixelRatio(window.devicePixelRatio);renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);document.body.appendChild(renderer.domElement);// 创建飞行控制器controls = new FlyControls(camera, renderer.domElement);controls.movementSpeed = 1000;controls.domElement = renderer.domElement;controls.rollSpeed = Math.PI / 24;controls.autoForward = false;controls.dragToLook = false;// 创建性能监控模块stats = new Stats();document.body.appendChild(stats.dom);window.addEventListener('resize', onWindowResize); // 添加窗口调整事件监听器// 添加后期处理特效const renderModel = new RenderPass(scene, camera);const effectFilm = new FilmPass(0.35);const outputPass = new OutputPass();composer = new EffectComposer(renderer);composer.addPass(renderModel);composer.addPass(effectFilm);composer.addPass(outputPass);
}

更新屏幕高度和宽度

function onWindowResize() {// 更新屏幕高度和宽度SCREEN_HEIGHT = window.innerHeight;SCREEN_WIDTH = window.innerWidth;// 更新摄像机的纵横比并更新投影矩阵camera.aspect = SCREEN_WIDTH / SCREEN_HEIGHT;camera.updateProjectionMatrix();// 更新渲染器和后期处理特效组件的尺寸renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);composer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
}function animate() {// 请求下一帧动画requestAnimationFrame(animate);// 渲染场景并更新性能监控模块render();stats.update();
}

旋转行星和云层


function render() {// 旋转行星和云层const delta = clock.getDelta(); // 获取时间间隔meshPlanet.rotation.y += rotationSpeed * delta; // 根据时间间隔旋转行星meshClouds.rotation.y += 1.25 * rotationSpeed * delta; // 根据时间间隔旋转云层// 当接近表面时减慢速度dPlanet = camera.position.length(); // 计算摄像机到行星的距离dMoonVec.subVectors(camera.position, meshMoon.position); // 计算摄像机到月球的向量距离dMoon = dMoonVec.length(); // 计算摄像机到月球的距离if (dMoon < dPlanet) {d = (dMoon - radius * moonScale * 1.01); // 如果接近月球,则减速} else {d = (dPlanet - radius * 1.01); // 如果接近行星,则减速}controls.movementSpeed = 0.33 * d; // 根据距离更新控制器的移动速度controls.update(delta); // 更新控制器的状态composer.render(delta); // 渲染场景并应用后期处理效果
}

完整源码

<!DOCTYPE html>
<html lang="en"><head><title>three.js webgl - fly controls - earth</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><link type="text/css" rel="stylesheet" href="main.css"><style>body {background:#000;color: #eee;}a {color: #0080ff;}b {color: orange}</style></head><body><div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> - earth [fly controls]<br/><b>WASD</b> move, <b>R|F</b> up | down, <b>Q|E</b> roll, <b>up|down</b> pitch, <b>left|right</b> yaw</div><script type="importmap">{"imports": {"three": "../build/three.module.js","three/addons/": "./jsm/"}}</script><script type="module">import * as THREE from 'three';import Stats from 'three/addons/libs/stats.module.js';import { FlyControls } from 'three/addons/controls/FlyControls.js';import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';import { FilmPass } from 'three/addons/postprocessing/FilmPass.js';import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';const radius = 6371;const tilt = 0.41;const rotationSpeed = 0.02;const cloudsScale = 1.005;const moonScale = 0.23;const MARGIN = 0;let SCREEN_HEIGHT = window.innerHeight - MARGIN * 2;let SCREEN_WIDTH = window.innerWidth;let camera, controls, scene, renderer, stats;let geometry, meshPlanet, meshClouds, meshMoon;let dirLight;let composer;const textureLoader = new THREE.TextureLoader();let d, dPlanet, dMoon;const dMoonVec = new THREE.Vector3();const clock = new THREE.Clock();init();animate();function init() {camera = new THREE.PerspectiveCamera( 25, SCREEN_WIDTH / SCREEN_HEIGHT, 50, 1e7 );camera.position.z = radius * 5;scene = new THREE.Scene();scene.fog = new THREE.FogExp2( 0x000000, 0.00000025 );dirLight = new THREE.DirectionalLight( 0xffffff, 3 );dirLight.position.set( - 1, 0, 1 ).normalize();scene.add( dirLight );const materialNormalMap = new THREE.MeshPhongMaterial( {specular: 0x7c7c7c,shininess: 15,map: textureLoader.load( 'textures/planets/earth_atmos_2048.jpg' ),specularMap: textureLoader.load( 'textures/planets/earth_specular_2048.jpg' ),normalMap: textureLoader.load( 'textures/planets/earth_normal_2048.jpg' ),// y scale is negated to compensate for normal map handedness.normalScale: new THREE.Vector2( 0.85, - 0.85 )} );materialNormalMap.map.colorSpace = THREE.SRGBColorSpace;// planetgeometry = new THREE.SphereGeometry( radius, 100, 50 );meshPlanet = new THREE.Mesh( geometry, materialNormalMap );meshPlanet.rotation.y = 0;meshPlanet.rotation.z = tilt;scene.add( meshPlanet );// cloudsconst materialClouds = new THREE.MeshLambertMaterial( {map: textureLoader.load( 'textures/planets/earth_clouds_1024.png' ),transparent: true} );materialClouds.map.colorSpace = THREE.SRGBColorSpace;meshClouds = new THREE.Mesh( geometry, materialClouds );meshClouds.scale.set( cloudsScale, cloudsScale, cloudsScale );meshClouds.rotation.z = tilt;scene.add( meshClouds );// moonconst materialMoon = new THREE.MeshPhongMaterial( {map: textureLoader.load( 'textures/planets/moon_1024.jpg' )} );materialMoon.map.colorSpace = THREE.SRGBColorSpace;meshMoon = new THREE.Mesh( geometry, materialMoon );meshMoon.position.set( radius * 5, 0, 0 );meshMoon.scale.set( moonScale, moonScale, moonScale );scene.add( meshMoon );// starsconst r = radius, starsGeometry = [ new THREE.BufferGeometry(), new THREE.BufferGeometry() ];const vertices1 = [];const vertices2 = [];const vertex = new THREE.Vector3();for ( let i = 0; i < 250; i ++ ) {vertex.x = Math.random() * 2 - 1;vertex.y = Math.random() * 2 - 1;vertex.z = Math.random() * 2 - 1;vertex.multiplyScalar( r );vertices1.push( vertex.x, vertex.y, vertex.z );}for ( let i = 0; i < 1500; i ++ ) {vertex.x = Math.random() * 2 - 1;vertex.y = Math.random() * 2 - 1;vertex.z = Math.random() * 2 - 1;vertex.multiplyScalar( r );vertices2.push( vertex.x, vertex.y, vertex.z );}starsGeometry[ 0 ].setAttribute( 'position', new THREE.Float32BufferAttribute( vertices1, 3 ) );starsGeometry[ 1 ].setAttribute( 'position', new THREE.Float32BufferAttribute( vertices2, 3 ) );const starsMaterials = [new THREE.PointsMaterial( { color: 0x9c9c9c, size: 2, sizeAttenuation: false } ),new THREE.PointsMaterial( { color: 0x9c9c9c, size: 1, sizeAttenuation: false } ),new THREE.PointsMaterial( { color: 0x7c7c7c, size: 2, sizeAttenuation: false } ),new THREE.PointsMaterial( { color: 0x838383, size: 1, sizeAttenuation: false } ),new THREE.PointsMaterial( { color: 0x5a5a5a, size: 2, sizeAttenuation: false } ),new THREE.PointsMaterial( { color: 0x5a5a5a, size: 1, sizeAttenuation: false } )];for ( let i = 10; i < 30; i ++ ) {const stars = new THREE.Points( starsGeometry[ i % 2 ], starsMaterials[ i % 6 ] );stars.rotation.x = Math.random() * 6;stars.rotation.y = Math.random() * 6;stars.rotation.z = Math.random() * 6;stars.scale.setScalar( i * 10 );stars.matrixAutoUpdate = false;stars.updateMatrix();scene.add( stars );}renderer = new THREE.WebGLRenderer( { antialias: true } );renderer.setPixelRatio( window.devicePixelRatio );renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );document.body.appendChild( renderer.domElement );//controls = new FlyControls( camera, renderer.domElement );controls.movementSpeed = 1000;controls.domElement = renderer.domElement;controls.rollSpeed = Math.PI / 24;controls.autoForward = false;controls.dragToLook = false;//stats = new Stats();document.body.appendChild( stats.dom );window.addEventListener( 'resize', onWindowResize );// postprocessingconst renderModel = new RenderPass( scene, camera );const effectFilm = new FilmPass( 0.35 );const outputPass = new OutputPass();composer = new EffectComposer( renderer );composer.addPass( renderModel );composer.addPass( effectFilm );composer.addPass( outputPass );}function onWindowResize() {SCREEN_HEIGHT = window.innerHeight;SCREEN_WIDTH = window.innerWidth;camera.aspect = SCREEN_WIDTH / SCREEN_HEIGHT;camera.updateProjectionMatrix();renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );composer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );}function animate() {requestAnimationFrame( animate );render();stats.update();}function render() {// rotate the planet and cloudsconst delta = clock.getDelta();meshPlanet.rotation.y += rotationSpeed * delta;meshClouds.rotation.y += 1.25 * rotationSpeed * delta;// slow down as we approach the surfacedPlanet = camera.position.length();dMoonVec.subVectors( camera.position, meshMoon.position );dMoon = dMoonVec.length();if ( dMoon < dPlanet ) {d = ( dMoon - radius * moonScale * 1.01 );} else {d = ( dPlanet - radius * 1.01 );}controls.movementSpeed = 0.33 * d;controls.update( delta );composer.render( delta );}</script></body>
</html>

本内容来源于小豆包,想要更多内容请跳转小豆包 》

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

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

相关文章

C++函数参数传递

目录 传值参数 指针形参 传引用参数 使用引用避免拷贝 使用引用形参返回额外信息 const形参和实参 指针或引用形参与const 数组形参 管理指针形参 使用标记指定数组长度 使用标准库规范 显式传递一个表示数组大小的形参 数组形参和const 数组引用形参 传递多维数…

Django缓存(一)

一、缓存的介绍 官网:Django 缓存框架 | Django 文档 | Django 为什么要什么缓存? 为了减少服务器的计算开销 Django框架自带有一个强大的缓存系统,可以保存动态页面,因此不必为每个请求计算它们。为了方便,Django提供不同级别的缓存粒度:可以缓存特定视图的输出,可以只…

Web核心简介

简介 web&#xff1a;全球广域网&#xff0c;也称万维网(www)&#xff0c;能够通过浏览器访问的网站 JavaWeb&#xff1a;是用Java技术来解决相关web互联网领域的技术栈 JavaWeb技术栈 B/S架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的…

走迷宫----bfs再矩阵图里的应用模版

对于之前走迷宫的那个题 回忆一下dfs的代码 #include <bits/stdc.h> using namespace std; int a[110][110]; bool check[110][110]; int n,m; int ans1e9; int nxt[4][2]{{1,0},{0,-1},{-1,0},{0,1}}; void dfs(int x,int y,int step){if(xn&&ym){ansmin(ans,…

IntelliJ IDEA集成git配置账号密码

1 背景说明 刚使用IDEA,本地也安装Git,在提交和拉取代码的时候,总提示登录框,而且登录框还不能输入账号密码,只能输入登录Token。如下: 从而无法正常使用IDEA的Git功能,很苦恼。 2 解决方法 2.1 安装Git 进入官网地址 https://git-scm.com/,点击下载: 浏览器直接…

机器学习算法那些事 | 使用Transformer模型进行时间序列预测实战

本文来源公众号“机器学习算法那些事”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;使用Transformer模型进行时间序列预测实战 时间序列预测是一个经久不衰的主题&#xff0c;受自然语言处理领域的成功启发&#xff0c;transfo…

WPS制作甘特图

“ 甘特图&#xff08;Gantt chart&#xff09;又称为横道图、条状图&#xff08;Bar chart&#xff09;&#xff0c;通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。” 设置基础样式 设置行高 设置宽度 准备基础数据 计算持续时间 …

轻松引流几百精准粉丝,抖音自动爆粉秘籍揭秘

对于做互联网的朋友们来说&#xff0c;引流是一个必不可少的环节。 掌握一种优秀的引流方法至关重要&#xff0c;这也可以视为我们的生计之源。 今天&#xff0c;我将向大家介绍一款全自动的引流工具——抖音全自动引流脚本软件。 这款软件的效果非常显著&#xff0c;它可以替…

R-CNN笔记

目标检测之R-CNN论文精讲&#xff0c;RCNN_哔哩哔哩_bilibili 论文背景 在该论文提出之前&#xff0c;主流的目标检测思路是&#xff1a; 将一幅图片划分成很多个区域&#xff0c;单独提取出来 对于每个区域使用传统的特征提取方法提取 提取结束后可以使用以为特征向量表示 可以…

计算方法实验2:列主元消元法和Gauss-Seidel迭代法解线性方程组

Task 即已知 y 0 0 , y 100 1 y_00,y_{100}1 y0​0,y100​1&#xff0c;解线性方程组 A y b \mathbf{A}\mathbf{y} \mathbf{b} Ayb&#xff0c;其中 A 99 99 [ − ( 2 ϵ h ) ϵ h 0 ⋯ 0 ϵ − ( 2 ϵ h ) ϵ h ⋯ 0 0 ϵ − ( 2 ϵ h ) ⋯ 0 ⋮ ⋮ ⋱ ⋱ ⋮ 0 0 ⋯…

C++命名空间和内联函数

目录 命名空间 内联函数 概述 特性&#xff1a; 命名空间 在C/C中&#xff0c;变量&#xff0c;函数和和类这些名称都存在于全局作用域中&#xff0c;可能会导致很多冲突&#xff0c;使用命名空间的目的是对标识符的名称进行本地化&#xff0c;避免命名冲突或名字污染&…

C语言函数和数组

目录 一.数组 一.一维数组&#xff1a; 1.一维数组的创建: 2.一维数组的初始化&#xff1a; 3.一维数组的使用 4.一维数组在内存中的存储&#xff1a; 二.二维数组&#xff1a; 三.数组越界&#xff1a; 四.数组作为函数参数&#xff1a; 二.函数 一.函数是什么&…

vue3对openlayers使用(加高德,天地图图层)

OpenLayers认识 WebGIS四大框架&#xff1a; Leaflet、OpenLayers、Mapbox、Cesium OpenLayers 是一个强大的开源 JavaScript 地图库&#xff0c;专注于提供可嵌入网页的交互式地图体验。作为一款地理信息系统&#xff08;GIS&#xff09;的前端开发工具&#xff0c;OpenLaye…

关于php foreach函数和变量覆盖

foreach函数是PHP中用于遍历数组或对象的函数&#xff08;且仅用于数组的遍历&#xff09;。它允许循环遍历数组中的每个元素&#xff0c;并对每个元素执行相同的操作。foreach语句的基本语法如下&#xff1a; foreach ($array as $value) {//执行的操作 }在这个语法中&#x…

C++ Thread 源码 观后 自我感悟 整理

Thread的主要数据成员为_Thr 里面存储的是线程句柄和线程ID 先看看赋值运算符的移动构造 最开始判断线程的ID是否不为0 _STD就是使用std的域 如果线程ID不为0&#xff0c;那么就抛出异常 这里_New_val使用了完美转发&#xff0c;交换_Val和_New_val的值 _Thr _STD exchange(_…

回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SAO-LSTM雪消融…

【Linux】进程的进一步认识

目录 进程的创建 fork函数初步认识 fork函数的返回值 写时拷贝 操作系统怎么知道什么时候要写时拷贝的呢&#xff1f; fork的常规用法 fork调用失败的原因 进程终止 进程的退出场景 进程常见退出方法 正常终止&#xff08;可以通过 echo $? 查看进程退出码&#xff…

Spring Boot从入门到实战

课程介绍 本课程从SpringBoot的最基础的安装、配置开始到SpringBoot的日志管理、Web业务开发、数据存储、数据缓存&#xff0c;安全控制及相关企业级应用&#xff0c;全程案例贯穿&#xff0c;案例每一步的都会讲解实现思路&#xff0c;全程手敲代码实现。让你不仅能够掌Sprin…

【Linux操作系统】:进程控制

目录 一、程序地址空间 1.C/C中的程序地址空间 2.进程地址空间 进程地址空间概念 什么是地址空间&#xff1f;什么是区域划分&#xff1f; 为啥要有地址空间&#xff1f; 地址空间的补充 二、进程创建 1.fork函数 2.写时拷贝 3.fork常规用法 4.fork调用失败的原因 …

Linux 常用命令 1

Tips&#xff1a;终端热键ctrl shift 放大终端窗口的字体 ctrl - 缩小终端窗口的字体 注意区分大小写 查阅命令帮助信息&#xff1a; 1&#xff09;--help command –help(两个减号) 显示command命令的帮助信息 2&#xff09;man man command 查阅command命令的使…