cesium很全的入门教程-翻译官网和加入自己理解

2023-11-19

Cesium WorkShop-cesium快速入门教程

快速入门教程基本涵盖了大多数的CesiumJS API概念,主要用于Cesium基本入门,对Cesium有全面基本的了解和使用

一、概述

本教程会一步一步教会你做一个项目,主要介绍如下内容:

  1. 配置1个Cesium viewer
  2. 加载各种数据集
  3. 创建几何和设置样式
  4. 加载3D Tiles
  5. 控制相机
  6. 添加鼠标交互
  7. 学完后你将会创建如下项目
    项目图片

二、前期准备

  1. 下载 workshop code
  2. 在vscode中打开cesium-workshop 目录.
  3. Run npm install.安装需要的依赖
  4. Run npm start.服务会使用node.js启动,主要根据服务中的server.js配置文件启动,也可以直接使用其他服务器启动,不需要 server.js

2.1 workshop code目录结构

  • Source/ : js业务逻辑和一些数据.
  • ThirdParty/ : 可以引用其他类库,如 CesiumJS library.
  • LICENSE.md : Terms of use for this application.
  • index.html : 主页.
  • server.js : 服务会使用node.js启动,主要根据服务中的server.js配置文件启动.
    因此,我们主要使用index.html和app.js两个文件进行本项目的编写工作,如果你下载了workshop code工程,可以看到里面的代码是写好的,我们主要需要学会每行代码的意义和使用方法。
    该项目完整的演示效果:演示地址

2.2 从index.html开始

  1. 引入cesium类库,在源码中运行npm run build会将所有的源码创建快捷索引到一个ceiusm.js文件中,该文件只是对所有源码创建了快捷入口方式,不同于npm run release,可以使用该文件进行源码调试 创建一个App.js逻辑文件或者index.js,来初始化三维地球,里面就是写var viewer = new Cesium.Viewer('cesiumContainer');初始化等功能
  2. 导入cesium样式文件,@import url(ThirdParty/Cesium/Widgets/widgets.css);

让我们正式开始吧


三、创建一个地球视窗

var viewer = new Cesium.Viewer('cesiumContainer',option);

Viewer是一个综合,包含中心的地球globe,周围的控件widget,如果只需要一个地球的话,使用可以cesiumwidget()来初始化,viewer的内部源码就是使用了cesiumwidget()创建地球,并创建一些div来生成widget控件
视图列子

  1. Geocoder : 地名地址搜索,地点搜索默认使用bing地图. Uses Bing Maps data by default.
  2. HomeButton : 主页视图,可覆盖该方法,自定义主页视图.
  3. SceneModePicker : 不解释。Switches between 3D, 2D and Columbus View (CV) modes.
  4. BaseLayerPicker : 不解释。Chooses the imagery and terrain to display on the globe.
  5. NavigationHelpButton :帮助信息,没啥用。 Displays the default camera controls.
  6. Animation : 一般去掉。Controls the play speed for view animation.
  7. CreditsDisplay : 使用代码可以去掉版权信息:viewer._cesiumWidget._creditContainer.style.display=“none”;
  8. Timeline : 不显示一般。Indicates current time and allows users to jump to a specific time using the scrubber.
  9. FullscreenButton : Makes the Viewer fullscreen.
var viewer = new Cesium.Viewer('cesiumContainer', {
    scene3DOnly: true,
    selectionIndicator: false,
    baseLayerPicker: false
});

四、Cesium ion

Cesium的数据服务器,功能很强大,但是国内一般不用

4.1 添加影像地图Adding Imagery

支持的 Imagery Formats:
WMS
TMS
WMTS (with time dynamic imagery)
ArcGIS
Bing Maps
Google Earth
Mapbox
Open Street Map
Cesium提供了不同的接口加载上述几种类型的服务,但都是使用ImageryProvider来加载,可通过该链接查看所有接口类型many different providers
示例如下:

// 去掉默认底图bing   Remove default base layer
viewer.imageryLayers.remove(viewer.imageryLayers.get(0));

