ThreeJS-聚光灯物体投影(二十)

聚光灯(灯泡)

关键代码:

            //直线光(由光源发出的灯光)
            // const directionalLight = new THREE.DirectionalLight(0xFFFFFF, 0.7);
            // directionalLight.position.set(10, 10, 10);
            // scene.add(directionalLight);
            const directionalLight = new THREE.SpotLight(0xFFFFFF, 0.7);
            directionalLight.position.set(10, 10, 10);
            scene.add(directionalLight);

完整代码:

<template>
    <div id="three_div"></div>
</template>

<script>
    import * as dat from 'dat.gui' //界面控制
    import * as THREE from "three";
    import {
        OrbitControls
    } from "three/examples/jsm/controls/OrbitControls";
    import {
        RGBELoader
    } from "three/examples/jsm/loaders/RGBELoader"
    export default {
        name: "HOME",
        components: {
            // vueQr,
            // glHome,
        },
        data() {
            return {};
        },
        mounted() {
            //使用控制器控制3D拖动旋转OrbitControls
            //控制3D物体移动

            //1.创建场景
            const scene = new THREE.Scene();
            console.log(scene);

            //2.创建相机
            const camera = new THREE.PerspectiveCamera(
                75,
                window.innerWidth / window.innerHeight,
                0.1,
                1000
            );
            //设置相机位置
            camera.position.set(0, 0, 10);
            //将相机添加到场景
            scene.add(camera);
            //添加物体
            //创建一个半径为1,经纬度分段数位20的球
            const cubeGeometry = new THREE.SphereBufferGeometry(2, 100, 100);
            //纹理加载器加载图片
            const cubeMaterial = new THREE.MeshStandardMaterial({
                //side: THREE.DoubleSide,
            });
            //根据几何体和材质创建物体
            const mesh = new THREE.Mesh(cubeGeometry, cubeMaterial);
            //将物体加入到场景
            scene.add(mesh);

            //创建平面几何体
            const planeGeometry = new THREE.PlaneBufferGeometry(50, 50);
            //创建平面物体
            const planeMesh = new THREE.Mesh(planeGeometry, cubeMaterial);
            planeMesh.position.set(0, -2, 0);
            planeMesh.rotation.x = -Math.PI / 2;
            //场景添加平面物体
            scene.add(planeMesh);

            //给场景所有的物体添加默认的环境贴图
            //添加坐标轴辅助器
            const axesHepler = new THREE.AxesHelper(5);
            scene.add(axesHepler);
            //标准材质需要借助灯光

            //添加周围环境灯光(由物体发出的灯光)参数(灯色,强度0-1)
            const light = new THREE.AmbientLight(0xFFFFFF, 0.7);
            scene.add(light);
            //直线光(由光源发出的灯光)
            // const directionalLight = new THREE.DirectionalLight(0xFFFFFF, 0.7);
            // directionalLight.position.set(10, 10, 10);
            // scene.add(directionalLight);
            const directionalLight = new THREE.SpotLight(0xFFFFFF, 0.7);
            directionalLight.position.set(10, 10, 10);
            scene.add(directionalLight);

            // scene.add(mesh2);
            //初始化渲染器
            const render = new THREE.WebGLRenderer();
            //设置渲染器的尺寸
            render.setSize(window.innerWidth, window.innerHeight);
            //使用渲染器,通过相机将场景渲染进来

            //创建轨道控制器,可以拖动,控制的是摄像头
            const controls = new OrbitControls(camera, render.domElement);
            //设置控制阻尼,让控制器有更真实的效果
            controls.enableDamping = true;


            //开启投影
            //开启渲染器投影
            render.shadowMap.enabled = true;
            //开启灯光动态投影
            directionalLight.castShadow = true;
            //开启物体投影
            mesh.castShadow = true;
            //开启平面接受投影
            planeMesh.receiveShadow = true;
            //投影模糊度
            directionalLight.shadow.radius = 20;
            //设置投影的宽度和高度
            // directionalLight.shadow.mapSize.set(1024, 1024);

            //平行光投射相机的属性
            // directionalLight.shadow.camera.near= 0.5;
            // directionalLight.shadow.camera.far= 500;
            // directionalLight.shadow.camera.top= 3;
            // directionalLight.shadow.camera.bottom= -2;
            // directionalLight.shadow.camera.left= -2;
            // directionalLight.shadow.camera.right= 2;
            //创建gui
            const gui = new dat.GUI();
            // gui.add(directionalLight.shadow.camera, 'near').min(1).max(25).step(1).name("相机近距离").onChange( () => {
            //     directionalLight.shadow.camera.updateProjectionMatrix();
            // })
            gui.add(mesh.position, 'x').min(-30).max(30).step(1).name("移动位置");
            //将webgl渲染的canvas内容添加到body上
            document.getElementById("three_div").appendChild(render.domElement);

            //渲染下一帧的时候就会调用回调函数
            let renderFun = () => {
                //更新阻尼数据
                controls.update();
                //需要重新绘制canvas画布
                render.render(scene, camera);
                //监听屏幕刷新(60HZ,120HZ),每次刷新触发一次requestAnimationFrame回调函数
                //但是requestAnimationFrame的回调函数注册生命只有一次,因此需要循环注册,才能达到一直调用的效果
                window.requestAnimationFrame(renderFun);
            };
            // window.requestAnimationFrame(renderFun);
            renderFun();

            //画布全屏
            window.addEventListener("dblclick", () => {
                if (document.fullscreenElement) {
                    document.exitFullscreen();
                } else {
                    //document.documentElement.requestFullscreen();
                    render.domElement.requestFullscreen();
                }
            });

            //监听画面变化,更新渲染画面,(自适应的大小)
            window.addEventListener("resize", () => {
                //更新摄像机的宽高比
                camera.aspect = window.innerWidth / window.innerHeight;
                //更新摄像机的投影矩阵
                camera.updateProjectionMatrix();
                //更新渲染器宽度和高度
                render.setSize(window.innerWidth, window.innerHeight);
                //设置渲染器的像素比
                render.setPixelRatio(window.devicePixelRatio);
                console.log("画面变化了");
            });
        },
        methods: {
            paush(animate) {
                animate.pause();
            },
        },
    };
