`

HTML5数据可视化第二弹:打造最美3D机房

阅读更多

最近项目开发任务告一段落,刚好有时间整理这大半年的一些成果。使用html5时间还不久,对js的认识还不够深入。没办法,以前一直搞java,对js的一些语言特性和概念一时还转换不过来。

 

上一篇第一弹介绍了项目中做的一个彩虹爆炸图,主要用了 html5canvas2d绘制技术。这一回我想介绍一下项目中的一个亮点技术:html53D,以及如何用它打造精美的3D机房监控系统。

 

目标效果图

下图是领导给找的一张的效果参考图,客户希望机房至少能达到下面的3D效果。懂的人都知道,这可是一张设计公司出的装修效果图啊,就算是用max建模,也需要大量的工作,何况咱可是程序员在做数据中心的可视化项目啊。。。强忍心中奔腾的万千头**马,静下心来思考,那就先从搭建一个webGL的场景开始把。

  


 

WebGL基本场景搭建

html5里面使用3D已经不是什么高深技术,它的基础是WebGL,一个openGL的浏览器子集,支持大部分主要3D功能接口。目前最新的浏览器都有比较好的支持,IE需要到11(是的,你没有看错)。

 

要检测你的浏览器是否支持webGL,直接访问网页http://get.webgl.org/ 看是否能看到一个旋转的立方体。如果能看到,说明你的浏览器支持webgGL,否则,可以下一个最新的chrome试试吧。相对来说chrome对webGL的支持最好,效率也很优秀。

 

 

要在浏览器里面使用webGL,就要研究webGL相关的技术和用法。做3D应用并不是一件轻松的事。就算最简单的搭建一下webGL场景,也需要下面这些代码:

 

<script>    
    var width = window.innerWidth;  
    var height= window.innerHeight;  
    var container = document.createElement( 'div' );  
    document.body.appendChild( container );  
    var webglcanvas = document.createElement('canvas');               
    container.appendChild(webglcanvas);   
    var gl = webglcanvas.getContext("experimental-webgl");                
    
    function updateFrame () {             
      gl.viewport ( 0, 0, width, height );  
            gl.clearColor(0.4, 0.4, 0.7, 1);  
            gl.clear ( gl.COLOR_BUFFER_BIT );       
             setTimeout(   
        function(){updateFrame()},  
                20);  
         }  

    setTimeout(   
      function(){
        updateFrame();
      },  
    20);  
</script>   

 

 

html一样,需要先创建一个canvas元素,并获得其webgl上下文:

 

var gl = webglcanvas.getContext("experimental-webgl");

 

 

然后在一个updateFrame的函数中,像html52d context一样,去绘制3D的内容。另外,要再起一个死循环,每隔**毫秒调用一次这个updateFrame函数来重绘场景。2D不同,3D场景里面的变化是随时随地的,所以需要不停刷新,就像播放电影或视频,静止不动的画面基本没有,所以死循环刷新基本是必要的。不过实际项目使用中会有很多优化,尽量做到“按需刷新”,节省cpu和移动设备电量。这一点也是很重要的,有感兴趣的同学,可以单独写文章介绍。这段程序基本上什么也没做,就画了一个静止不动的区域,如下图:




虽然看不见任何3D的内容,不过它已经是一个最简单的webgl程序了。我们的精美的3D机房,也是要在这上面不断丰富而已。

 

对象封装

要做项目,搭建下去工作量太大了,时间周期也不允许。使用第三方辅助工具是不可避免的,像Three.jstwaver.js都是选择。这些工具都可以提供3D的基本对象和各种特效。当然这都不是最主要的,主要是如何利用它做出我想要的效果:好看。为了避免大量修改代码,在项目里做了一些封装,把原始3D的立方体等对象进行进一步封装,让一个json数据就可以提供这些对象的定义。这样使用起来就比较方便了。Json大致结构如下:

 

var json={	
	objects: [{
		name: '地板',
		…
	},{
	…
	}],
}

 

下面我们逐一来看这些3D对象是怎么进行美化的,过程可能稍显啰嗦,但实际工作就是这么繁琐的有木有?

 

地板和斜坡

第一个要做,也是应该比较简单的,就是地板。这个地板应该是一个有点厚度、有格子贴图的薄薄立方体平面。还好经过封装,就写一段json对象就能定义了:

 

{
		name: '地板',
		type: 'cube',
		width: 1600,
		height: 10,
		depth: 1300,
			
		style: {
			'm.color': '#BEC9BE',
			'm.ambient': '#BEC9BE',
		}
}

 

通过定义,创建一个13*16米的地板块:



 

只有颜色还不够,找一个地板砖纹理图。需要注意的是,纹理图的尺寸都需要是宽和高都是2的幂,例如128x128256*256等,这样出来效果才会好。这也是3D软件一般所要求的。另外纹理要能连续拼接不露破绽,这样才好。例如下面我google出来的图:



 

style里面添加:

 

   'top.m.texture.image': 'images/floor.png',
   'top.m.texture.repeat': new mono.Vec2(10,10),

 

 

效果如下:



有图片材质纹理,效果果然好多了。不过客户说他们这里底面有一个方便运送设备的斜坡,要画出来。这……



 
后来想到twaver里面的对象可以支持运算。可以定义一个斜的立方体,让地板剪掉立方体,应该可以做到。于是继续定义json

 

{
		name: '地板切坡',
		type: 'cube',
		width: 200,
		height: 20,
		depth: 260,
		translate: [-348,0,530],
		rotate: [Math.PI/180*3, 0, 0],
		op: '-',
		style: {
			…,
		}
	}

 这里定义的一个倾斜的立方体,通过translate定义位置,通过rotate定义旋转角度,然后再通过op定义运算符,这里是“减去”,就用“-”。被剪掉的立方体也可以设置材质、纹理、贴图、颜色….等等。看看效果:


 

 

走廊桌

按要求走廊要放一个接待桌。为了简单就偷懒做一个立方体表示吧!这个简单,继续使用上述办法:

 

{
		name: '走廊板凳',
		type: 'cube',
		width: 300,
		height: 50,
		depth: 100,
		translate: [350, 0, -500],
	}

 

效果如下:



 再
增加一点配色并启动阴影效果后,看着就好多了。尽管只是个简单的立方体,但只要和整体风格一致,并不显得简陋。很3D里面最重视的就是效率,千万不要放一些很复杂的模型,尤其是这些非业务对象。


 墙体

 

墙体是机房里很重要的一个部分,有好的光照、阴影的效果才能看起来更加逼真。由于墙体是不规则的路径,一段一段去生成还真挺麻烦的,还好引擎支持这种物体,甚至曲线路径都可以。这里只要在json里面定义一组数字的坐标,让这些数字依次连接,组成一个墙体,最后生成3D对象放入场景中就行啦。

 

json定义如下:

 

{
		name: '主墙体',
		type: 'path',
		width: 20,
		height: 200,
		translate: [-500, 0, -500],
		data:[
			[0, 0],
			[1000, 0],
			[1000, 500],
			[500, 500],
			[500, 1000],
			[0, 1000],
			[0,0],
		],
}

 

注意这里的类型变成了pathdata中定义了一个二维坐标数组来描述墙体。由于墙都是从底面开始的,所以只定义它的平面的xy坐标就行了。看看效果:



 

不如前文所说,还是需要上色、上阴影,才能有更好的效果。这里我们启用阴影并咨询设计师美眉几个颜色值,加上去,再看下效果:



 还有细节:



 


看着雪白的墙,是不是觉得少了点什么?对,就是门。在3D机房的监控系统里,门禁是很重要的一块,客户要求门应该与实际位置相对应,并且要有开门关门的动画效果。这样,实际的门禁信息采集上来后,就能在界面实时看到门的状态了。

 

这里,考虑到门如果直接放上去,会被墙盖住;如果比墙厚,又难看不符合实际。还是应该先定义一个门洞立方体,把门所在的位置挖掉:

{
		name: '门洞',
		type: 'cube',
		width: 195,
		height: 170,
		depth: 30,
		op: '-',
		translate:[-350,2,500],
}

 

刚好挖在斜坡的位置,这样设备进屋就方便了:

 



 

不过这门没有一个门框,感觉不太生动。多一个门框会感觉立体感强一些。门框可以是一个比门洞略大的立方体,在挖门洞之前添加:

{
		name: '门框',
		type: 'cube',
		width: 205,
		height: 180,
		depth: 26,
		translate: [-350, 0, 500],
		op: '+',
	}

 加上阴影和光线等综合效果,还不错,挺有档次的。

 

 来张全景图看看:



 

接着,只要把门安上去就行了。门的定义比较简单,就是一个薄的立方体。不过为了做到玻璃效果,需要设置透明度,让它看上去更像一个玻璃,再让设计师美眉弄一张好看一点的门的图,贴上去。尽管有了webGL,复杂的建模工作可以省略了,不过设计师美眉的配合仍然很重要。

先做左边的门:

{
		name: '左门',
		type: 'cube',
		width: 93,
		height: 165,
		depth: 2,
		translate:[-397,4,500],
		style:{
			'm.transparent': true,
			'm.texture.image': 'images/door_left.png',					
		}

 上面增加的style主要透明和贴图两项。看看效果:



同样的方法,再把右侧门贴上就搞定了。
为了增加体验,也是用户的要求,门上面设置了动画:双击可以自动打开,再双击可以直接关闭。动画功能引擎做好了封装,在json中直接指定动画类型就行了。不过要注意左右门的动画旋转方向要相反,要不然一个向里开一个向外开感觉比较怪异。



 

 

 

项目中,窗本身不需要有任何业务属性,但是美观度的要求可一点都不能少。方法和门类似,先放窗框后挖窗体。不过为了有点变化,这里不做窗框了,做一个窗台,方法和道理与门相同。

 

{
		name: '主窗户洞',
		type: 'cube',
		width: 420,
		height: 150,
		depth: 50, 
		translate: [200, 30, 500],
		op: '-',
	},{
		name: '主窗户台',
		type: 'cube',
		width: 420,
		height: 10,
		depth: 40, 
		translate: [200, 30, 510],
		op: '+',
	}
 

 

定义了一个窗洞(挖掉)、一个窗台(添加)。一个大窗户就做好了:



 

再添加一个略带颜色的透明玻璃。玻璃设置点高光和反射,增加“玻璃”感觉:

 

{
		name: '主窗户玻璃',
		type: 'cube',
		width: 420,
		height: 150,
		depth: 2,
		translate: [200, 30, 500],
		op: '+',
		style: {
			'm.transparent': true,
			'm.opacity':0.4,
			'm.color':'#58ACFA',
		},			
	}
 Json中玻璃设置了透明度和颜色。这样一个半透明的茶色玻璃就好了:

 

 



到这里突然在想:盖房子如果像写程序一样简单就好了,所有的程序猿就不会是无房一族单身狗了。当然写程序和盖房子一样:该封装好的要封装好,最后就是搭积木组装就行了。如果盖房子都是从挖土活泥巴开始,那就杯具了。写程序也是一样,如果从webGLmain开始写……3D机房的系统要几个月甚至几年才能做出来呢?

 

外侧墙

按照项目实际要求,继续增加更多建筑物墙体。主要是房间外侧有两道走廊隔墙。这是一个中间有大片透明玻璃的走廊隔墙,需要做的好看一点。由于是直线墙,没有复杂走向,直接用立方体定义得了:

 

{
		name: '左外墙',
		type: 'cube',
		width: 20,
		height: 200,
		depth: 1300,
		translate: [-790, 0, 0],
		op: '+',
}
 

 

效果如下:
 

再继续挖掉中间的窗户部分:

 

{
		name: '左外墙洞',
		type: 'cube',
		width: 30,
		height: 110,
		depth: 1300,
		translate: [-790, 60, 0],
		op: '-',
}
 

 



 

空白显得很奇怪,加上玻璃试试:

 

{
		name: '左外墙玻璃',
		type: 'cube',
		width: 4,
		height: 110,
		depth: 1300,
		translate: [-790, 60, 0],
		op: '+',
		style: {
			'm.transparent': true,
			'm.opacity':0.6,
		},
}
 

 

有了半透明和高光的效果,看起来就有质感了,右边也如法炮制:



 

 

这样,整个建筑的外观就基本完成了。最后,放一些绿植,增加些生气吧。

 

植物

做一盆植物,需要有一个空的花盆,花盆里面有泥土,上面有一株植物。这些东西用3D做起来都有点啰嗦。不过也不难。花盆用一个大圆柱剪掉中间的小圆柱,做成空心花盆;植物用贴图+透明模拟一下就行,不用真的去做植物的3D模型,否则要累死了。

 

 

根据上面的思路,在项目中通过仔细调整,把创建花盆的代码封装好,然后在json中定义花盆位置就行了。下面定义一个:

 

{
		name: '花1',
		type: 'plant',
		translate: [560, 0, 400],
}
 程序中解析如果typeplant则创建植物对象并添加场景。

 


 

在房间、走廊、甚至窗台上都可以放几盆,窗台上的可以通过设置scale缩小一些,并提升其高度到窗台位置即可。



 

看看下整体效果,还不赖吧。



 写了那么一大篇,才终于把3D机房的外观装修完成,咱也算是个设计师程序员的混合型人才了呢。其实机房最核心的资源——机柜,还没找落呢,没办法,形象工程也是项目建设的一大亮点。

 

机柜

机柜,以及其中的服务器设备。这才是3D机房里面最终要管理的内容。在我们的实际项目中,这些资产都是在数据库中存储,并通过json接口加载到浏览器中显示。这里为了演示方便,直接写几个机柜的片段,看一下显示效果。

 

机柜对象在项目中是这样封装的:用一个立方体来表示机柜,并加上贴图。项目中,为了提高显示速度,机柜一开始并不加载内部服务器内容,而是只显示自身一个立方体。当用户双击后,会触发一个延迟加载器,从服务器端加载机柜内部服务器,并加载到对应的位置上。此时,机柜会被挖空成一个空心的立方体,以便视觉上更像一个机柜。

 

 

定义机柜的json如下:

 

 

{
		name: '机柜',
		type: 'rack',
		lazy: true,
		width: 70,
		depth: 100,
		height: 220,
		translate: [-370, 0, -250],
		severity: CRITICAL,
	}
上面的机柜定义中,有一个lazy标记,标记它是否延迟加载其内容。如果延迟加载,则双击触发,否则程序显示时直接加载其内容。Severity是定义了机柜的告警信息,它是否有业务告警。如果有告警,会用一个气泡显示在机柜的上方,同时机柜也会被染色成告警对应的颜色。

 



加入更多的机柜看看效果: 



 

 

设备

简单起见,这里管理的设备假设都是机架设备,尺寸规格比较规整,因此比较容易在机柜中组织。一个设备的外观确定后,在数据库中定义好模板,加载时根据其所在机柜的位置放置即可。

 

 

这里只是随机生成了几个服务器设备,并按位置摆放。在实际应用中,可以通过手工录入或者智能机架报送的信息来确定服务器的类型和位置。

 



 

如果需要监控到端口级别,还可以在服务器弹出后,再进一步延迟加载设备商的板卡、端口对象,并点击后进一步进行配置、监控等操作。当然加载的数据越细,对3D引擎和浏览器的压力会越大。可以通过动态延迟加载/卸载策略,获取一些平衡折中。

 

电视机

纯属无聊,再做一个电视机挂在墙上。依旧,定义一个立方体、挖空屏幕,放上透明玻璃,再贴上我们喜欢的电视节目画面,就ok了。

 

{
		name: '电视机体',
		type: 'cube',
		width: 150,
		height: 80,
		depth: 5,
		translate: [80, 100, 13],
		op: '+',		
	},{
		name: '电视机挖空',
		type: 'cube',
		width: 130,
		height: 75,
		depth: 5,
		translate: [80, 102.5, 17],
		op: '-',
	},{
		name: '电视机屏幕',
		type: 'cube',
		width: 130,
		height: 75,
		depth: 1,
		translate: [80, 102.5, 14.6],
		op: '+',
		style: {
			'front.m.texture.image': 'images/screen.jpg',
		},
	}

 当然,实际项目中,也可以换上监控大屏幕的效果:


 

总结

整个场景写到最后,我也已经脑洞大开游刃有余了。3D场景,尤其是这类业务系统,并不一定要死抠模型的仿真度,才能做到“好看”的效果。先来一张全景看一下:



 

 

怎么样,还算精美吧?基本不输前面看到的广告公司的效果图。但和效果图一张死图片不一样,我们这是一个能操作、能漫游、能缩放、有动画、显示流畅、浏览器无需插件就能直接打开的3D机房小程序,就一个json文件和一百多行代码和一天的时间就搞定了,还是让人有点惊讶的。

 



 

不用插件、不用3Dmax,不用模型库,干干净净纯粹的小程序,手机和平板也能用哦,而且还很流畅!上一张我的Nexus5截图瞅瞅:



 

经过优化,场景加载已经控制在600毫秒以内,缩放漫游也很流畅。当然技术和美化永无止境,用户的需求也千变万化精益求精。但只要我们选择好了技术和工具,就能事半功倍。Html5就是极佳的一个选择。

 

Html5,也许它还不是银弹,但它确实是很好的一个炮弹。本文这一弹,你还喜欢吗?欢迎来信留言索取代码、技术交流:tw-service@servasoft.com

 

 

 

  • 大小: 27.1 KB
  • 大小: 341.7 KB
  • 大小: 10.5 KB
  • 大小: 26.2 KB
  • 大小: 97.9 KB
  • 大小: 43.8 KB
  • 大小: 104.9 KB
  • 大小: 126 KB
  • 大小: 126.2 KB
  • 大小: 132.3 KB
  • 大小: 144.1 KB
  • 大小: 244.5 KB
  • 大小: 110.9 KB
  • 大小: 179.6 KB
  • 大小: 125.7 KB
  • 大小: 177.5 KB
  • 大小: 134.2 KB
  • 大小: 183 KB
  • 大小: 183 KB
  • 大小: 94 KB
  • 大小: 98.1 KB
  • 大小: 124.7 KB
  • 大小: 241.8 KB
  • 大小: 151.3 KB
  • 大小: 360 KB
  • 大小: 158.6 KB
  • 大小: 281 KB
  • 大小: 293.3 KB
  • 大小: 222.6 KB
  • 大小: 415.2 KB
  • 大小: 202.1 KB
  • 大小: 395.5 KB
  • 大小: 560 KB
分享到:
评论
2 楼 qq_21380041 2018-03-08  
954414957@qq.com


1 楼 qq_21380041 2018-03-08  
楼主,求代码

相关推荐

    spring-ai-spring-boot-autoconfigure-1.0.0-M5.jar中文文档.zip

    # 【spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip】 中包含: 中文文档:【spring-ai-spring-boot-autoconfigure-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-spring-boot-autoconfigure-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-spring-boot-autoconfigure-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-spring-boot-autoconfigure-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-spring-boot-autoconfigure-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip,java,spring-ai-spring-boot-autoconfigure-***.jar,org.springframework.ai,spring-ai-spring-boot-autoconfigure,***,org.springframework.ai.autoconfigure.anthropic,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,boot,autoconfigure,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip】,再解压其中的 【spring-ai-spring-boot-autoconfigure-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-spring-boot-autoconfigure</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'org.springframework.ai', name: 'spring-ai-spring-boot-autoconfigure', version: '***' Gradle (Short): implementation 'org.springframework.ai:spring-ai-spring-boot-autoconfigure:***' Gradle (Kotlin): implementation("org.springframework.ai:spring-ai-spring-boot-autoconfigure:***") ``` # 含有的 Java package(包): ``` org.springframework.ai.autoconfigure.anthropic org.springframework.ai.autoconfigure.azure.openai org.springframework.ai.autoconfigure.bedrock org.springframework.ai.autoconfigure.bedrock.anthropic org.springframework.ai.autoconfigure.bedrock.anthropic3

    50页-道路环卫保洁服务项目管理计划方案.pdf

    在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。

    微信小程序驾校管理平台约车小程序demo完整源码下载-完整源码.zip

    微信小程序驾校管理平台约车小程序demo完整源码下载_完整源码

    MATLAB实现含风电不确定性的电力系统低碳调度模型

    内容概要:本文详细介绍了使用MATLAB和YALMIP工具包构建的电力系统低碳调度模型。该模型主要解决风电和负荷不确定性带来的挑战,采用模糊机会约束处理风电预测误差,将复杂的非线性约束转化为混合整数线性规划问题。文中展示了如何通过分段线性化、大M法等技巧提高求解效率,并实现了包括火电、水电、风电、储能等多种能源类型的综合调度。此外,还讨论了碳排放成本、启停时间约束、爬坡率约束以及储能系统的建模方法。最终,通过结果可视化展示各成本构成及其对调度策略的影响。 适合人群:从事电力系统优化研究的专业人士,尤其是熟悉MATLAB编程并希望深入了解低碳调度模型的研究人员和技术人员。 使用场景及目标:适用于需要处理风电不确定性、优化电力系统调度的研究项目。目标是降低电力生产成本的同时减少碳排放,确保电力系统的稳定性和经济性。 其他说明:代码中包含了详细的注释和扩展提示,方便进一步修改与应用。对于大规模电力系统调度问题,提供了高效的求解策略和性能优化建议。

    OFDM、OOK、PPM、QAM 的误码率模拟【绘制不同调制方案的误码率曲线】附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    my lib1.SCHLIB

    my lib1.SCHLIB

    工控领域西门子PLC动态加密计时催款程序:设备催款与规范验收的技术实现

    内容概要:本文详细介绍了西门子PLC动态加密计时催款程序的设计与实现。该程序旨在解决工控领域中常见的客户拖延付款问题。通过利用PLC的定时器功能和复杂的加密算法,程序能够在设备运行一段时间后自动触发锁机机制,提醒客户按时验收付款。主要内容包括加密计时的核心思路、代码示例与分析、动态加密的具体实现方法以及柔性锁机的应用技巧。此外,文中还提供了具体的SCL代码片段,展示了如何通过时间校验、动态密钥生成和渐进式降速等方式实现灵活的锁机控制。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是负责PLC编程和设备管理的专业人士。 使用场景及目标:适用于设备调试完成后客户拖延付款或拒绝验收的场景。主要目标是通过技术手段保障供应商的合法权益,促进客户按时履约,减少因款项延迟带来的经济损失。 其他说明:文中强调了技术催款并非为了惩罚客户,而是为了建立良好的契约精神。同时,作者分享了一些实用的经验和技巧,如设置合理的调试接口、时间缓冲期和操作提示,确保程序既有效又人性化。

    75页-智慧环卫平台解决方案(2022).pdf

    在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。

    spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar中文-英文对照文档.zip

    # 【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar中文-英文对照文档.zip,java,spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar,org.springframework.ai,spring-ai-auto

    MATLAB多目标粒子群算法优化冷热电联供系统运行成本与能效

    内容概要:本文介绍了利用MATLAB实现多目标粒子群算法(MOPSO),用于优化冷热电联供(CCHP)系统的运行。文中详细描述了系统架构,包括燃气轮机、电制冷机、锅炉以及风光机组等设备的协同工作。通过引入多目标优化,同时追求最低运行成本和最高综合能效。算法实现了自适应惯性权重调整、动态边界处理、非支配排序等关键技术,显著提升了优化性能。实验结果显示,相比传统方案,该方法能够节省15%以上的运营成本,并提高系统能效23.7%,减少碳排放18.2%。 适用人群:从事能源管理、电力系统优化的研究人员和技术人员,尤其是对MATLAB编程有一定基础的人士。 使用场景及目标:适用于需要进行冷热电联供系统优化的企业或研究机构,旨在寻找成本与能效之间的最佳平衡点,提供多种可供选择的优化方案,帮助决策者制定合理的运行策略。 其他说明:代码设计注重实用性,包含详细的注释和模块化的文件结构,便于理解和修改。此外,还提供了24小时调度结果的三维可视化展示,直观地反映了不同目标间的权衡关系。

    【医疗影像分析】深度学习技术在医学影像诊断中的多维度优势及典型应用:从自动特征提取到临床价值创造

    内容概要:深度学习在医疗影像分析中展现出多维度的优势。首先,它能够自动特征提取并高效学习,通过多层神经网络自动识别医学影像中的复杂特征,无需人工干预,并能整合多种模态的数据,如CT、MRI、X光等,结合患者其他信息建立更全面的诊断模型。其次,在高精度诊断与效率提升方面,深度学习模型在多个任务中的准确率普遍超过90%,基于GPU加速的模型还能实现快速影像分析。第三,其具有复杂的场景适应性与创新应用,可以进行精准分割、三维重建以及长尾问题与罕见病的识别。第四,从临床价值来看,它减轻了医生的工作负担,促进了医疗资源的公平化。最后,深度学习还具有良好的可扩展性,支持跨学科研究,开源生态也有助于标准化建设。尽管存在数据标注依赖、模型可解释性和计算资源限制等问题,但深度学习的应用正逐步从辅助诊断向精准治疗、预后预测等全流程渗透。 适合人群:医疗影像研究人员、临床医生、AI医疗从业者。 使用场景及目标:①了解深度学习在医疗影像分析中的具体优势和技术细节;②探索深度学习应用于医疗影像分析的新思路和新方法;③评估深度学习技术在实际临床环境中的可行性。 其他说明:深度学习虽然具有诸多优势,但在实际应用中还需考虑数据标注质量、模型可解释性和计算资源等因素,同时应关注技术创新与伦理规范的平衡。

    塘沽市民滨海旅游与生态意识的调查报告.doc

    塘沽市民滨海旅游与生态意识的调查报告.doc

    spring-ai-mcp-1.0.0-M6.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    UDQsinepwm_1p_UPFC.png

    UDQsinepwm_1p_UPFC

    spring-ai-zhipuai-1.0.0-M6.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    3dmax插件LMExporter.ms

    3dmax插件LMExporter

    基于MATLAB的多目标遗传算法在分布式电源选址定容中的应用与优化

    内容概要:本文详细介绍了利用MATLAB实现多目标遗传算法(MOGA)解决分布式电源选址定容问题的方法。首先,通过建立33节点配电网模型,采用稀疏矩阵表示线路连接关系,简化了存储结构。接着定义了三个主要目标函数:降低网损、减少总容量成本以及提高电压稳定性。为了加快算法收敛速度,在种群初始化时引入了定向变异策略,并在交叉变异过程中加入局部搜索。此外,针对不同场景采用了前推回代法和牛顿拉夫逊法相结合的潮流计算方法,确保计算精度的同时提高了效率。最后,通过Pareto前沿曲线展示了多种可行解之间的权衡关系,帮助决策者根据实际情况做出最佳选择。 适用人群:从事电力系统规划、分布式能源管理和智能电网研究的专业人士和技术爱好者。 使用场景及目标:适用于需要综合考虑电网损耗、投资成本和电压稳定性的分布式电源选址定容项目。旨在寻找最优的电源安装位置及其容量配置方案,从而提升整个配电系统的性能。 其他说明:文中提到的技术细节如稀疏矩阵的应用、混合潮流计算方法等对于提高算法效率至关重要;而Pareto前沿曲线则有助于直观地理解和比较不同的设计方案。

    【误差自适应跟踪方法AUV】自适应跟踪(EAT)方法研究附Matlab代码&Simulin.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    spring-ai-mongodb-atlas-store-1.0.0-M5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    COMSOL软件中永磁体磁场分布仿真的详细指南与技巧

    内容概要:本文深入探讨了使用COMSOL进行永磁体磁场分布仿真的方法和技术要点。首先介绍了永磁体的基本建模步骤,强调了磁化方向、材料参数和边界条件设置的重要性。接着讨论了网格划分的技巧,特别是在磁场变化剧烈区域的手动加密方法。然后讲解了仿真后的数据处理和可视化手段,如切片图、箭头图和流线图的应用。此外,文中还分享了一些常见的错误及其解决办法,以及如何通过参数化扫描优化仿真结果。最后,作者通过具体案例展示了如何利用COMSOL进行复杂磁场分布的模拟,并提供了多个实用的代码片段。 适合人群:从事电磁场仿真工作的科研人员、工程师及研究生。 使用场景及目标:帮助用户掌握COMSOL中永磁体磁场仿真的全流程,提高仿真的准确性和效率,适用于教学、科研和工业设计等领域。 其他说明:文章不仅涵盖了理论知识,还包括大量实战经验和技巧,能够有效指导初学者和有一定基础的研究人员更好地理解和应用COMSOL进行磁场仿真。

Global site tag (gtag.js) - Google Analytics