// Add Sentinel-2 imagery
viewer.imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({ assetId : 3954 }));

通过以上示例可以知道,默认的Cesium会加载一个底图,是bingMap底图,网络不太好,一般要先去掉这个默认的,加载我们自己的

五、添加地形服务Adding Terrain

示例代码如下:

// Load Cesium World Terrain
viewer.terrainProvider = Cesium.createWorldTerrain({
    requestWaterMask : true, // required for water effects
    requestVertexNormals : true // required for terrain lighting
});
// Enable depth testing so things behind the terrain disappear.
viewer.scene.globe.depthTestAgainstTerrain = true;

requestVertexNormals是地形光照效果,需要打开场景光源支持,depthTestAgainstTerrain是地形遮挡效果开关,打开后地形会遮挡看不到的区域

六、配置Scene


重点标注:影像和地形都是加载scene中的globe对象上的,但是其他的entiy和3dtiles等,是加载在scene上的,和globe是同级别的,关闭globe,entiy等也会显示


6.1 场景中的坐标概念简介:

  • Cartesian3 : 世界坐标系,坐标原点在globe球心的一个坐标系,坐标值是以米为单位,所以Cartesian3的坐标值大多是地球的半径那么大的数值。a 3D Cartesian coordinate – when used as a position it is relative to the center of the globe in meters using the Earth fixed-frame (ECEF)
    世界坐标系

  • Cartographic : WGS84-就是经纬度坐标系,地球的经纬度值,单位是度,如118°。a position defined by longitude, latitude (in radians) and height from the WGS84 ellipsoid surface

  • 局部坐标系:啥叫局部坐标系呢?很简单,就是你自己在地球上找个经纬度点,把他当原点,形成一个坐标系。
    看代码:

// Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame.
var center = Cesium.Cartesian3.fromDegrees(118.0, 30.0);
var transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);

我们把坐标原点移动到了118.0, 30.0这个地方,x轴指向东,y轴指向北,还有northEastDownToFixedFrame等不同的方向坐标轴

  • HeadingPitchRoll : HPR地球视角上下左右偏移调整,参考博客相机中的HeadingPitchRoll
    20200413181720

  • Quaternion : 行话为四元数,其实就是使一个物体围绕指定的轴旋转多少角度。和旋转方法,旋转矩阵是同步改变的。(A 3D rotation represented as 4D coordinates.)

6.2 相机控制(Camera Control)

viewer.scene.Camera ,就是单纯的实现视角的各种移动缩放等

  • Camera.setView(options) : 直接定位到一个视角,没动画set camera at specific position and orientation immediately
  • Camera.zoomIn(amount) : 缩放多少米move camera forward along the view vector
  • Camera.zoomOut(amount) : 缩放多少米move camera backwards along the view vector
  • Camera.flyTo(options) : 最常用,有动画过程create an animated camera flight from the current camera position to a new position
  • Camera.lookAt(target, offset) : 定位到一个点,并以这个点为中心锁定orient and position the camera to look at target point with given offset
  • Camera.move(direction, amount) : 平移一定距离move the camera in any direction
  • Camera.rotate(axis, angle) : 旋转rotate the camera about any axis
    示例:
// Create an initial camera view
var initialPosition = new Cesium.Cartesian3.fromDegrees(-73.998114468289017509, 40.674512895646692812, 2631.082799425431);
var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(7.1077496389876024807, -31.987223091598949054, 0.025883251314954971306);
var homeCameraView = {
    destination : initialPosition,
    orientation : {
        heading : initialOrientation.heading,
        pitch : initialOrientation.pitch,
        roll : initialOrientation.roll
    }
};
// Set the initial view
viewer.scene.camera.setView(homeCameraView);

可以修改cesium默认的主页按钮定位位置