</script>

<style scoped lang="scss">
</style>

效果图:

 灯光跟着物体移动而移动

关键代码:

//灯光跟着物体移动而移动
directionalLight.target = mesh;

 完整代码:

<template>
    <div id="three_div"></div>
</template>

<script>
    import * as dat from 'dat.gui' //界面控制
    import * as THREE from "three";
    import {
        OrbitControls
    } from "three/examples/jsm/controls/OrbitControls";
    import {
        RGBELoader
    } from "three/examples/jsm/loaders/RGBELoader"
    export default {
        name: "HOME",
        components: {
            // vueQr,
            // glHome,
        },
        data() {
            return {};
        },
        mounted() {
            //使用控制器控制3D拖动旋转OrbitControls
            //控制3D物体移动

            //1.创建场景
            const scene = new THREE.Scene();
            console.log(scene);

            //2.创建相机
            const camera = new THREE.PerspectiveCamera(
                75,
                window.innerWidth / window.innerHeight,
                0.1,
                1000
            );
            //设置相机位置
            camera.position.set(0, 0, 10);
            //将相机添加到场景
            scene.add(camera);
            //添加物体
            //创建一个半径为1,经纬度分段数位20的球
            const cubeGeometry = new THREE.SphereBufferGeometry(2, 100, 100);
            //纹理加载器加载图片
            const cubeMaterial = new THREE.MeshStandardMaterial({
                //side: THREE.DoubleSide,
            });
            //根据几何体和材质创建物体
            const mesh = new THREE.Mesh(cubeGeometry, cubeMaterial);
            //将物体加入到场景
            scene.add(mesh);

            //创建平面几何体
            const planeGeometry = new THREE.PlaneBufferGeometry(50, 50);
            //创建平面物体
            const planeMesh = new THREE.Mesh(planeGeometry, cubeMaterial);
            planeMesh.position.set(0, -2, 0);
            planeMesh.rotation.x = -Math.PI / 2;
            //场景添加平面物体
            scene.add(planeMesh);

            //给场景所有的物体添加默认的环境贴图
            //添加坐标轴辅助器
            const axesHepler = new THREE.AxesHelper(5);
            scene.add(axesHepler);
            //标准材质需要借助灯光

            //添加周围环境灯光(由物体发出的灯光)参数(灯色,强度0-1)
            const light = new THREE.AmbientLight(0xFFFFFF, 0.7);
            scene.add(light);
            //直线光(由光源发出的灯光)
            // const directionalLight = new THREE.DirectionalLight(0xFFFFFF, 0.7);
            // directionalLight.position.set(10, 10, 10);
            // scene.add(directionalLight);
            const directionalLight = new THREE.SpotLight(0xFFFFFF, 0.7);
            directionalLight.position.set(10, 10, 10);
            scene.add(directionalLight);

            // scene.add(mesh2);
            //初始化渲染器
            const render = new THREE.WebGLRenderer();
            //设置渲染器的尺寸
            render.setSize(window.innerWidth, window.innerHeight);
            //使用渲染器,通过相机将场景渲染进来

            //创建轨道控制器,可以拖动,控制的是摄像头
            const controls = new OrbitControls(camera, render.domElement);
            //设置控制阻尼,让控制器有更真实的效果
            controls.enableDamping = true;


            //开启投影
            //开启渲染器投影
            render.shadowMap.enabled = true;
            //开启灯光动态投影
            directionalLight.castShadow = true;
            //开启物体投影
            mesh.castShadow = true;
            //开启平面接受投影
            planeMesh.receiveShadow = true;
            //投影模糊度
            directionalLight.shadow.radius = 10;
            //设置投影的宽度和高度
            // directionalLight.shadow.mapSize.set(1024, 1024);

            //平行光投射相机的属性
            // directionalLight.shadow.camera.near= 0.5;
            // directionalLight.shadow.camera.far= 500;
            // directionalLight.shadow.camera.top= 3;
            // directionalLight.shadow.camera.bottom= -2;
            // directionalLight.shadow.camera.left= -2;
            // directionalLight.shadow.camera.right= 2;
            //灯光跟着物体移动而移动
            directionalLight.target = mesh;
            //创建gui
            const gui = new dat.GUI();
            // gui.add(directionalLight.shadow.camera, 'near').min(1).max(25).step(1).name("相机近距离").onChange( () => {
            //     directionalLight.shadow.camera.updateProjectionMatrix();
            // })
            gui.add(mesh.position, 'x').min(-30).max(30).step(1).name("移动位置");
            //将webgl渲染的canvas内容添加到body上
            document.getElementById("three_div").appendChild(render.domElement);

            //渲染下一帧的时候就会调用回调函数
            let renderFun = () => {
                //更新阻尼数据
                controls.update();
                //需要重新绘制canvas画布
                render.render(scene, camera);
                //监听屏幕刷新(60HZ,120HZ),每次刷新触发一次requestAnimationFrame回调函数
                //但是requestAnimationFrame的回调函数注册生命只有一次,因此需要循环注册,才能达到一直调用的效果
                window.requestAnimationFrame(renderFun);
            };
            // window.requestAnimationFrame(renderFun);
            renderFun();

            //画布全屏
            window.addEventListener("dblclick", () => {
                if (document.fullscreenElement) {
                    document.exitFullscreen();
                } else {
                    //document.documentElement.requestFullscreen();
                    render.domElement.requestFullscreen();
                }
            });

            //监听画面变化,更新渲染画面,(自适应的大小)
            window.addEventListener("resize", () => {
                //更新摄像机的宽高比
                camera.aspect = window.innerWidth / window.innerHeight;
                //更新摄像机的投影矩阵
                camera.updateProjectionMatrix();
                //更新渲染器宽度和高度
                render.setSize(window.innerWidth, window.innerHeight);
                //设置渲染器的像素比
                render.setPixelRatio(window.devicePixelRatio);
                console.log("画面变化了");
            });
        },
        methods: {
            paush(animate) {
                animate.pause();
            },
        },
    };
