真实图形学(光照模型)

2023-11-08

一 、颜色模型
 
     真实感图形学,简单地说,就是希望用计算机生成像照相机拍的照片一样逼真的图形图像 。要实现这个目标,需要三部曲:
  • 第一步:建立三维场景(建模);
  • 第二步:消隐解决物体深度的显示及确定物体之内的相互关系;
  • 第三步:在解决了消隐问题之后,在可见面上进行明暗光泽的处理,然后进行绘制(渲染)。
 
一 、颜色模型概述
    
      颜色:人的视觉系统对可见光的感知结果,感知到的颜色由光波的波长决定。人眼对于颜色的观察和处理是一种生理和心理现象 。视觉系统能感觉的波长范围为380~780nm 。
 
     颜色模型 (空间) 表示颜色的一种数学方法,人们用它来指定颜色和标定产生的颜色。通常用三个参数表示。几乎所有的颜色模型都是从RGB颜色模型导出。现有颜色模型还没有一个完全符合人的视觉感知特性、颜色本身的物理特性或发光物体和光反射物体的特性 。
 
  • RGB 颜色工业模型
                   
        如图所示,单位立方体中的三个角对应红色(R)、绿色(G)、蓝色(B)三基色,而其余三个角分别对应于三基色的补色——青色(C)、黄色(Y)、品红色(M) 。
        从RGB单位立方体的原点即黑色(0,0,0)到白色顶点(1,1,1)的主对角线被称为灰度线,线上所有的点具有相等的分量,产生灰度色调 。
  • 其它颜色工业模型
         主要用于彩色电视信号传输标准,主要有YIQ、 YUV、YCbCr彩色模型。三种彩色模型中,Y分量均代表黑白亮度分量,其余分量用于显示彩色信息。这样,只需利用Y分量进行图像显示,彩色图像就转换为灰度图 。
  • 颜色视觉模型
        以上彩色模型是从色度学或硬件实现的角度提出的,但用色调(Hue)、饱和度(Saturation,也称彩度)、亮度(Illumination)三要素来描述彩色空间能更好地与人的视觉特性相匹配 。
        颜色的三个基本属性( 也称人眼视觉三要素)
  •  色调(Hue):由物体反射光线中占优势的波长决定的,是彩色互相区分的基本特性。
  • 饱和度(Saturation)或彩度:彩色的深浅程度,它取决于彩色中白色的含量。饱和度越高,彩色越深,白色光越少。
  • 亮度(Illumination):光波作用于感受器所发生的效应,它取决于物体的反射系数。反射系数越大,物体亮度越大
 
HSI彩色模型是截面为三角形或 圆形的锥体模型
        
 
色调(H)也称为色相,指颜色的外观,色调H用角度表示:如赤橙黄绿青蓝紫,角度从(红)→(绿)→(蓝)→ (红)。
 
 

饱和度,分成 :
  • 低(0%~20%),不管色调如何而产生灰色;
  • 中(40%~60%),产生柔和的色泽(pastel);
  • 高(80%~100%),产生鲜艳的颜色(vivid color)。
 
强度(Intensity)是颜色的亮度(Illumination);
  • 取值范围从0%(黑)~100%(最亮);
  • 强度也指明度(value)或光亮度(lightness或Brightness) 。
 
  • 其他颜色视觉模型
        HSV(hue, saturation and value) 彩色模型 ,HSL采用亮度L(lightness)、HSV采用明度V(value)作为坐标
     
 
二 、 简单光照模型
 
1、光照模型
 
          当物体的几何形态确定之后,光照决定了整个场景的显示结果 。因此,真实感图形的生成取决于如何建立一个合适的光照模型(illumination model)。 光照明模型:模拟物体表面的光照明物理现象的数学模型。
 