// Add some camera flight animation options
homeCameraView.duration = 2.0;//飞行用时
homeCameraView.maximumHeight = 2000;//飞行过程中最大高度
homeCameraView.pitchAdjustHeight = 2000;
homeCameraView.endTransform = Cesium.Matrix4.IDENTITY;
// Override the default home button覆盖home默认事件
viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) {
    e.cancel = true;
    viewer.scene.camera.flyTo(homeCameraView);
});

坐标系转换:参考

6.3 Clock Control

这个在沿着路线飞行漫游的时候能用到,暂时不会,后期补充,举个使用列子吧在这

// Set up clock and timeline.
viewer.clock.shouldAnimate = true; // make the animation play when the viewer starts
viewer.clock.startTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");
viewer.clock.stopTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:20:00Z");
viewer.clock.currentTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");
viewer.clock.multiplier = 2; // sets a speedup
viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER; // tick computation mode
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; // loop at the end
viewer.timeline.zoomTo(viewer.clock.startTime, viewer.clock.stopTime); // set visible range

七、加载Entities

Entities相较于Primitive接口更加简单直观,是对Primitive封装
常见的Entities:

  • Polygon
  • Polyline
  • Billboard
  • Label
    可以使用viewer.entities.add()方法直接添加entity到一个默认的dataSource里面,DataSource是添加各种entity的集合,默认有一个defaultDataSource,viewer.entities.add()如果不知道加载到哪个DataSource里面,就会被默认加载到defaultDataSource里。
    DataSource有一下几类:
  • CustomDataSource-就是最常见的添加Entity类型的
var dataSource = new Cesium.CustomDataSource('myData');

var entity = dataSource.entities.add({
   position : Cesium.Cartesian3.fromDegrees(1, 2, 0),
   billboard : {
       image : 'image.png'
   }
});

viewer.dataSources.add(dataSource);
  • CzmlDataSource-加载czml文件格式的数据
  • GeoJsonDataSource-加载geojson格式的数据
var viewer = new Cesium.Viewer('cesiumContainer');
viewer.dataSources.add(Cesium.GeoJsonDataSource.load('../../SampleData/ne_10m_us_states.topojson', {
  stroke: Cesium.Color.HOTPINK,
  fill: Cesium.Color.PINK,
  strokeWidth: 3,
  markerSymbol: '?'
}));
  • KmlDataSource-加载kml格式的数据
var kmlOptions = {
    camera : viewer.scene.camera,
    canvas : viewer.scene.canvas,
    clampToGround : true
};
// Load geocache points of interest from a KML file
// Data from : http://catalog.opendata.city/dataset/pediacities-nyc-neighborhoods/resource/91778048-3c58-449c-a3f9-365ed203e914
var geocachePromise = Cesium.KmlDataSource.load('./Source/SampleData/sampleGeocacheLocations.kml', kmlOptions);