</script>

<style scoped lang="scss">
</style>

效果图:

聚光灯灯光弧度

 

关键代码:

//directionalLight.angle = Math.PI/10;

gui.add(directionalLight, 'angle').min(0).max(Math.PI/2).step(0.1).name("灯光弧度");

完整代码:

<template>
    <div id="three_div"></div>
</template>

<script>
    import * as dat from 'dat.gui' //界面控制
    import * as THREE from "three";
    import {
        OrbitControls
    } from "three/examples/jsm/controls/OrbitControls";
    import {
        RGBELoader
    } from "three/examples/jsm/loaders/RGBELoader"
    export default {
        name: "HOME",
        components: {
            // vueQr,
            // glHome,
        },
        data() {
            return {};
        },
        mounted() {
            //使用控制器控制3D拖动旋转OrbitControls
            //控制3D物体移动

            //1.创建场景
            const scene = new THREE.Scene();
            console.log(scene);

            //2.创建相机
            const camera = new THREE.PerspectiveCamera(
                75,
                window.innerWidth / window.innerHeight,
                0.1,
                1000
            );
            //设置相机位置
            camera.position.set(0, 0, 10);
            //将相机添加到场景
            scene.add(camera);
            //添加物体
            //创建一个半径为1,经纬度分段数位20的球
            const cubeGeometry = new THREE.SphereBufferGeometry(2, 100, 100);
            //纹理加载器加载图片
            const cubeMaterial = new THREE.MeshStandardMaterial({
                //side: THREE.DoubleSide,
            });
            //根据几何体和材质创建物体
            const mesh = new THREE.Mesh(cubeGeometry, cubeMaterial);
            //将物体加入到场景
            scene.add(mesh);

            //创建平面几何体
            const planeGeometry = new THREE.PlaneBufferGeometry(50, 50);
            //创建平面物体
            const planeMesh = new THREE.Mesh(planeGeometry, cubeMaterial);
            planeMesh.position.set(0, -2, 0);
            planeMesh.rotation.x = -Math.PI / 2;
            //场景添加平面物体
            scene.add(planeMesh);

            //给场景所有的物体添加默认的环境贴图
            //添加坐标轴辅助器
            const axesHepler = new THREE.AxesHelper(5);
            scene.add(axesHepler);
            //标准材质需要借助灯光

            //添加周围环境灯光(由物体发出的灯光)参数(灯色,强度0-1)
            const light = new THREE.AmbientLight(0xFFFFFF, 0.7);
            scene.add(light);
            //直线光(由光源发出的灯光)
            // const directionalLight = new THREE.DirectionalLight(0xFFFFFF, 0.7);
            // directionalLight.position.set(10, 10, 10);
            // scene.add(directionalLight);
            const directionalLight = new THREE.SpotLight(0xFFFFFF, 0.7);
            directionalLight.position.set(10, 10, 10);
            scene.add(directionalLight);

            // scene.add(mesh2);
            //初始化渲染器
            const render = new THREE.WebGLRenderer();
            //设置渲染器的尺寸
            render.setSize(window.innerWidth, window.innerHeight);
            //使用渲染器,通过相机将场景渲染进来

            //创建轨道控制器,可以拖动,控制的是摄像头
            const controls = new OrbitControls(camera, render.domElement);
            //设置控制阻尼,让控制器有更真实的效果
            controls.enableDamping = true;


            //开启投影
            //开启渲染器投影
            render.shadowMap.enabled = true;
            //开启灯光动态投影
            directionalLight.castShadow = true;
            //开启物体投影
            mesh.castShadow = true;
            //开启平面接受投影
            planeMesh.receiveShadow = true;
            //投影模糊度
            directionalLight.shadow.radius = 10;
            //设置投影的宽度和高度
            // directionalLight.shadow.mapSize.set(1024, 1024);

            //平行光投射相机的属性
            // directionalLight.shadow.camera.near= 0.5;
            // directionalLight.shadow.camera.far= 500;
            // directionalLight.shadow.camera.top= 3;
            // directionalLight.shadow.camera.bottom= -2;
            // directionalLight.shadow.camera.left= -2;
            // directionalLight.shadow.camera.right= 2;
            //灯光跟着物体移动而移动
            directionalLight.target = mesh;
            //directionalLight.angle = Math.PI/10;
            //创建gui
            const gui = new dat.GUI();
            // gui.add(directionalLight.shadow.camera, 'near').min(1).max(25).step(1).name("相机近距离").onChange( () => {
            //     directionalLight.shadow.camera.updateProjectionMatrix();
            // })
            gui.add(mesh.position, 'x').min(-30).max(30).step(1).name("移动位置");
            gui.add(directionalLight, 'angle').min(0).max(Math.PI/2).step(0.1).name("灯光弧度");
            //将webgl渲染的canvas内容添加到body上
            document.getElementById("three_div").appendChild(render.domElement);

            //渲染下一帧的时候就会调用回调函数
            let renderFun = () => {
                //更新阻尼数据
                controls.update();
                //需要重新绘制canvas画布
                render.render(scene, camera);
                //监听屏幕刷新(60HZ,120HZ),每次刷新触发一次requestAnimationFrame回调函数
                //但是requestAnimationFrame的回调函数注册生命只有一次,因此需要循环注册,才能达到一直调用的效果
                window.requestAnimationFrame(renderFun);
            };
            // window.requestAnimationFrame(renderFun);
            renderFun();

            //画布全屏
            window.addEventListener("dblclick", () => {
                if (document.fullscreenElement) {
                    document.exitFullscreen();
                } else {
                    //document.documentElement.requestFullscreen();
                    render.domElement.requestFullscreen();
                }
            });

            //监听画面变化,更新渲染画面,(自适应的大小)
            window.addEventListener("resize", () => {
                //更新摄像机的宽高比
                camera.aspect = window.innerWidth / window.innerHeight;
                //更新摄像机的投影矩阵
                camera.updateProjectionMatrix();
                //更新渲染器宽度和高度
                render.setSize(window.innerWidth, window.innerHeight);
                //设置渲染器的像素比
                render.setPixelRatio(window.devicePixelRatio);
                console.log("画面变化了");
            });
        },
        methods: {
            paush(animate) {
                animate.pause();
            },
        },
    };