2 、背景物理知识
 
  • 光的传播规律
               反射定律:入射角等于反射角,而且反射光线、入射光线与法向量在同一平面上。
 
                                    
 
          折射定律:折射线在入射线与法线构成的平面上,折射角与入射角满足如下关系 :
 
              
  • 能量关系
               在光的反射和折射现象中的能量分布(满足能量守恒):
 
                              
 
漫反射光  :光线射到物体表面上后(比如泥塑物体的 表面,没有一点镜面效果),光线会沿着不同的方向等量 的散射出去,这种现象称为漫反射。漫反射光在不同方向 都是一样的 。漫反射光均匀向各方向传播,与视点无关,它是由表面的粗糙不平引起的 。
 
镜面反射光  :一束光照射到一面镜子上或不绣钢的表面,光 线会沿着反射光方向全部反射出去,这种叫镜面反射光。
 
折射光  :比如水晶、玻璃等,光线会穿过去一直往前走
 
吸收光 :比如冬天晒太阳会感觉到温暖,这是因为吸收了太 阳光。
 
3 、 Phong  光照模型  (  环境光+漫反射光+镜面反射光 
 
环境光 :邻近各物体所产生的光的多次反射最终达到平衡时的一种光。可近似认为同一环境下的环境光,其光强分布是均匀的。
 
                                         
 
漫反射光 :光照射到比较粗糙的物体表面,物体表面某点的明暗程度不随观测者的位置变化,这种等同地向各个方向散射的现象称为光的漫反射。漫反射光强近似服从Lambert定律 :
 
 
镜面反射光  :光照射到相当光滑的物体表面,就产生镜面反射光,其特点是在光滑表面会产生高光区域。一般用Phong提
出的经验模型表达 :
 
 
Phong  光照模型
 
 
          这就是经典的Phong模型。Ia、Ip都是常数,k也是已知的,L是光源的方向也是已知的,N是物体表面的法向可以算出来的,v是视线的方向,R也可以算出来。
 
 
结合RGB颜色模型, Phong光照明模型最终有如下的形式 :
 
 
 
Phong模型扫描线算法
 
 
 
Phong光照明模型是真实感图形学中提出的 第一个有影响的光照明模型,生成图象的真实度已经达到可以接受的程度。
 
Phone模型用来模拟光从物体表面到观察者眼睛的反射。尽管这种方法符合一些基本的物理法则,但它更多的是基于对现象的观察,所以被看成是一种 经验式的方法。
 
 
Phong光照明模存在的问题 :
 
  • 显示出的物体象塑料,无质感变化
  • 没有考虑物体间相互反射光
  • 镜面反射颜色与材质无关
  • 镜面反射入射角大,会产生失真现象
 
4 、 增量式光照模型Gouraud明暗处理
 
一 、为什么要进行明暗处理 ?
 
  • 三维物体通常用多边形( 三角形 )来近似模拟 。
  • 由于每一个多边形的法向一致,因而多边形内部的象素的颜色都是相同的,而且在不同法向的多边形邻接处,光强
    突变,使具有不同光强的两个相邻区域之间的光强不连续性 ( 马赫带效应 ) 。
     
二 、如何进行明暗处理 ?
 
          基本思想 :每一个多边形的顶点 处计算出光照强度或参数,然后 在各个多边形内部进行均匀插值
 
常用方法:
  • Gouraud明暗处理 ( 双线性光强插值算法 )
  • Phong明暗处理 ( 双线性法向插值算法 )
      
Gouraud明暗处理步骤 :
 
                     
第一步 : 计算多边形顶点的平均法向 。
       与某个顶点相邻的所有多边形的法向平均值近似作为该顶点的近似法向量,顶点A相邻的多边形有k个,它的法向量计算为 :
        
第二步 : 用 Phong 光照模型计算顶点的光强。
          Phong 光照模型出现前,采用如下光照模型计算 :
  
第三步 :  插值计算离散边上个点的光强。
第四步 :   插值计算多边形内域中各点的光强
 
增量计算 :为减少计算量,采用增量计算方法 。
 
 
5 、 增量式光照模型 ( Phong 明暗处理 )
 
        Gouraud 明暗处理的不足 :最大的缺点,就是不能有镜面反射光( 高光 )。双线性插值是把能量往四周均匀,平均的结果就是光斑被扩大了,本来没有光斑的地方一插值反而出现了光斑 。  解决办法? === >   Phong明暗处理
 
  • 与 Gouraud 明暗处理的区别           双线性光强插值 ?    === >   双线性法向插值
  • 以时间为代价,引入镜面反射,解决高光问题
 
Phong明暗处理基本步骤:
 
  • 计算每个多边形顶点处的平均单位法矢量,这一步骤与Gouraud明暗处理方法的第一步相同。
  • 用双线性插值方法求得多边形内部各点的法矢量。
  • 最后按光照模型确定多边形内部各点的光强。
 
 
Phong明暗处理是先算角点的法向量,再算内部点的法向量,最后再用新的光照模型算内部点的颜色值。
 
 
点A的法向量NA为N1与N2的线性插值,点B的法向量NB为N1与N3的线性插值,点P的法向量Np为NA与NB线性插值。
 
 
  • 两种增量式光照模型比较
 
  • 增量式光照模型总结
 
  • 双线性光强插值(Gouraud模型)能有效的显示漫反射曲面,计算量小,速度快。
  • 双线性法向插值(Phong模型)可以产生正确的高光区域,但是计算量要大的多。
 
  • 增量式光照明模型的不足
     
    • 物体边缘轮廓是折线段而非光滑曲线
    • 等间距扫描线会产生不均匀效果
    • 插值结果取决于插值方向
       
5、  局部光照模型
 
 
      一、什么是局部光照模型 ?
 
  • 局部光照模型:仅处理光源直接照射物体表面的光照模型。
  • 简单光照模型是一个比较粗糙的经验模型,不足之处:镜面反射项与物体表面的材质无关。
  • 从光电学知识和物体微平面假设出发,介绍镜面反射与物体材质有关的普遍局部光照模型
 
     
 
      二、局部光照模型
 
           自然光反射率系数可用Fresnel公式计算
 
                 
               
 
          
 
反射率与折射率有关,是波长的函数 
                                                                  
  • 微观情况下,物体表面粗糙不平 。
 
                                    
        宏观上看,这是一个平面,法向朝上。实际上它是由许多微小平面构成的,微小平面的法向是各异的 。
 
  • 反射率计算
    • 微平面是理想镜面,反射率可用Fresnel公式计算,而粗糙表面的反射率与表面的粗糙度有关。
 
                        
  • Torrance 和 Sparrow采用 Gauss分布函数模拟法向分布 :
 
                
 
  • 衰减因子G在局部光照明模型中也可以反映物体表面的粗糙程度。
  • 衰减因子是由于微平面的相互遮挡或屏蔽而产生的
  • 微平面相互遮挡的光衰减因子G,有三种情况:
 
 
Cook和Torrance于 1981年提出了局部光照模型
 
     
  • 入射光能量Ei ,可用入射光的光强 Ii 和单位面积向光源所张的立体角 d w表示为 :   
 
  • 反射率系数可表示为漫反射率与镜面反射率的代数和:
 
 
     
  • 局部光照模型表示
 
      
  • 局部光照模型的优点 :
 
  • 相对于简单光照模型而言
    • 基于入射光能量导出的光辐射模型
    • 反映表面的粗糙度对反射光强的影响
    • 高光颜色与材料的物理性质有关
    • 改进入射角很大时的失真现象
    • 考虑了物体材质的影响,可以模拟磨光的金属光泽
 
光 透 射 模 型
     
一 、 为什么考虑光透射模型 ?
 
     简单和局部光照模型没有考虑光的透射现象 。
      适用于场景中有透明或者半透明的物体的光照处理 。
      早期用颜色调和法进行模拟。
 
二、 光透射模型
 
                                           
 
     不考虑透明体对光的折射以及透明物体本身的厚度,光通过物体表面是不会改变方向的,可以模拟平面玻璃 。
 
三、Whitted 光透射模型
 
 
6、 整体光照模型
 
一、 为什么需要整体光照模型 ?
 
  • 简单和局部光照模型不能很好地模拟光的折射、反射和阴影等,也不能用来表示物体间的相互光照影响 。
  • 整体光照模型是更精确的光照模型,主要有光线跟踪 和 辐射度两种方法 。 
 
 
二、光线跟踪基本原理(Ray Tracing)
 
        光线跟踪算法是真实感图形学中的主要算法之一,该算法具有原理简单、实现方便和能够生成各种逼真的视觉效果等突出的优点,综合考虑了光的反射、折射、阴影等。
 
三、光线跟踪基本过程
 
 
在这个场景中,有一个点光源  L,两个透明体 O 1O 2,一个不透明体 O 。首先,从视点出发经过视屏一个像素点的视线E传播到达球体O1,交点为P1。从P1向光源L作一条阴影测试线S1,可以发现其间没有遮挡的物体,那么就用局部光照模型计算光源对P1在其视线E方向上的光强,作为该点的局部光强 ;在反射光线R1方向上,没有再与其他物体相交,那么就设该方向的光强为0,并结束这条光线方向的跟踪。然后对折射光线T1方向进行跟踪,计算该光线的光强贡献 。折射光线T1在物体O1内部传播,与O1相交于点p 2,由于该点在物体内部,假设它的局部光强为0。该点处同时产生了反射光线R 2和折射光线T 2,在反射光线R 2方向,可以继续递归跟踪下去计算它的光强。而对折射光线T 2则继续进行跟踪 。T 2与物体O3交于点p3,作P3与光源L的阴影测试线S3,没有物体遮挡,正常计算该处的局部光强。由于该物体是非透明的,可以只继续跟踪反射光线R3方向的光强,结合局部光强得到P3处的光强 。反射光线R3的跟踪与前面的过程类似,算法可以递归地进行下去。重复上面的过程,直到光线满足跟踪终止条件。这样最终可以得到视屏上一个像素点的光强,也就是它相应的颜色值 。
 
四、光线跟踪怎么停止 ? 
          
          在算法应用的意义上,可以有以下几种终止条件 。
  • 该光线未碰到任何物体
  • 该光线碰到了背景
  • 光线在经过许多次反射和折射以后,就会产生衰减,光线对于视点的光强贡献很小
  • 光线反射或折射次数即跟踪深度大于一定值
                  
五、光线跟踪伪代码
 
          光线跟踪算法的函数名为RayTracing( ),光线的起点为start,方向为direction,光线的衰减权值为weight,初始值
为1,算法最后返回光线方向上的颜色值color 。 对于每一个像素点,第一次调用RayTracing(),可以设起点start为视点,而direction为视点到该像素点的射线方向 。
 
六、光线跟踪缺点
 
  • 光线跟踪方法由于要进行大量的求交运算,且每一条射线都要和所有的物体求交,因此效率很低,需要耗费大量的计算时间。
  • 光线跟踪方法可以进行加速。
     
七、光线跟踪加速
 
  • 提高求交速度:针对性的几何算法、...
  • 减少求交次数:包围盒、空间索引、...
  • 减少光线条数:颜色插值、自适应控制、...
  • 采用广义光线和采用并行算法等
           
包围盒求交测试
 
   
 
层次包围盒求交测试
 
空间网格剖分和三维DDA算法
空间八叉树剖分
 
7、 纹  理  映  射
 
      一 、 纹理有什么用 ?
 
         表面可以用纹理来代替,不用痛苦地构造模型和材质细节,节省时间和资源,让用户做其他更重要的东西 。可以用一个粗糙的多边形和纹理来代替详细的几何构造模型,节省时间和资源。
 
      二、 纹理分类
 
           颜色纹理 颜色或明暗度变化体现出来的表面细节,如刨光 木材表面上的木纹 。
           几何纹理:由不规则的细小凹凸体现出来的表面细节,如桔子皮表面的皱纹。
 
     三、 图形学中纹理定义
               
               在真实感图形学中,可以用下列两种方法来定义纹理 :
           ( 1 )图象纹理:将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。
           ( 2 )函数纹理:用数学函数定义简单的二维纹理图案,如方格地毯;或用数学函数定义随机高度场,生成表面粗糙纹理几何纹理。
 
四、 纹理映射
 
          纹理映射(Texture Mapping):通过将数字化的纹理图像覆盖或投射到物体表面,而为物体表面增加表面细节的过程 。1974年Catmull首次提出了纹理映射的概念,其主要思想是通过寻找一种从纹理空间(u,v)到三维曲面(s, t)之间的映射关系,将点(u,v)对应的彩色参数值映射到相应的三维曲面(s, t)上,使三维曲面表面得到彩色图案 。
 
颜色纹理坐标转换通常使用下列两种方法 :
 
(1)在绘制一个三角形时,为每个顶点指定纹理坐标,三角形内部点的纹理坐标由纹理三角形的对应点确定。即指定 :
 
                                      
 
几何纹理  使用一个称为扰动函数的数学函数进行定义。 扰动函数通过对景物表面各采样点的位置作微小扰动来改变表面的微观几何形状。
 
  
五、阴影处理
 
       一、 什么是阴影?
               
         阴影是由于观察方向与光源方向不重合而造成的 ; 阴影使人感到画面上景物的远近深浅,从而极大地增强画面的真实感。
     
       二、 什么是本影
 
umbra-本影区-场景中的一个点P,如果它不被光源的任何一部分所照射到,就称为在本影区里。本影就是不被任何光源所照到的区域 。
 
三、 什么是半影
 
 
     
Occluder-遮挡物:阴影的生成是因为空间有遮挡物。这些遮挡物把光源挡住了,所以在receivers上有些部分就很
阴暗。阴影是本影和半影的组合。求出本影和半影的并集(union)来绘出阴影。
 
四、阴 影
          
  • 自身阴影:由于物体自身的遮挡而使光线照射不到它上面的某些面;
  • 投射阴影:由于物体遮挡光线,使场景中位于它后面的物体或区域受不到光照射而形成的。
   
五、阴影算法( 1 )
 
          阴影体法( Shadow Volume )
 
                          
 
由一个点光源和一个三角形可以生成一个无限大的阴影体。落在这个阴影体中的物体,就处于阴影中 。在对光线进行跟踪的过程中,如果这条射线穿过了阴影体的一个正面(朝向视点的一个面),则计数器加1。如果这条射线穿过了阴影体的一个背面(背向视
点的一个面),则计数器减1。如果最终计数器的数值大于0,则说明这个象素处于阴影中,否则处于阴影之外 。
 
六、阴影算法( 2 )
 
       阴影图法( Shadow Mapping )
  • 这种方法的主要思想是使用Z缓冲器算法,从投射阴影的光源位置对整个场景进行绘制 。
  • 这时,对于Z缓冲器的每一个象素,它的z深度值包括了这个象素到距离光源最近点的物体的距离。一般将Z缓冲器中的整个内容称为阴影图(Shadow Map),有时候也称为阴影深度图 。
 
                           
 
  • 为了使用阴影图,需要对场景进行二次绘制,不过这次是从视点的角度来进行的  。
  • 在对每个图元进行绘制的时候,将它们的位置与阴影图进行比较,如果绘制点距离光源比阴影图中的数值还要远,那么这个点
    就在阴影中,否则就不在阴影中  。

 

七 、其他与支持

码字不易,布莱克智讯之声公众社区是一个年轻人自由交流,和创意分享,跨界交流,同时知识分享的社区,如果您感兴趣,您可以使用微信扫描如下二维码,关注我们,加入我们社区,期待您的加入 ~ ~ ~

 

                                                        在这里插入图片描述                       

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

真实图形学(光照模型) 的相关文章

  • C++11:深入理解右值引用,move语义和完美转发

    C 11 深入理解右值引用 move语义和完美转发 标签 c 11右值引用完美转发move语义rvalue reference 2015 04 15 12 45 12667人阅读 评论 6 收藏 举报 分类 C 王者归来 16 版权声明 本
  • ohmyzsh主题安装与插件推荐

    前言 1 安装zsh sudo yum install zsh 2 切换到zsh sudo chsh s bin zsh 3 安装git sudo yum install git ohmyzsh官网 官网 https ohmyz sh 安装
  • Python获取酷得music并下载,获得无限听

    前言 大家早好 午好 晚好吖 欢迎光临本文章 环境使用 Python 3 8 Pycharm 模块使用 requests gt gt gt pip install requests re win R 输入cmd 输入安装命令 pip ins
  • python使用pandas指定列名写入excel

    import pandas as pd data dic 姓名 xl xh 年龄 22 18 身高 170 165 data pd DataFrame data dic print data data to excel l xlsx
  • Redis{常用命令操作,数据结构,持久化}

    今日内容 1 redis 1 概念 2 下载安装 3 命令操作 1 数据结构 4 持久化操作 5 使用Java客户端操作redis Redis 1 概念 redis是一款高性能的NOSQL系列的非关系型数据库 1 1 什么是NOSQL No
  • 黑苹果(haskintosh)关于本机,系统设置在睡眠唤醒后闪退

    问题 i712700f b660m ventura 13 1 当初是从12 6直接升级到 ventura 系统的 使用过程中出现过 The volume hash mismatch error 报错 忘记怎么处理了 再后来 偶然发现 关于本
  • 基于卷积神经网络的表情识别

    实验描述 使用卷积神经网络对数据集进行训练 实现实时对人的表情 笑脸与非笑脸进行简单识别 实验环境 Jupyter notebook 实验过程 数据集处理 部分代码 全部代码可以私信 准备图片数据 我们直接从网上获取到笑脸和非笑脸图片的数据
  • Java创建数组的方法

    最近学Java 一点小心得 希望和大家分享一下 第一次写文章 写的不好希望大家谅解 当然我也会尽力写好这篇文章 Java创建数组的方法大致有三种 说明 这里以int为数据类型 以arr为数组名来演示 一 声明并赋值 int arr 1 2
  • 怎样将jpg、png制作成windows桌面ico图标文件

    之前在前端设计实现了一个生成ico图标的功能 然而后来经过用户的反馈才发现 之前生成的ico图标的编码格式 其实只能在网站等地方使用 如果在windows桌面上使用 就会提示找不到ico图标文件 错误提示如下所示 这个错误确实是百思不得其解
  • 8086CPU外部引脚图

    8086CPU外部引脚图 在最小模式中引脚定义 AD15 AD0 Address Data Bus 16位地址 数据总线 分时复用 传输地址时三态输出 传输数据时三态双向输入 输出 在总线周期T1状态 CPU在这些引脚上输出存储器或I O端
  • 108-109-----JS基础-----获取元素的样式与getStyle方法(兼容不同浏览器修改样式的接口)

    一 代码 上一节操作内联样式时 只对内联的有效 如果不是内联的话 获取到的属性是一个空值 所以需要获取元素的样式接口去获取样式属性 而由于不同浏览器对获取元素的样式的支持不一样 所以需要getStyle方法去兼容不同的浏览器 注 通过sty
  • 保证文件名唯一(java)

    问题描述 给你一个长度为 n 的字符串数组 names 你将会在文件系统中创建 n 个文件夹 在第 i 分钟 新建名为 names i 的文件夹 由于两个文件 不能 共享相同的文件名 因此如果新建文件夹使用的文件名已经被占用 系统会以 k
  • Centos/Linux在线环境下载安装包,到离线环境安装,并解决依赖问题

    在线环境下载rpm包 我们以yum utils包为例 在线环境使用下面的代码安装 sudo yum install y yum utils 离线环境需要的是安装包 因此下载yum utils的安装包的代码 mkdir ypm packet
  • 开关电源环路稳定性分析(01)-Buck变换器

    大家好 这里是大话硬件 说到开关电源不得不提的就是开关的环路稳定性 但是这一块目前用的DC DC芯片 很多厂家在芯片内部都已经做好了 所以对于使用的人来说 即使不太关注环路的稳定 按照手册中推荐的值设计产品也能正常使用 当然 仅仅是按照手册
  • 可充电点电池和不可充电电池区分?

    看到网上很多人都在问 碳性电池能充电吗 回答很明确 不可以 我们生活中使用的5号电池和7号电池分为可充电和不可充电两种 不可充电的5号电池和7号电池有碳性电池和碱性电池 碳性电池是一次电池 即干电池 是不能充电的 碳性电池价格比碱性电池便宜
  • Unity导入package简单操作流程

    Unity导入package简单操作流程 前言 在Unity 实际开发工作中 需要将一些现成的程序包或者插件导入到自己的工厂里 方便自己使用其中的一些现成的功能 方便自己开发 节约工作时间 这篇博客简单介绍下Unity导入package简单
  • C++ 判断磁盘是否为可移动磁盘

    传入参数path F bool isUsbDrv const wchar t path include
  • 数据库恢复技术

    数据库恢复技术和并发控制技术 事务 故障 1 事物内部的故障 2 系统故障 3 介质故障 4 计算机病毒 恢复的实现技术 1 数据存储 2 登录日志文件 各故障对应的恢复策略 1 事物故障的恢复 2 系统故障的恢复 3 介质故障的恢复 检查
  • 【华为机试刷题笔记】HJ14-字符串排序

    题目描述 给定 n 个字符串 请对 n 个字符串按照字典序排列 数据范围 1 n 1000 1 leq n leq 1000 1 n 1000 字符串长度满足

随机推荐

  • uniapp map 请求接口之后数据不渲染问题

    uniapp map 请求接口之后数据不渲染问题 我先说我遇到的问题 我使用uniapp 的 map 组件 组件所有绑定数据都有一个初始化 之后在 mounted 中请求服务器数据 不过在 map 组件里面没有渲染请求到的数据 使用 set
  • 千兆网线做法和网线接法注意事项

    据市场调查 目前千兆网线已经很 普遍了 但很多朋友对千兆网线水晶头接法还不是很了解 在制作网线的过程中会遇到各式各样的问题 有时会造成无法打开网页 在动手之前 我们要对于网线的制作有一个正确的认识 从而制作出我们需要的网线 网线由一定距离长
  • 区块链系列-----加密算法汇总

    背景 区块链背景下 对密码学技术要求需要有很深的研究 笔者以java语言为例 搜罗各种加密算法的相关使用 github地址 https github com niyuelin1990 mycrypto 简介 搜罗各种加密算法 电子邮件传输算
  • docker使用指南

    1 安装docker 使用如下命令可以安装docker 安装成功后docker version可以查看到docker的client和server信息 sudo apt install docker docker io y 为普通用户添加权限
  • mysql json类型最大长度限制_MySQL json 数据类型

    必须要5 7以上版本才能使用 写在开头 mysql json 的功能很强大 只是用来当一个储存数据的字段 就没什么意义了 使用proto做交互的话 只要JSON 写得好 用proro Unmarshal 就可以很方便的转换类型 可以精简很多
  • github 项目的基本结构以及git的使用方法

    github 项目的基本结构以及git的使用方法 介绍 根据README md 一般都在下面 阅读规则 每个团队根据队伍内部技术人员配置选择课题 课题在docs 目录下 对于docs 下非本组选择的课题文件不要进行任意修改 docs 下课题
  • 转onnx包问题

    pip install onnx 1 7 0 i https pypi tuna tsinghua edu cn simple 其实这一步已经可以了 pip install coremltools YOLOv5的pytorch模型文件转换为
  • redis的事务和watch机制

    这里写目录标题 第一章 redis事务和watch机制 1 1 redis事务 事务的三大命令 语法 开启事务 multi 语法 执行事务 exec 语法 取消事务 discard 1 2 redis事务的错误和回滚的情况 1 3 watc
  • Es6数组新增方法与字符串新增方法和新增数据类型

    1 数组新增方法 map方法 将数组中每一个元素依次取出 进行遍历 返回一个新的数组 let movies id 1 name 大话西游 author xxxx imgUrl http xxx douban com 1 jpg id 2 n
  • AST-解混淆 赋值语句嵌套三目表达式的优化

    处理前 0x4ae6ff 0x41bc28 4957228979 650037875 处理后 0x41bc28 0x4ae6ff 4957228979 0x4ae6ff 650037875 通用插件编写规则 const TransCondi
  • 2018年LeetCode高频算法面试题刷题笔记——搜索二维矩阵 II(开始之前)

    1 解答之前的碎碎念 这个题一开始我想的很简单 想着是个二维的二分查找 然后提交代码 果不其然出错了 因为并不能保证第i 1行的每个元素都大于第i行 不过想到了递归 也算是有点进步 虽然最后用递归写了一个没有通过 但是自己在vs里测试的没问
  • 论文快速回顾笔记 —— Supressing Uncertainties for Large-Scale FER

    前言 这是之前因为做项目而读过的一篇CVPR2020论文 有些细节还是挺有意思的 最近回顾一下 顺便做下笔记 以供后续查阅 Paper Suppressing Uncertainties for Large Scale Facial Exp
  • Uni-App开发BLE低功耗蓝牙流程

    Uni App开发BLE低功耗蓝牙步骤 示例文件已上传gitee https gitee com yan rookie uniapp bluetooth git 如果对你有记得点个赞哦 注 微信小程序同样适用 只需吧前缀uni 修改为wx
  • 两个链式存储的一元多项式乘法运算算法

    include
  • 面试官:说说Node中的EventEmitter? 如何实现一个EventEmitter?

    一 是什么 我们了解到 Node采用了事件驱动机制 而EventEmitter就是Node实现事件驱动的基础 在EventEmitter的基础上 Node几乎所有的模块都继承了这个类 这些模块拥有了自己的事件 可以绑定 触发监听器 实现了异
  • 电赛知识补充——电机篇

    在准备电赛的时候 我通常会发现手边有很多格式各样的电机 问了很多人都没能和我说明白这些个电机是什么 有什么特性 怎么驱动 所以我打算学习一下电机的分类 本文主要记录了在电赛中所需要的电机相关知识 包括电机的种类 特点 驱动方式等等 今后不定
  • windows7 64位机上安装配置CUDA 9.1+cudnn7操作步骤

    版权声明 本文为CSDN博主 陌筱北 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net moxiaobeiMM article details 84529
  • vue项目整合codemirror代码编辑器

    需求 需要在web页面中整合一个sql的编辑器 选择了codemirror 以下被我封装成了组件 项目里改一改就可以直接用 codemirror支持很多语言 但我只需要使用sql编辑器 所以做了精简 安装使用步骤 1 安装 npm i co
  • 【经典】MySQL绿色安装

    第一步 下载Mysql 官网下载地址 https dev mysql com downloads mysql 1 鼠标滑下来 找到Other Download中的 Windows x86 64 bit ZIP Archive 点击其右边的D
  • 真实图形学(光照模型)

    一 颜色模型 真实感图形学 简单地说 就是希望用计算机生成像照相机拍的照片一样逼真的图形图像 要实现这个目标 需要三部曲 第一步 建立三维场景 建模 第二步 消隐解决物体深度的显示及确定物体之内的相互关系 第三步 在解决了消隐问题之后 在可