// Add geocache billboard entities to scene and style them
geocachePromise.then(function(dataSource) {
    // Add the new data as entities to the viewer
    viewer.dataSources.add(dataSource);

        // Get the array of entities
    var geocacheEntities = dataSource.entities.values;

    for (var i = 0; i < geocacheEntities.length; i++) {
        var entity = geocacheEntities[i];
        // Add geocache billboard entities to scene and style them

        if (Cesium.defined(entity.billboard)) {
            // 贴地形Adjust the vertical origin so pins sit on terrain
            entity.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;
            // 去掉自带的标注,不显示那么乱--Disable the labels to reduce clutter
            entity.label = undefined;
            // 按照缩放距离显示Add distance display condition
            entity.billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(10.0, 20000.0);

               // Compute longitude and latitude in degrees
            var cartographicPosition = Cesium.Cartographic.fromCartesian(entity.position.getValue(Cesium.JulianDate.now()));
            var longitude = Cesium.Math.toDegrees(cartographicPosition.longitude);
            var latitude = Cesium.Math.toDegrees(cartographicPosition.latitude);
            // Modify description
            // Modify description
            var description = '<table class="cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter"><tbody>' +
                '<tr><th>' + "Longitude" + '</th><td>' + longitude.toFixed(5) + '</td></tr>' +
                '<tr><th>' + "Latitude" + '</th><td>' + latitude.toFixed(5) + '</td></tr>' +
                '</tbody></table>';
            entity.description = description;
            // entity styling code here

            // Set the polygon material to a random, translucent color.
            entity.polygon.material = Cesium.Color.fromRandom({
                red : 0.1,
                maximumGreen : 0.5,
                minimumBlue : 0.5,
                alpha : 0.6
            });

            // 面贴地或者贴3dties---Tells the polygon to color the terrain. ClassificationType.CESIUM_3D_TILE will color the 3D tileset, and ClassificationType.BOTH will color both the 3d tiles and terrain (BOTH is the default)
            entity.polygon.classificationType = Cesium.ClassificationType.TERRAIN;

            // entity styling code here

            // Generate Polygon position
            var polyPositions = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now()).positions;
            //求一个面的中心点坐标
            var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center;
            polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);
            entity.position = polyCenter;
            // Generate labels
            entity.label = {
                text : entity.name,
                showBackground : true,
                scale : 0.6,
                horizontalOrigin : Cesium.HorizontalOrigin.CENTER,
                verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
                distanceDisplayCondition : new Cesium.DistanceDisplayCondition(10.0, 8000.0),
                disableDepthTestDistance : 100.0
            };
// Add computed orientation based on sampled positions根据位置自动调整朝向
            entity.orientation = new Cesium.VelocityOrientationProperty(entity.position);
            // Smooth path interpolation路径插值,就是在两点直接移动过程中,使物体的移动平滑
drone.position.setInterpolationOptions({
    interpolationDegree : 3,
    interpolationAlgorithm : Cesium.HermitePolynomialApproximation
});
            
        }
    }
});


代码说明

  1. clampToGround意思是添加的entity到dem上,而不是wgs84的球面
  2. load加载数据都是异步加载的,所以会返回一个Promise—Promise是ES6解决ajax循环请求问题的。
  3. entity.description是修改这个默认弹框信息: entity.description
  4. entity.polygon.classificationType = Cesium.ClassificationType.TERRAIN;可以把面贴地,或者贴3dtiles表面
  5. Cesium.BoundingSphere.fromPoints(polyPositions).center;计算几何中心
  6. Property Types Demo动态效果实现用到了cesium中的property属性功能
  7. 根据position自动计算entity的方向。VelocityOrientationProperty
  8. setInterpolationOptions就是使用插值算法,使模型在两点直接移动过程中,在两点之间进行插值,使移动更平滑

property介绍–参考vtxf博客

比如一个entity中很多值都是属性property类型new Cesium.Entity({position:PositionProperty,orientation:property}),这个属性值是Cesium提供的一种机制,让某个property比如positioon可以随时间自动发生变化,自动赋予不同的数值(位置)。这也就是property的作用了。
动图

// 创建盒子
var blueBox = viewer.entities.add({
    name : 'Blue box',
    position: Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0),
    box : {
        dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material : Cesium.Color.BLUE,
        outline: true,
    }
});

    var property = new Cesium.SampledProperty(Cesium.Cartesian3);

    property.addSample(Cesium.JulianDate.fromIso8601('2019-01-01T00:00:00.00Z'), 
        new Cesium.Cartesian3(400000.0, 300000.0, 200000.0));
    
    property.addSample(Cesium.JulianDate.fromIso8601('2019-01-03T00:00:00.00Z'), 
        new Cesium.Cartesian3(400000.0, 300000.0, 700000.0));

    blueBox.box.dimensions = property;

以上代码的意思就是在两个不同的时间点分别赋予不同的位置,用SampledProperty包装成一个property,最后赋给blueBox.box.dimensions。

由此可见,Property最大的特点是和时间相互关联,在不同的时间可以动态地返回不同的属性值。而Entity则可以感知这些Property的变化,在不同的时间驱动物体进行动态展示。

Cesium宣称自己是数据驱动和time-dynamic visualization,这些可都是仰仗Property系统来实现的。

