3D个人简历网站 5.天空、鸟、飞机
1.显示天空
models下新建文件Sky.jsx
Sky.jsx
// 从 React 库中导入 useRef 钩子,用于创建可变的 ref 对象
import { useRef } from "react";
// 从 @react-three/drei 库中导入 useGLTF 钩子,用于加载 GLTF 格式的 3D 模型
import { useGLTF } from "@react-three/drei";
// 从 @react-three/fiber 库中导入 useFrame 钩子,用于在每一帧渲染时执行代码
import { useFrame } from "@react-three/fiber";// 导入天空 3D 模型的 GLB 文件
import skyScene from "../assets/3d/sky.glb";// 3D 模型来源注释,表明模型来自 Sketchfab 网站
// 3D Model from: https://sketchfab.com/3d-models/phoenix-bird-844ba0cf144a413ea92c779f18912042
/*** Sky 组件,用于渲染可旋转的天空 3D 模型* @param {boolean} isRotating - 控制天空模型是否旋转的布尔值* @returns {JSX.Element} 包含天空 3D 模型的 React 元素*/
export function Sky({ isRotating }) {// 使用 useGLTF 钩子加载天空 3D 模型,返回包含模型信息的对象const sky = useGLTF(skyScene);// 使用 useRef 钩子创建一个 ref 对象,用于引用天空模型的 DOM 元素const skyRef = useRef();// 注释说明动画名称可在 Sketchfab 网站找到,以及使用 delta 确保动画帧率独立// Note: Animation names can be found on the Sketchfab website where the 3D model is hosted.// It ensures smooth animations by making the rotation frame rate-independent.// 'delta' represents the time in seconds since the last frame./*** 在每一帧渲染时更新天空模型的旋转状态*/useFrame((_, delta) => {// 如果 isRotating 为 true,则更新天空模型的 y 轴旋转角度if (isRotating) {// 调整旋转速度,delta 确保旋转速度不受帧率影响skyRef.current.rotation.y += 0.25 * delta; }});/*** 渲染天空 3D 模型组件* 返回一个包含天空 3D 模型的 mesh 元素*/return (// 创建一个 mesh 元素,用于承载 3D 模型,并通过 ref 关联到 skyRef<mesh ref={skyRef}>{/* 使用 primitive 元素直接嵌入从 GLTF 文件加载的复杂 3D 模型或场景。object 属性指定要嵌入的 3D 对象,这里使用从 GLTF 文件加载的场景。*/}<primitive object={sky.scene} /></mesh>);
}
models下新建文件index.jsx
index.jsx
export { Sky } from "./Sky";
export { Island } from "./Island";
删除Island.jsx末尾文件"export default Island"语句
在Home.jsx中添加Sky相关代码显示天空效果
Home.jsx
……
// 从 ../models/Island 路径导入 Island 组件,此组件用于渲染 3D 岛屿模型
import { Island, Sky } from "../models"……/*** Home 组件,作为应用的主页组件。* 该组件会依据屏幕尺寸对 Island 组件的缩放、位置和旋转进行调整,* 并且在 Canvas 中渲染 Island 组件,同时处理异步加载状态。* @returns {JSX.Element} 渲染后的 JSX 元素*/
const Home = () => {/*** 根据屏幕尺寸调整 Island 组件的缩放、位置和旋转。* @returns {Array} 包含屏幕缩放比例、位置和旋转值的数组*/// 定义一个状态变量 isRotating,用于控制 Sky 组件的旋转状态const [isRotating, setIsRotating] = React.useState(false)const adjustIslandForScreenSize = () => {
……{/* 渲染 Island 组件,设置其位置、缩放和旋转属性 */}<Islandposition={islandPosition}scale={islandScale}rotation={islandRotation}/>{/* 渲染 Sky 组件,设置其旋转状态 */}<Sky isRotating={isRotating}/>
……
效果图
2.飞翔的鸟
models下添加文件Bird.jsx
Bird.jsx
// 从 react 库中导入 useEffect 和 useRef 钩子
// useEffect 用于处理副作用,如数据获取、订阅等
// useRef 用于创建可变的 ref 对象,可在组件的整个生命周期内保持值
import { useEffect, useRef } from "react";
// 从 @react-three/fiber 库中导入 useFrame 钩子
// useFrame 用于在每一帧渲染时执行代码,常用于实现动画效果
import { useFrame } from "@react-three/fiber";
// 从 @react-three/drei 库中导入 useAnimations 和 useGLTF 钩子
// useGLTF 用于加载 GLTF 格式的 3D 模型
// useAnimations 用于管理 3D 模型的动画
import { useAnimations, useGLTF } from "@react-three/drei";// 导入鸟类 3D 模型的 GLB 文件
import birdScene from "../assets/3d/bird.glb";// 3D 模型来源注释,表明模型来自 Sketchfab 网站
// 3D Model from: https://sketchfab.com/3d-models/phoenix-bird-844ba0cf144a413ea92c779f18912042
/*** Bird 组件,用于渲染会移动和播放动画的鸟类 3D 模型* @returns {JSX.Element} 包含鸟类 3D 模型的 React 元素*/
export function Bird() {// 使用 useRef 钩子创建一个 ref 对象,用于引用鸟类 3D 模型的 DOM 元素const birdRef = useRef();// 使用 useGLTF 钩子加载鸟类 3D 模型和动画数据// scene 为加载后的 3D 模型场景// animations 为模型包含的动画数组const { scene, animations } = useGLTF(birdScene);// 使用 useAnimations 钩子获取动画动作对象// actions 是一个包含动画动作的对象,可用于控制动画的播放、暂停等const { actions } = useAnimations(animations, birdRef);// 使用 useEffect 钩子,在组件挂载时执行一次// 作用是播放名为 "Take 001" 的动画useEffect(() => {// 播放 "Take 001" 动画actions["Take 001"].play();}, []);// 使用 useFrame 钩子,在每一帧渲染时执行代码useFrame(({ clock, camera }) => {// 使用正弦函数模拟鸟类上下波动的飞行效果// clock.elapsedTime 表示从时钟启动到现在经过的时间// 通过正弦函数计算出一个波动值,乘以 0.2 并加上 2,更新鸟类模型的 Y 坐标birdRef.current.position.y = Math.sin(clock.elapsedTime) * 0.2 + 2;// 检查鸟类模型的 X 坐标是否超过相机 X 坐标加 10 的位置if (birdRef.current.position.x > camera.position.x + 10) {// 若超过,将鸟类模型旋转 180 度(沿 Y 轴),改变飞行方向为向后birdRef.current.rotation.y = Math.PI;} else if (birdRef.current.position.x < camera.position.x - 10) {// 若小于相机 X 坐标减 10 的位置,将鸟类模型旋转角度重置为 0,改变飞行方向为向前birdRef.current.rotation.y = 0;}// 根据鸟类模型的旋转角度更新其 X 和 Z 坐标// 如果旋转角度为 0,说明鸟类向前飞行if (birdRef.current.rotation.y === 0) {// 向前移动,X 坐标增加 0.01,Z 坐标减少 0.01birdRef.current.position.x += 0.01;birdRef.current.position.z -= 0.01;} else {// 向后移动,X 坐标减少 0.01,Z 坐标增加 0.01birdRef.current.position.x -= 0.01;birdRef.current.position.z += 0.01;}});return (// 创建一个 mesh 元素,用于承载 3D 模型// ref 关联到 birdRef,方便后续操作模型// position 设置模型的初始位置// scale 设置模型的缩放比例<mesh ref={birdRef} position={[-5, 2, 1]} scale={[0.003, 0.003, 0.003]}>{/* 使用 primitive 元素直接嵌入从 GLTF 文件加载的复杂 3D 模型或场景object 属性指定要嵌入的 3D 对象,这里使用从 GLTF 文件加载的场景*/}<primitive object={scene} /></mesh>);
}
index.jsx增加代码鸟相关代码,考虑到后面还有其他狐狸、飞机相关文件,这里统一一起添加了
index.jsx
export { Sky } from "./Sky";
export { Bird } from './Bird'
export { Plane } from "./Plane";
export { Island } from "./Island";
export { Fox } from "./Fox"
Home.jsx中增加代码
Home.jsx
……
// 从../models 路径导入组件,
import { Bird, Island, Sky } from "../models"
……{/* 渲染 Bird 组件 */}<Bird />
……
效果图
3.飞机
models下新建文件Plane.jsx
Plane.jsx
// 从 React 中导入 useEffect 和 useRef 钩子
// useEffect 用于处理副作用,如数据获取、订阅或手动修改 DOM 等
// useRef 用于创建可变的 ref 对象,可在组件的整个生命周期内保持值
import { useEffect, useRef } from "react";
// 从 @react-three/drei 库中导入 useGLTF 和 useAnimations 钩子
// useGLTF 用于加载 GLTF 格式的 3D 模型
// useAnimations 用于管理 3D 模型的动画
import { useGLTF, useAnimations } from "@react-three/drei";// 导入飞机 3D 模型的 GLB 文件
import planeScene from "../assets/3d/plane.glb";// 3D 模型来源注释,表明模型来自 Sketchfab 网站
// 3D Model from: https://sketchfab.com/3d-models/stylized-ww1-plane-c4edeb0e410f46e8a4db320879f0a1db
/*** Plane 组件,用于渲染可控制动画的飞机 3D 模型* @param {boolean} isRotating - 控制飞机动画播放的布尔值,true 播放,false 停止* @param {Object} props - 其他传递给组件的属性* @returns {JSX.Element} 包含飞机 3D 模型的 React 元素*/
export function Plane({ isRotating, ...props }) {// 使用 useRef 钩子创建一个 ref 对象,用于引用飞机 3D 模型的 DOM 元素const ref = useRef();// 使用 useGLTF 钩子加载飞机 3D 模型和动画数据// scene 为加载后的 3D 模型场景// animations 为模型包含的动画数组const { scene, animations } = useGLTF(planeScene);// 使用 useAnimations 钩子获取动画动作对象// actions 是一个包含动画动作的对象,可用于控制动画的播放、暂停等const { actions } = useAnimations(animations, ref);// 使用 useEffect 钩子,当 isRotating 或 actions 变化时执行// 作用是根据 isRotating 的值控制飞机动画的播放或停止useEffect(() => {if (isRotating) {// 若 isRotating 为 true,播放名为 "Take 001" 的动画actions["Take 001"].play();} else {// 若 isRotating 为 false,停止名为 "Take 001" 的动画actions["Take 001"].stop();}}, [actions, isRotating]);return (// 创建一个 mesh 元素,用于承载 3D 模型// 将传递给组件的其他属性展开到 mesh 元素上// ref 关联到 ref 对象,方便后续操作模型<mesh {...props} ref={ref}>{/* 使用 primitive 元素直接嵌入从 GLTF 文件加载的复杂 3D 模型或场景object 属性指定要嵌入的 3D 对象,这里使用从 GLTF 文件加载的场景*/}<primitive object={scene} /></mesh>);
}
Home.jsx
……
// 从../models 路径导入组件,
import { Bird, Island, Sky, Plane } from "../models"
……/*** 根据屏幕尺寸调整 Plane 组件(双翼飞机)的缩放和位置。* @returns {Array} 包含飞机缩放比例和位置的数组*/const adjustBiplaneForScreenSize = () => {let screenScale, screenPosition;// If screen width is less than 768px, adjust the scale and positionif (window.innerWidth < 768) {screenScale = [1.5, 1.5, 1.5];screenPosition = [0, -1.5, 0];} else {screenScale = [3, 3, 3];screenPosition = [0, -4, -4];}return [screenScale, screenPosition];};// 调用 adjustIslandForScreenSize 函数,获取调整后的岛屿缩放、位置和旋转参数const [islandScale, islandPosition, islandRotation] = adjustIslandForScreenSize();// 定义一个状态变量 currentFocusPoint,用于存储当前的焦点点const [biplaneScale, biplanePosition] = adjustBiplaneForScreenSize();……<Bird />{/* 渲染 Plane 组件 */}{/* 渲染 Plane 组件,设置其旋转状态、位置、旋转和缩放属性 */}<PlaneisRotating={isRotating}position={biplanePosition}rotation={[0, 20.1, 0]}scale={biplaneScale}/>
……
效果图
修复部分bug,得到Home.jsx完整代码
修复后Home.jsx
// 导入 React 库和 Suspense 组件,Suspense 用于处理异步组件加载
// 当异步组件还未加载完成时,可显示一个 fallback 组件
import React, { Suspense, useState } from 'react'
// 从 @react-three/fiber 库中导入 Canvas 组件,用于创建 Three.js 渲染上下文,
// 借助该组件能在 React 应用里渲染 3D 场景
import { Canvas } from '@react-three/fiber'
// 从 ../components/Loader 路径导入 Loader 组件,该组件会在异步加载时显示加载状态
import Loader from '../components/Loader'
// 从../models 路径导入组件,
import { Bird, Island, Sky, Plane } from "../models"// <div className='absolute top-28 left-0 right-0 z-10 flex items-center justify-center'>
// 弹出窗口
// </div>/*** Home 组件,作为应用的主页组件。* 该组件会依据屏幕尺寸对 Island 组件的缩放、位置和旋转进行调整,* 并且在 Canvas 中渲染 Island 组件,同时处理异步加载状态。* @returns {JSX.Element} 渲染后的 JSX 元素*/
const Home = () => {/*** 根据屏幕尺寸调整 Island 组件的缩放、位置和旋转。* @returns {Array} 包含屏幕缩放比例、位置和旋转值的数组*/// 定义当前阶段状态,初始值为 1const [currentStage, setCurrentStage] = useState(1);// 定义一个状态变量 isRotating,用于控制 Sky 组件和 Plane 组件的旋转状态const [isRotating, setIsRotating] = React.useState(false)/*** 根据屏幕尺寸调整 Island 组件的缩放、位置和旋转。* @returns {Array} 包含岛屿缩放比例、位置和旋转值的数组*/const adjustIslandForScreenSize = () => {// 初始化屏幕缩放比例,初始值设为 nulllet screenScale = null// 初始化 Island 组件的位置,默认值为 [0, -6.5, -43]let screenPosition = [0, -6.5, -43]// 初始化 Island 组件的旋转值,默认值为 [0.1, 4.7, 0]let rotation = [0.1, 4.7, 0]// 判断当前窗口宽度是否小于 768pxif (window.innerWidth < 768) {// 若窗口宽度小于 768px,将屏幕缩放比例设置为 [0.9, 0.9, 0.9]screenScale = [0.9, 0.9, 0.9];} else {// 若窗口宽度大于等于 768px,将屏幕缩放比例设置为 [1, 1, 1]screenScale = [1, 1, 1];}// 返回包含屏幕缩放比例、位置和旋转值的数组return [screenScale, screenPosition, rotation];}/*** 根据屏幕尺寸调整 Plane 组件(双翼飞机)的缩放和位置。* @returns {Array} 包含飞机缩放比例和位置的数组*/const adjustBiplaneForScreenSize = () => {let screenScale, screenPosition;// 如果屏幕宽度小于 768px,调整缩放和位置if (window.innerWidth < 768) {screenScale = [1.5, 1.5, 1.5];screenPosition = [0, -1.5, 0];} else {screenScale = [3, 3, 3];screenPosition = [0, -4, -4];}return [screenScale, screenPosition];};// 调用 adjustIslandForScreenSize 函数,获取调整后的岛屿缩放、位置和旋转参数const [islandScale, islandPosition, islandRotation] = adjustIslandForScreenSize();// 调用 adjustBiplaneForScreenSize 函数,获取调整后的飞机缩放和位置参数const [biplaneScale, biplanePosition] = adjustBiplaneForScreenSize();return (// 创建一个 section 元素,宽度和高度占满整个屏幕,且采用相对定位<section className='w-full h-screen relative'>{/* 创建 Three.js 渲染画布,宽度和高度占满整个屏幕,背景透明,并设置相机的近裁剪面和远裁剪面 */}<CanvasclassName='w-full h-screen bg-transparent'camera={{ near:0.1, far:1000 }}>{/* 使用 Suspense 组件处理异步加载,当 Island 组件未加载完成时,显示 Loader 组件 */}<Suspense fallback={<Loader/>}>{/* 添加定向光,为场景提供有方向的光照 */}<directionalLight/>{/* 添加环境光,为场景提供全局均匀的光照 */}<ambientLight />{/* 添加点光源,从一个点向四周发射光线 */}<pointLight />{/* 添加聚光灯,发射出类似圆锥形的光线 */}<spotLight />{/* 添加半球光,模拟天空和地面的光照效果 */}<hemisphereLight />{/* 渲染 Island 组件,传递相关状态和属性 */}<IslandisRotating={isRotating}setIsRotating={setIsRotating}setCurrentStage={setCurrentStage}position={islandPosition}rotation={[0.1, 4.7077, 0]}scale={islandScale}/>{/* 渲染 Sky 组件,设置其旋转状态 */}<Sky isRotating={isRotating} />{/* 渲染 Bird 组件 */}<Bird />{/* 渲染 Plane 组件,设置其旋转状态、位置、旋转和缩放属性 */}<PlaneisRotating={isRotating}position={biplanePosition}rotation={[0, 20.1, 0]}scale={biplaneScale}/></Suspense></Canvas></section>)
}// 导出 Home 组件,供其他文件引入使用
export default Home
相关文章:

3D个人简历网站 5.天空、鸟、飞机
1.显示天空 models下新建文件Sky.jsx Sky.jsx // 从 React 库中导入 useRef 钩子,用于创建可变的 ref 对象 import { useRef } from "react"; // 从 react-three/drei 库中导入 useGLTF 钩子,用于加载 GLTF 格式的 3D 模型 import { useGLT…...

STM32IIC实战-OLED模板
STM32IIC实战-OLED模板 一,SSD1306 控制芯片1, 主要特性2,I2C 通信协议3, 显示原理4, 控制流程5, 开发思路 二,HAL I2C API 解析I2C 相关 API1,2,3,4…...
Sparse4D运行笔记
Sparse4D有三个版本,其中V1和V2版本的官方文档中环境依赖写得比较模糊且依赖库有版本冲突。 1. Sparse4D V1 创建环境 conda create sparse4dv1 python3.8 激活环境 conda activate sparse4dv1 安装torch, torchvision, torchaudio pip install torch1.13.0c…...
Redis设计与实现——分布式Redis
Redis Sentinel(哨兵) Sentinel 的工作机制 故障检测(Failure Detection) 主观下线(Subjective Down):单个 Sentinel 实例检测到主节点在30 秒内无响应,标记其为 SDOWN。 客观下线…...
多指标组合策略
该策略(MultiConditionStrategy)是一种基于多种技术指标和市场条件的交易策略。它通过综合考虑多个条件来生成交易信号,从而决定买入或卖出的时机。 以下是对该策略的详细分析: 交易逻辑思路 1. 条件1:星期几和价格变化判断 - 该条件根据当前日期是星期几以及价格的变化…...

c#车检车构客户管理系统软件车辆年审短信提醒软件
# CMS_VehicleInspection 车检车构客户管理系统软件车辆年审短信提醒软件 # 开发背景 软件是给泸州某公司开发的车检车构客户管理系统软件。用于在车检年审到期前一个月给客户发送车检短信提醒 # 功能描述 主要功能:车辆年审前一个月给客户发年审短信提醒…...
Java爬虫能处理京东商品数据吗?
Java爬虫完全可以处理京东商品数据。通过Java爬虫技术,可以高效地获取京东商品的详细信息,包括商品名称、价格、图片、描述等。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。以下是一个完整的Java爬虫示例,展…...

通俗版解释CPU、核心、进程、线程、协程的定义及关系
通俗版解释(比喻法) 1. CPU 和核心 CPU 一个工厂(负责干活的总部)。核心 工厂里的车间(比如工厂有4个车间,就能同时处理4个任务)。 2. 进程 进程 一家独立运营的公司(比如一家…...

大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化
写在前面 GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,…...

USRP 射频信号 采集 回放 系统
USRP 射频信号采集回放系统 也可以叫做: 利用宽带RF录制和回放系统实现6G技术研究超宽带射频信号采集回放系统使用NI USRP平台实现射频信号录制和回放操作演示USRP也能实现多通道宽带信号流盘回放了! 对于最简单的实现方法就是使用LabVIEW进行实现 采…...

【skywalking】index“:“skywalking_metrics-all“},“status“:404}
skywalking 启动报错 java.lang.RuntimeException: {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [skywalking_metrics-all]","resource.t ype":"inde…...
handsome主题美化及优化:10.1.0最新版 - 1
文章目录 前言右侧导航栏主题标题居中页面两侧框架留白间距handsome 原生入站提示评论一键赞、踩、打卡时光机头像圆形logo 扫光赞赏按钮跳动鼠标点击特效复制版权提示彩色标签云及右栏数字自定义右键响应时间和访客总数全站字数统计版权提示时间流逝添加心知天气总结 前言 ha…...
(9)python开发经验
文章目录 1 os.path.join()拼接路径2 条件变量3 添加临时环境变量 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 os.path.join()拼接路径 os.path.join() 是 Python 中处理文件路径拼接的核心函…...

【C++详解】string各种接口如何使用保姆级攻略
文章目录 一、string介绍二、string使用构造函数析构函数赋值运算符重载string的遍历修改方法1、下标[]2、迭代器3、范围for 迭代器使用详解const迭代器反向迭代器(reverse) Capacity(容量相关)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(缩容)reserve(扩…...

2025深圳杯D题法医物证多人身份鉴定问题四万字思路
Word版论文思路和千行Python代码下载:https://www.jdmm.cc/file/2712074/ 引言 法医遗传学中的混合生物样本分析,特别是短串联重复序列(Short Tandem Repeat, STR)分型结果的解读,是现代刑事侦查和身份鉴定领域的核心…...

【时时三省】(C语言基础)字符数组应用举例2
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题: 有3个字符串,要求找出其中“最大”者。 解题思路: 可以设一个二维的字符数组str,大小为320,即有3行20列(每一…...

Mysql触发器(附案例)
文章目录 触发器简介1、insert类型2、update类型3、delete类型总结 触发器简介 触发器是与表有关的数据库对象,指定在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性…...

使用DDR4控制器实现多通道数据读写(十二)
一、章节概括 这一节使用interconnect RTL ip核将DDR4与四个读写通道级联,在测试工程中,将四个通道同时写入/读出地址与数据,并使用modelsim仿真器仿真,四个通道同时发送写请求或读请求后,经过interconnect后ÿ…...

Kafka 生产者工作流程详解
以下是 Kafka 生产者工作流程的清晰分步解释,结合关键机制与用户数据: 1. 生产者初始化与数据发送 主线程创建生产者对象,调用 send(ProducerRecord) 发送消息。 拦截器(可选):可添加自定义逻辑(…...

完整卸载 Fabric Manager 的方法
目录 ✅ 完整卸载 Fabric Manager 的方法 1️⃣ 停止并禁用服务 2️⃣ 卸载 Fabric Manager 软件包 3️⃣ 自动清理无用依赖(可选) 4️⃣ 检查是否卸载成功 ✅ 补充(仅清除服务,不删包) ✅ 完整卸载 Fabric Mana…...

地下停车场调频广播无线覆盖系统:融合精准选频光纤传输均匀覆盖于一体的创新型地下车库广播无线覆盖平台
地下停车场调频广播无线覆盖系统:融合精准选频光纤传输均匀覆盖于一体的创新型地下车库广播无线覆盖平台 北京海特伟业科技有限公司任洪卓发布于2025年5月16日 在现代城市建设中,地下停车场已成为商业综合体、写字楼、住宅区及交通枢纽的标配设施。然而…...

【Linux】进程间通信(一):认识管道
📝前言: 这篇文章我们来讲讲进程间通信——认识管道 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏:C学习笔记,C语言入门基础&a…...

中大型水闸安全监测系统解决方案
一、方案概述 中大型水闸作为水利工程的重要组成部分,承担着调节水位、控制水流、防洪排涝等多重功能,在防洪减灾、水资源配置、生态环境改善等方面发挥着巨大作用。然而,由于历史原因,许多水闸存在建设标准偏低、质量较差、配套设…...

蓝桥杯12届国B 123
题目描述 小蓝发现了一个有趣的数列,这个数列的前几项如下: 1,1,2,1,2,3,1,2,3,4,⋯ 小蓝发现,这个数列前 1 项是整数 1,接下来 2 项是整数 1 至 2,接下来 3 项是整数 1 至 3,接下来 4 项是整数 1 至 4&…...

Harmony开发 List、Grid拖动自定义排序实现
1. Harmony开发 List、Grid拖动自定义排序实现 1.1. List拖动功能 本示例基于显式动画、List组件实现了ListItem的上下拖动、ListItem切换以及ListItem插入的效果。 实现思路:List手势拖动 @Entry @Component struct ListDragPage {@State private arr: string[] = [0, …...

迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记
MH22D3芯片是兆讯公司新推出的基于cortex-M3内核的新一代芯片,专注于显示应用,其主频高达216Mhz,64KB SRAM,512KB Flash,开发UI应用游刃有余。详细介绍请看:MH22D3新一代显控应用性价比之王 新龙微基于MH22…...
【001】.so文件分析之 ELF格式符号
.so 文件的结构标识主要依据 ELF 格式(Executable and Linkable Format) 一个 .so 文件其实是一个 ELF(可执行与可链接格式) 文件,里面包含多个结构标识符和段(Sections)用于支持动态加载、符号…...

QT之LayOut布局
文章目录 QFormLayoutQGridLayoutQFormLayout、QGridLayout、QHBoxLayout、QVBoxLayout综合案例用QFormLayout 代替 界面左边部分的QGridLayout QFormLayout #include "widget.h"#include <QFormLayout> #include <QLineEdit>Widget::Widget(QWidget *p…...

无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用
一、背景 弱电箱和电视柜只预留了一根网线,路由器放在电视柜,想实现既可以上网又可以正常观看iptv,本文提供了一种方法。 二、准备工作 1、带iptv功能的路由器;2、水星sg105pro网管交换机;3、网线若干; …...
C++类与对象--1 特性一:封装
C面向对象三大特性: (1)封装;(2)继承;(3)多态; C认为万物皆是对象,对象上有对应的属性(数据)和行为(方法&…...