</script>

<style scoped lang="scss">
</style>

效果图:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题

目录 试题F&#xff1a;时间显示 解题思路 代码 试题G&#xff1a;砝码称重 解题思路 代码 试题H&#xff1a;杨辉三角 解题思路 代码 试题I&#xff1a;双向排序 解题思路 试题J&#xff1a;括号序列 解题思路 试题F&#xff1a;时间显示 【问题描述】 小蓝要和…

Linux总结(二)

基础IO 1.什么叫文件? 我们需要在操作系统的角度理解文件。 文件 = 文件内容 + 属性(所以即使是空文件,也会占空间,因为我们是需要保存文件属性的,属性也是数据,所以占空间) C/C++程序默认会打开三个文件流,叫做标准输入(stdin),标准输出(stdout),标准错误(std…

【新2023Q2押题JAVA】华为OD机试 - 服务依赖

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:服务依赖 题目 在某系统中有…

时间序列的迁移学习

目录 时间序列及其研究状况&#xff1a; 时间序列中存在迁移学习问题吗&#xff1f; 已有的时间序列建模方法的大致思路 迁移学习如何应用于时间序列建模&#xff1f; 本内容摘录于王晋东老师的《迁移学习导论》 时间序列及其研究状况&#xff1a; 所谓时间序列&#…

Linux权限提升—内核、SUID、脏牛等提权

Linux权限提升—内核、SUID、脏牛等提权1. 前言2. 基础信息收集2.1. 内核、操作系统、设备信息等2.2. 用户信息2.3. 用户权限信息2.4. 环境信息2.5. 进程与服务2.6. 安装的软件2.7. 服务与插件2.8. 计划任务2.9. 是否有存放明文密码2.10. 查看与主机通信信息2.11. 日志信息3. 脚…

基于混合整数规划方法的微网电池储能容量优化配置

代码相关资源&#xff1a;TOPSIS法&#xff08;优劣解距离法&#xff09; 风电场风速两参数weibull(威布尔)分布的MATLAB小程序 遗传算法优化神经网络&#xff0c;对光伏出力预测的优化设计&#xff0c;实现了部分功能 关键词&#xff1a;储能容量优化 储能配置 微网 编程…

10年花费9773亿,华为完成13000颗元器件国产替代,外媒:结束了

近期&#xff0c;华为的消息层出不穷&#xff0c;就在前几天&#xff0c;华为就释放出2个信号&#xff0c;任正非为代表的巨头纷纷表态及发言&#xff0c;显而易见的是&#xff0c;如今华为正处于生死攸关的重要阶段。那么华为释放了哪2个信号呢&#xff1f;其一是&#xff0c;…

centos7离线安装docker

前言 在没有互联网的情况下想要安装某些软件用docker是十分方便的一种方式&#xff0c;例如oracle。原生的oracle安装是非常麻烦的&#xff0c;本人亲眼目睹一个专门搞oracle的公司的人安装oracle三天没有成功&#xff01;因此不得不学习在没有互联网的情况下使用docker来安装…

网络层IP协议和数据链路层

目录IP协议协议头格式分片网段划分特殊的IP地址IP地址的数量限制NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器私有IP地址和公网IP地址路由路由表生成算法数据链路层认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MT…

web自动化测试:Selenium+Python基础方法封装(建议收藏)

01、目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”&#xff0c;通常都会作为广大测试从业者的首选学习对象&#xff0c;相较于C/S架构的自动化来说&#xff0c;B/S有着其无法忽视的诸多优势&#xff0c;从行业发展趋、研发模式特点、测试工具支持&…

SpringCloud学习2(Spring Cloud Netflix)负载均衡Ribbon、Feign负载均衡、Hystix服务熔断

文章目录负载均衡RibbonRibbon的作用代码实现生产者cloud1_provider实现配置文件在HiController中编写以下代码启动集群消费者cloud1_consumer实现引入依赖编写配置文件编写启动类&#xff0c;并给RestTemplate配置LoadBalanced注解编写RestController来测试Feign负载均衡简介F…

信息收集与运用

目录 一.实验目的 二.实验原理 三.实验内容 一.收集信息 二.猜解密码 三.密码强度检测 源码 测试用例 程序输出结果​编辑 ​四.小结与讨论 1.举出保护个人敏感信息的方法&#xff08;最少三点&#xff09;。 2.如何提高你的密码强壮性&#xff0c;以避免黑客利用密…

Java类加载过程面试总结

什么是Java的类加载机制 Java 虚拟机一般使用 Java 类的流程为&#xff1a;首先将开发者编写的 Java 源代码&#xff08;.java文件&#xff09;编译成 Java 字节码&#xff08;.class文件&#xff09;&#xff0c;然后类加载器会读取这个 .class 文件&#xff0c;并转换成 jav…

05.List的介绍

1. List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素进行遍…

仿真与测试:单元测试与Test Harness

本文描述单元测试的概念&#xff0c;以及Test Harness建立的方法和简单的单元测试过程。 文章目录1 单元测试1.1 场景举例1.2 简单的测试方法2 Test Harness建立2.1 模型配置2.2 创建Test Harness3 总结1 单元测试 单元测试&#xff0c;简单来说就是在Simulink模型中只测试一小…

63-哈希表

目录 1.哈希表的概念 2.哈希函数的概念 3.哈希函数的设计 3.1.key为整型时哈希函数的设计 3.1.1.普通整数 3.1.2.负整数 3.1.3.大整数 PS&#xff1a;哈希函数设计的3个要求&#xff1a; PS&#xff1a;2种类型的哈希函数&#xff08;大整数&#xff09; 3.2.key为其…

【数据结构】树与二叉树的基本概念及性质

目录 一、树的基本概念 1️⃣树的定义 2️⃣基本术语 3️⃣树的性质 二、二叉树的概念 1️⃣二叉树的定义 2️⃣特殊二叉树 3️⃣二叉树的性质 参考资料 一、树的基本概念 1️⃣树的定义 数据结构中的树是什么❓ 树是 个结点的有限集。有且仅有一个特定的称为根(上图A结点…

C++ [内存管理]

本文已收录至《C语言》专栏&#xff01; 作者&#xff1a;ARMCSKGT 目录 前言 正文 计算机中内存分布 C语言的内存管理 内存申请函数 内存释放函数 C内存管理 new操作符 delete操作符 特性总结 注意 原理探究 operator new和operator delete函数 operator new的底…

【C++】STL之string的使用和模拟实现

初阶的C语法和基本的类和对象我们已经学过了&#xff0c;下面我们会步入一段新的旅程。本章我们将初步了解STL(标准模板库)&#xff0c;并且深入探讨其中一个非常重要的容器———string。 目录 &#xff08;一&#xff09;STL简介&#xff08;了解即可&#xff09; &#xf…

Hashtable、HashMap、ConcurrentHashMap的区别

作者&#xff1a;爱塔居 专栏&#xff1a;JavaEE 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步。 Hashtable和HashMap、ConcurrentHashMap 之间的区别? HashMap:线程不安全&#xff0c;key允许为null Hashtable:线程安全&#xff0c;使用synchronized锁Hashta…
最新文章