通俗讲就是比如position属性不只是能赋值一个固定的坐标,还能赋值一个有时间和位置组成的数组对象。
属性的作用是可以实现漫游飞行功能:
漫游飞行实现Interpolation

八、3D Tiles

简介
开源介绍
格式介绍
The 3D Tiles Inspector
各类示例

加载3dtiles

// Load the NYC buildings tileset
var city = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(75343) }))

添加样式

cesium专门提供了3D Tiles styling language

var defaultStyle = new Cesium.Cesium3DTileStyle({
    color : "color('white')",
    show : true
});
//按照条件
var heightStyle = new Cesium.Cesium3DTileStyle({
    color : {
        conditions : [
            ["${Height} >= 300", "rgba(45, 0, 75, 0.5)"],
            ["${Height} >= 200", "rgb(102, 71, 151)"],
            ["${Height} >= 100", "rgb(170, 162, 204)"],
            ["${Height} >= 50", "rgb(224, 226, 238)"],
            ["${Height} >= 25", "rgb(252, 230, 200)"],
            ["${Height} >= 10", "rgb(248, 176, 87)"],
            ["${Height} >= 5", "rgb(198, 106, 11)"],
            ["true", "rgb(127, 59, 8)"]
        ]
    }
});

九、鼠标点击交互事件Interactivity

鼠标事件主要有左键,右键,滚轮键盘,鼠标移动事件,使用ScreenSpaceEventHandler来获取相应的事件

//鼠标移动事件捕捉
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(movement) {}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

鼠标事件主要用于捕捉选择场景中添加的各种数据,选择到数据后,便可以对数据进行各种展示处理操作,选择场景中的数据的方式主要使用pick()函数,目前有一下几类:

  • Scene.pick : 选择一个图元。returns an object containing the primitive at the given window position.
  • Scene.drillPick : returns a list of objects containing all the primitives at the given window position.
  • Globe.pick : returns the intersection point of a given ray with the terrain.

高亮示例,移动高亮,移除恢复:

// If the mouse is over a point of interest, change the entity billboard scale and color
var previousPickedEntity = undefined;
handler.setInputAction(function(movement) {
    var pickedPrimitive = viewer.scene.pick(movement.endPosition);

    //获取鼠标的经纬度位置
    var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid);
    if (cartesian) {
        var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
        var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2);
        var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);

        entity.position = cartesian;
        
    }

    var pickedEntity = (Cesium.defined(pickedPrimitive)) ? pickedPrimitive.id : undefined;
    // Unhighlight the previously picked entity
    if (Cesium.defined(previousPickedEntity)) {
        previousPickedEntity.billboard.scale = 1.0;
        previousPickedEntity.billboard.color = Cesium.Color.WHITE;
    }
    // Highlight the currently picked entity
    if (Cesium.defined(pickedEntity) && Cesium.defined(pickedEntity.billboard)) {
        pickedEntity.billboard.scale = 2.0;
        pickedEntity.billboard.color = Cesium.Color.ORANGERED;
        previousPickedEntity = pickedEntity;
    }
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

可以使用camera.pickEllipsoid来获取鼠标移动过程中的位置信息:

 //获取鼠标的经纬度位置
    var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid);
    if (cartesian) {
        var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
        var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2);
        var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);

        entity.position = cartesian;
        
    }

高亮选择的3dtiles边缘示例

3D Tiles Feature Picking Demo

十、Camera Modes

viewer.trackedEntity可以让视角一直跟着某个entity走,漫游模式。

// Create a follow camera by tracking the drone entity
function setViewMode() {
    if (droneModeElement.checked) {
        viewer.trackedEntity = drone;
    } else {
        viewer.trackedEntity = undefined;
        viewer.scene.camera.flyTo(homeCameraView);
    }
}

十一、参考资料

西部世界Cesium资料大全
Cesium学习系列汇总

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cesium很全的入门教程-翻译官网和加入自己理解 的相关文章

  • IDE + ChatGPT,这款编辑器真的做到可以自动写代码了!

    前言 Cursor 是集成了 GPT 4 的 IDE 工具 目前免费并且无需 API Key 支持 Win Mac Linux 平台 可以按要求生成代码 或者让 AI 帮助优化代码 分析代码 Cursor目前已经集成了openai的GPT
  • 月入过万——网店推广实战方法(第2版)

    月入过万 网店推广实战方法 第2版 本书以淘宝网为例 结合各种案例全面介绍了网店推广宣传的各种方法 手把手教读者如何运用这 些方法来增加网店的客流量和成交量 这些方法也同样适合于拍拍等网店 对其内容详细阅读
  • C++ 每个学生的数据包括:学号、姓名、3门课的成绩...

    1 每个学生的数据包括 学号 姓名 3门课的成绩 3门课的平均分 3门课的总分是 学生类的数据成员 实现以下功能 1 从键盘输入10个学生数据 2 打印出10个学生各课程的平均分 3 输出总分最高分同学的所有信息 Student h inc
  • 电商APP开源

    电商APP开源 https github com myxh CoolShopping 效果demo CoolShopping 一个仿拉手团购的购物App 采用Bmob后台实现短信验证码注册 登录 收藏 订单管理 自动更新等功能 数据抓取自拉

随机推荐

  • 数据结构--排序之快速排序

    个人主页 你帅你先说 欢迎点赞 关注 收藏 既选择了远方 便只顾风雨兼程 欢迎大家有问题随时私信我 版权 本文由 你帅你先说 原创 CSDN首发 侵权必究 快速排序基本思想及其代码实现 快速排序是Hoare于1962年提出的一种二叉树结构的
  • C++连接Mysql查询结果中文乱码问题

    在写项目时需要用到mysql数据库 使用select查询时查询结果中文全部变为问号 但是在Sql中查询结果正常 解决方案 MYSQL my fd mysql init NULL msyql query my fd set names utf
  • 电子元器件学习笔记2:电容器

    电容器 1 概述 电容器是一个电子元件 用于存储电荷和能量 它由两个导体板和介质组成 介质层位于两个导体板之间 当电容接入电路时 负电荷被存储在导体板上 并在两板之间产生电场 电容器的单位是法拉 F 一个法拉等于存储一库伦电荷所需的电势差为
  • JAVA中 成员变量和和实例变量一样吗

    Java语言支持的变量类型有 局部变量 成员变量 类变量 不一样的 例如 public class A String id 实例变量 private String Tel 实例变量 private int size 实例变量 private
  • SIP与RTP综合应用(转)

    SIP是一个会话协议 很多大企业都在用 通信行业的一个标准 其业务逻辑比较 简单地来说如下 User Agent Server REGISTER gt lt 401 407 Unauthorized REG 带上用户口令 gt 200 OK
  • java单元测试覆盖率(clover+testng)

    1 testng 介绍 TestNG是一个旨在简化各种测试需求的测试框架 从单元测试 将一个类与其他类分开测试 到集成测试 对由多个类 几个程序包甚至几个外部框架组成的整个系统进行测试 开源免费 基于以maven组件的形式 引入项目 需要修
  • 分享维基百科里的深度学习简介

    简介 编辑 深度学习框架 尤其是基于人工神经网络的框架可以追溯到1980年福岛邦彦提出的新认知机 2 而人工神经网络的历史更为久远 1989年 燕乐存 Yann LeCun 等人开始将1974年提出的标准反向传播算法 3 应用于深度神经网络
  • 【Electron-Vue】构建桌面应用(41)- Electron程序第一次启动时会有短暂的空白页面

    使用Electron开发的时候 会发现安装后第一次启动会出现短暂的空白大概是1 3秒不等 起初是以为在创建窗口的时候会去加载html页面 在加上vue组件的渲染 导致在启动的时候会出现几秒的空白页面 然后渲染之后 就能正常显示 之后的下次启
  • 数据分析整体框架之落地全流程讲解

    小飞象 交流会 人生没有四季 只有两季 努力就是旺季 不努力就是淡季 内部交流 11期 数据分析整体框架 之落地全流程 data analysis 分享人 刘珍珍 数据分析的目的是把隐藏在杂乱无章的数据背后的信息集中和提炼出来 总结出研究对
  • 突破自定义View性能瓶颈

    在Android应用程序中 自定义View是一个非常常见的需求 自定义View可以帮助您创建独特的UI元素 以满足您的应用程序的特定需求 然而 自定义View也可能会导致性能问题 特别是在您的应用程序需要处理大量自定义View的情况下 在本
  • ssm分离增删改查总结

    1后台api 知识点 spring核心 springMVC MyBatis SSM整合实质 service中要访问到mapper 要求mapper代理的对象要交给spring容器 mybatis的事务管理能力弱 事务管理交给spring 搭
  • QT模拟鼠标事件,实现点击双击移动拖拽等

    之前有涉及过一个远程桌面控制的项目 需要传一些指令给远程的电脑 实现简单的桌面点击 移动 拖拉等功能 当时没有时间实现得很好 今天又研究了一下 故此记录 虽然我用的是QT 但核心涉及的还是系统的API 所以其他平台应该也是一样的 废话不多说
  • 决战k8s,Kubernetes、Master节点部署组件,部署kube-proxy、测试、部署Dashboard(Web UI)、超细详解 ,安装篇③完结篇

    文章目录 下面这些操作在master节点完成 创建kubeconfig文件 创建kube proxy kubeconfig文件 下面这些操作在node节点完成 俩个节点上面拉取镜像 systemd管理kubelet组件 部署kube pro
  • 软件测试金融测试岗位,本人亲面

    网上银行转账是怎么测的 设计一下测试用例 回答思路 宏观上可以从质量模型 万能公式 来考虑 重点需要测试转账的功能 性能与安全性 设计测试用例可以使用场景法为主 先列出转账的基本流和备选流 然后设计场景 最后根据场景设计数据 实际面试中需要
  • HLSL 偏导数 ddx / ddy

    HLSL ddx ddy 在光栅化的时刻 GPUs会在同一时刻并行运行很多Fragment Shader 但是并不是一个pixel一个pixel去执行的 而是将其组织在2x2的一组pixels分块中 去并行执行 偏导数就正好是计算的这一块像
  • 如何正确理解JavaScript中的函数和方法

    你真的了解JavaScript的函数和方法吗 你知道它们有什么区别吗 你知道它们是如何定义和调用的吗 你知道它们是如何影响this值的吗 如果你对这些问题感到迷茫 那么本文就是为你准备的 本文将从基础开始 详细解释函数和方法的概念 特点 用
  • 教你实现微信8.0『炸裂』的表情特效

    写在开头 最近微信更新了8 0 其中之一最好玩的莫过于表情包的更新了 大家都在群里纷纷玩起了表情包大战 作为一个前端程序员 这就勾起了我的好奇心 虽然我从来没有实现过这样的动画 但是我还是忍不住想要去实现 最终我花了2天时间去看一些库的源码
  • IDEA 搭建ssm框架 (非maven)

    之前学习的时候大多都是使用maven搭建 但今天想尝试一下不使用maven 但是配置文件都差不多 只不过不使用maven的不用去配置pom xml 而是需要自己导入相应的包 废话不多说 直接开整 1 先看一下我的项目结构 我的项目就只是新建
  • js中parseInt()与parseFloat(),Number(),Boolean(),String()转换

    js将字符串转数值的方法主要有三种 转换函数 强制类型转换 利用js变量弱类型转换 1 转换函数 js提供了parseInt 和parseFloat 两个转换函数 前者把值转换成整数 后者把值转换成浮点数 只有对String类型调用这些方法
  • cesium很全的入门教程-翻译官网和加入自己理解

    Cesium WorkShop cesium快速入门教程 快速入门教程基本涵盖了大多数的CesiumJS API概念 主要用于Cesium基本入门 对Cesium有全面基本的了解和使用 一 概述 本教程会一步一步教会你做一个项目 主要介绍如