精华内容
下载资源
问答
  • 该程序实现了使用opengl绘制六棱柱和三棱柱,并实现了平移和旋转,以及镂空和二维图形的透明的功能。 程序是在vs08中实现的。安装好了GLUT工具包,下载附件并解压后,即可直接打开运行。
  • 自己写的可旋转3d图片墙。立方体选用正六棱柱的六个侧面。可360旋转,旋转速度,角度自己在xaml里自己设。照片反射效果用的画刷。
  • 自动生成正六棱柱

    2019-12-19 00:20:44
    定义不同的边界函数就会生成不同的棱 public void CreateMap (int length) { len = length + 1; if (grids != null) { ResetMap (); } //开始递归 AutoCreateMap (Vector3.zero, ...

    思想

    • 递归生成
    • 判断是否超过边界
    • 超过就不再生成
    • 所以核心是边界函数
    • 定义不同的边界函数就会生成不同的棱柱
    	public void CreateMap (int length)
    	{
    		len = length + 1;
    		if (grids != null)
    		{
    			ResetMap ();
    		}
    		//开始递归
    		AutoCreateMap (Vector3.zero, new Point (0, 0));
    	}
    
    	Dictionary<Point, Vector3> offsetDic;
    	public void InitOffsetDic ()
    	{
    		if (offsetDic == null)
    		{
    			offsetDic = new Dictionary<Point, Vector3> ();
    			borderPoint = new List<Point> ();
    			grids = new Dictionary<Point, Grid> ();
    		}
    
    		offsetDic.Add (new Point (1, -1), new Vector3 (1.5f, 0, -0.87f));
    		offsetDic.Add (new Point (-1, -1), new Vector3 (-1.5f, 0, -0.87f));
    		offsetDic.Add (new Point (1, 1), new Vector3 (1.5f, 0, 0.87f));
    		offsetDic.Add (new Point (-1, 1), new Vector3 (-1.5f, 0, 0.87f));
    		offsetDic.Add (new Point (0, 2), new Vector3 (0, 0, 1.73f));
    		offsetDic.Add (new Point (0, -2), new Vector3 (0, 0, -1.73f));
    	}
    
    	
    
    
    
    
    
    
    	void AutoCreateMap (Vector3 originPos, Point gridPos)
    	{
    		if (IsInBorder (originPos) && !grids.ContainsKey (gridPos))
    		{
    
    			Grid floor = GridPool.Inst.GetFloor (originPos, gridPos);
    			grids.Add (gridPos, floor);
    
    			foreach (var pair in offsetDic)
    			{
    				if (!IsInBorder (originPos + pair.Value))
    				{
    					floor.IsBorder = true;
    					Renderer render = floor.floor.GetComponent<Renderer> ();
    					render.material.color = new Color (81, 128, 248) / 255;
    					borderPoint.Add (gridPos + pair.Key);
    
    					Rigidbody rigi = floor.floor.GetComponent<Rigidbody> ();
    					rigi.isKinematic = true;
    				}
    				else
    				{
    					AutoCreateMap (originPos + pair.Value, gridPos + pair.Key);
    				}
    			}
    
    		}
    
    	}
    
    
    	//3^0.5 *border  border*2
    	//3^0.5 *border  border*2
    	public bool IsInBorder (Vector3 pos)
    	{
    		float x = Mathf.Abs (pos.x);
    		float z = Mathf.Abs (pos.z);
    		float borderX = 0, borderY = 1.73f * len / 2 + 0.2f;
    		if (x == 0)
    		{
    			borderX = len;
    			//Debug.Log (borderX);
    		}
    		else
    		{
    			//y = (x)*-1.73f+1.73*len
    
    			borderX = (z - 1.73f * len) / -1.73f + 0.2f;
    		}
    
    
    		return x < borderX && z < borderY ? true : false;
    	}
    
    展开全文
  • 该程序实现了使用opengl绘制六棱柱和三棱柱,并实现了平移和旋转,以及镂空和二维图形的透明的功能。 程序是在vs08中实现的。安装好了GLUT工具包,下载附件并解压后,即可直接打开运行。因为是初学,这个程序写得...
  • 汽车运动学,其中空间六棱柱变换是差速两轮车正逆解,以及三轮车正逆解的最基础编程。
  • 电子政务-六棱柱电烙铁手柄.zip
  • 电信设备-六棱柱支护的矿井用锚杆托盘.zip
  • 行业分类-外包设计-六棱柱形机糊包装盒.zip
  • 行业分类-外包设计-瓶装化妆品对称式六棱柱包装盒.zip
  • 行业分类-外包设计-六棱柱形机糊包装盒的介绍分析.rar
  • 工业机器人-发那科之 1 模拟3D打印机打印六棱柱以及工具坐标系的切换 欢迎大家下载
  • 行业分类-外包设计-瓶装化妆品对称式六棱柱包装盒的介绍分析.rar
  • 行业分类-作业装置-一种微米六棱柱MoO3行业分类-作业装置-x光催化材料的制备方法.zip
  • NaYF_4∶Eu~(3+)纳米粒子和六棱柱的水热控制合成与发光性质
  • 一、设计多个六棱柱 1)Matlab代码 %%All hex are oriented such that the incident light %%is along the x axis and strikes the circular face of the hex R = [20, 20, 20]; %Hex center t...

           继续设计文献里面的模型

     

    一、设计多个六棱柱

           1)Matlab代码

    %%All hex are oriented such that the incident light
    %%is along the x axis and strikes the circular face of the hex
    R = [20, 20, 20]; %Hex center to side distance
    H = [10, 10, 10]; %Hex height
    hex = 3; %number of cylinders (including ring)
    offX = zeros(1,hex);
    offY = zeros(1,hex);
    offZ = zeros(1,hex);
    %   offX = [0,-40,40]; %User defined offsets
        offY = [18,-18,-18]; %user defined offsets
        offZ = [0,21,-21]; %user defined offsets
    %%Calculation variables for output file documantation
    X = H;
    Y = R*1.5;
    Z = R*1.5;
    Xd = X;
    Yd = Y*2;
    Zd = Z*2;
    Out = [0 0 0 0 0 0 0];
    d = 1; %dipole #
    di = 1; %inner dipole #
    for off = 1:hex;
        for i = (-Z(1,off)+offZ(1,off)):(Z(1,off)+offZ(1,off))
            for j = (-Y(1,off)+offY(1,off)):(Y(1,off)+offY(1,off))
                for k = (0+offX(1,off)):(X(1,off)+offX(1,off))
                    L1 = (abs(sqrt(3)/2*(j-offY(1,off))+1/2*(i-offZ(1,off))));
                    L2 = (abs(sqrt(3)/2*(j-offY(1,off))-1/2*(i-offZ(1,off))));
                    L3 = ((i-offZ(1,off))^2 + (j-offY(1,off))^2)^.5;
                    if L1 <= R(1,off) && L2 <= R(1,off) && abs(i-offZ(1,off))<= R(1,off);
                        Out = [Out; d k j i 1 1 1];
                        d = d + 1;
                    end
                end
            end
        end
    end
    Out(1,:) = [];
    d = d - 1;
    di = di - 1;
    fid = fopen('output.txt', 'w');
    fprintf(fid, ' >TARCEL: Hexagons; AX,AY,AZ= %7.4f %7.4f %7.4f', Xd, Yd, Zd);
    fprintf(fid, '\r\n %8.0f %8.0f = NAT, NIN,', d, di);
    fprintf(fid, '\r\n 1.000000 0.000000 0.000000 = A_1 vector\r\n 0.000000 1.000000 0.000000 = A_2 vector');
    fprintf(fid, '\r\n 1.000000 1.000000 1.000000 = lattice spacings (d_x,d_y,d_z)/d');
    fprintf(fid, '\r\n -0.50000 -0.50000 -0.50000 = lattice offset x0(1-3) = (x_TF,y_TF,z_TF)/d for dipole 0 0 0');
    fprintf(fid, '\r\n JA IX IY IZ ICOMP(x,y,z)\r\n');
    fprintf(fid,'%7d %3d %3d %3d %1d %1d %1d\r\n', Out');
    fclose(fid);
    foldername = sprintf('%dHex%dR%dH',hex,R(1,1),H(1,1));
    folderpath = strcat(foldername,'/');
    filename = sprintf('%dHex%dR%dH.txt',hex,R(1,1),H(1,1));
    mkdir(foldername);
    copyfile('output.txt',filename);
    copyfile('output.txt','shape.dat');
    movefile(filename, folderpath);
    movefile('shape.dat',folderpath);% 将shape.dat文件移动到 %dSpheres%dR%dr/ 文件夹中
    
    % 后面的也是一些文件复制移动的操作,大家可以注释掉,需要用的话得去掉注释自行修改代码,否则会报错
    % copyfile('Ag.txt',folderpath);
    % copyfile('Ti.txt',folderpath);
    % copyfile('ddscat.exe',folderpath);
    % copyfile('ddscat2.par','ddscat.par');
    % movefile('ddscat.par',folderpath);
    % disp(['Sucess, file saved to: ', foldername]);

           2)ddscat.par文件

           先放一个会报错的ddscat.par文件。

           

           下面是在命令行中运行的报错结果。

           

           报错的原因暂时还没有找到,但是可以确定的是,其中X=3.00000D-01中的X表示的是入射光的波长。因为我改变过波长的值,这个值也会跟着改变,继续报错。小范围的波长改动依然会继续报错,但是大范围的波长改动,会导致程序一直迭代下去,不会终止,且error误差值很大。

     

           3)近场图

           报这个错误最大的问题是,在ddpostprocess后处理之后,虽然产生了vtr文件,但是在vislt里面无法读取模型的强度值,即无法可视化。

           

     

            4)正确的ddscat.par文件

           在尝试了很多次的改动之后,终于改出了可以正常运行不报错、可以可视化的配置文件。结果其实很简单,就是把介电常数的种类配置为两个。虽然这个纯六棱柱模型是由一种物质构成的,但是我们设置有两种配置文件没有什么影响,只要shape文件里面只出现1,不出现2就行。结果,这样一改,反而结果正确了。

           

           

           5)成功的近场图

           

           6)模型的3D散点图

           之后尽量给大家加上模型的一个三维散点图,除了在电厂图可视化的情况下认识模型,也同时在偶极子构成概念上了解模型。

           

     

    二、设计多个圆柱核六棱柱壳模型

           1)Matlab代码

           

    %%All hex are oriented such that the incident light
    %%is along the x axis and strikes the circular face of the hex
    R = [20, 20, 20]; %Hex center to side distance
    H = [20, 20, 20]; %Hex height
    Ri = [10, 10, 10]; %Hex core radius
    hex = 3; %number of cylinders (including ring)
    offX = zeros(1,hex);
    offY = zeros(1,hex);
    offZ = zeros(1,hex);
    % offX = [0,-40,40];
    offY = [18,-18,-18];
    offZ = [0,21,-21];
    %% calculation parameters used for output documentation file
    X = H;
    Y = R*1.5;
    Z = R*1.5;
    Xd = X; %diameter
    Yd = Y*2;
    Zd = Z*2;
    Xs = Ri*2;
    Ys = Ri*2;
    Zs = Ri*2;
    Out = [0 0 0 0 0 0 0];
    d = 1; %dipole #
    di = 1; %inner dipole #
    for off = 1:hex;
        for i = (-Z(1,off)+offZ(1,off)):(Z(1,off)+offZ(1,off))
            for j = (-Y(1,off)+offY(1,off)):(Y(1,off)+offY(1,off))
                for k = (0+offX(1,off)):(X(1,off)+offX(1,off))
                    L1 = (abs(sqrt(3)/2*(j-offY(1,off))+1/2*(i-offZ(1,off))));
                    L2 = (abs(sqrt(3)/2*(j-offY(1,off))-1/2*(i-offZ(1,off))));
                    L3 = ((i-offZ(1,off))^2 + (j-offY(1,off))^2)^.5;
                    if L1 <= R(1,off) && L2 <= R(1,off) && abs(i-offZ(1,off))<= R(1,off);
                        if L3 <= Ri;
                            Out = [Out; d k j i 1 1 1];
                            d = d + 1;
                            di = di + 1;
                        else
                            Out = [Out; d k j i 2 2 2];
                            d = d + 1;
                        end
                    end
                end
            end
        end
    end
    Out(1,:) = [];
    d = d - 1;
    di = di - 1;
    fid = fopen('output.txt', 'w');
    fprintf(fid, ' >TARCEL: Hexegons with Cores; AX,AY,AZ= %7.4f %7.4f %7.4f BX,BY,BZ= %7.4f %7.4f %7.4f', Xd, Yd, Zd, Xs, Ys, Zs);
    fprintf(fid, '\r\n %8.0f %8.0f = NAT, NIN,', d, di);
    fprintf(fid, '\r\n 1.000000 0.000000 0.000000 = A_1 vector\r\n 0.000000 1.000000 0.000000 = A_2 vector');
    fprintf(fid, '\r\n 1.000000 1.000000 1.000000 = lattice spacings (d_x,d_y,d_z)/d');
    fprintf(fid, '\r\n -0.50000 -0.50000 -0.50000 = lattice offset x0(1-3) = (x_TF,y_TF,z_TF)/d for dipole 0 0 0');
    fprintf(fid, '\r\n JA IX IY IZ ICOMP(x,y,z)\r\n');
    fprintf(fid,'%7d %3d %3d %3d %1d %1d %1d\r\n', Out');
    fclose(fid);
    foldername = sprintf('%dHexCore%dR%dr%dH',hex,R(1,1),Ri(1,1),H(1,1));
    folderpath = strcat(foldername,'/');
    filename = sprintf('%dHexCore%dR%dr%dH.txt',hex,R(1,1),Ri(1,1),H(1,1));
    mkdir(foldername);
    copyfile('output.txt',filename);
    copyfile('output.txt','shape.dat');
    movefile(filename, folderpath);
    movefile('shape.dat',folderpath);% 将shape.dat文件移动到 %dSpheres%dR%dr/ 文件夹中
    
    % 后面的也是一些文件复制移动的操作,大家可以注释掉,需要用的话得去掉注释自行修改代码,否则会报错
    % copyfile('Ag.txt',folderpath);
    % copyfile('Ti.txt',folderpath);
    % copyfile('ddscat.exe',folderpath);
    % copyfile('ddscat2.par','ddscat.par');
    % movefile('ddscat.par',folderpath);
    % disp(['Sucess, file saved to: ', foldername]);

     

           2)ddscat.par文件

           

    ' ========== Parameter file for v7.3 ===================' 
    '**** Preliminaries ****'
    'NOTORQ' = CMTORQ*6 (DOTORQ, NOTORQ) -- either do or skip torque calculations
    'PBCGS2' = CMDSOL*6 (PBCGS2, PBCGST, GPBICG, QMRCCG, PETRKP) -- CCG method
    'GPFAFT' = CMETHD*6 (GPFAFT, FFTMKL) -- FFT method
    'GKDLDR' = CALPHA*6 (GKDLDR, LATTDR, FLTRCD) -- DDA method
    'NOTBIN' = CBINFLAG (NOTBIN, ORIBIN, ALLBIN)
    '**** Initial Memory Allocation ****'
    150 150 150 = dimensioning allowance for target generation
    '**** Target Geometry and Composition ****'
    'FROM_FILE' = CSHAPE*9 shape directive
    no SHPAR parameters needed
    2         = NCOMP = number of dielectric materials
    '../diel/SiO2' = file with refractive index 1
    '../diel/Au_evap' = file with refractive index 2
    '**** Additional Nearfield calculation? ****'
    1 = NRFLD (=0 to skip nearfield calc., =1 to calculate nearfield E)
    0.0 0.0 0.0 0.0 0.0 0.0 (fract. extens. of calc. vol. in -x,+x,-y,+y,-z,+z)
    '**** Error Tolerance ****'
    1.00e-5 = TOL = MAX ALLOWED (NORM OF |G>=AC|E>-ACA|X>)/(NORM OF AC|E>)
    '**** Maximum number of iterations ****'
    2000     = MXITER
    '**** Integration cutoff parameter for PBC calculations ****'
    1.00e-2 = GAMMA (1e-2 is normal, 3e-3 for greater accuracy)
    '**** Angular resolution for calculation of <cos>, etc. ****'
    0.5	= ETASCA (number of angles is proportional to [(3+x)/ETASCA]^2 )
    '**** Vacuum wavelengths (micron) ****'
    0.300 0.300 1 'LIN' = wavelengths (first,last,how many,how=LIN,INV,LOG)
    '**** Refractive index of ambient medium'
    1.0000 = NAMBIENT
    '**** Effective Radii (micron) **** '
    0.03 0.03 1 'LIN' = eff. radii (first, last, how many, how=LIN,INV,LOG)
    '**** Define Incident Polarizations ****'
    (0,0) (1.,0.) (0.,0.) = Polarization state e01 (k along x axis)
    2 = IORTH  (=1 to do only pol. state e01; =2 to also do orth. pol. state)
    '**** Specify which output files to write ****'
    1 = IWRKSC (=0 to suppress, =1 to write ".sca" file for each target orient.
    '**** Specify Target Rotations ****'
    0.    0.   1  = BETAMI, BETAMX, NBETA  (beta=rotation around a1)
    0.    0.   1  = THETMI, THETMX, NTHETA (theta=angle between a1 and k)
    0.    0.   1  = PHIMIN, PHIMAX, NPHI (phi=rotation angle of a1 around k)
    '**** Specify first IWAV, IRAD, IORI (normally 0 0 0) ****'
    0   0   0    = first IWAV, first IRAD, first IORI (0 0 0 to begin fresh)
    '**** Select Elements of S_ij Matrix to Print ****'
    6	= NSMELTS = number of elements of S_ij to print (not more than 9)
    11 12 21 22 31 41	= indices ij of elements to print
    '**** Specify Scattered Directions ****'
    'LFRAME' = CMDFRM (LFRAME, TFRAME for Lab Frame or Target Frame)
    1 = NPLANES = number of scattering planes
    0.  0. 180. 5 = phi, theta_min, theta_max (deg) for plane A
    90. 0. 180. 5 = phi, theta_min, theta_max (deg) for plane B
    

           这里的配置其实和上一个模型的正确配置文件的参数是一模一样的,不过这次是没有出现问题的。

     

           3)近场图

           

           4)模型的3D散点图

           

     

           继续加油

     

         【DDSCAT——离散偶极近似仿真程序01】概念和说明书介绍

         【DDSCAT——离散偶极近似仿真程序02】初步运行案例程序

         【DDSCAT——离散偶极近似仿真程序03】近场计算及其呈现

         【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

         【DDSCAT——离散偶极近似仿真程序05】模型设计Matlab代码:多核壳球 、多核壳圆柱

         【DDSCAT——离散偶极近似仿真程序06】模型设计Matlab代码:多六棱柱 、多圆柱核六棱柱壳

         【DDSCAT——离散偶极近似仿真程序07】模型设计Matlab代码:圆环套多个圆柱

         【DDSCAT——离散偶极近似仿真程序08】如何在Linux系统上运行DDSCAT程序

         【DDSCAT——离散偶极近似仿真程序09】如何下载ifort安装文件

         【DDSCAT——离散偶极近似仿真程序10】DDSCAT内置示例运行结果

         【DDSCAT——离散偶极近似仿真程序11】DDSCAT目标方向的调整

         【DDSCAT——离散偶极近似仿真程序12】calltarget与vtrconvert程序的使用

         【DDSCAT——离散偶极近似仿真程序13】ParaView可视化工具的使用及其与Vislt的对比

         【DDSCAT——离散偶极近似 用户手册中文翻译稿 0201】

         【DDSCAT——离散偶极近似 用户手册中文翻译稿 0202】

         【DDSCAT——离散偶极近似 用户手册中文翻译稿 0203】

         【DDSCAT——离散偶极近似 用户手册中文翻译稿 0204】

         【DDSCAT——离散偶极近似 用户手册中文翻译稿 0205】

    展开全文
  • /* 六棱柱动画 */ ul { width : 200px ; height : 200px ; transform-style : preserve-3d ; position : absolute ; left : 400px ; top : 500px ; animation : lunbo 10s ...

    transition

    transition:property duration timing-function delay;

    • property:指定哪个属性需要过度(例如 width 、bgc等)
      注意:all 一次应用全部属性,但不建议全部属性,因为效率低下且所有样式的过度效果都一样,多个属性可以整体逗号隔开
    • duration:过度时间
    • timing-function:控制过度动画速度(linear-匀速 ease-减慢 ease-in-加速 ease-out-减速 ease-in-out-先加速后减速 steps(n)-可以让过度效果分为指定几次来完成,更多自定义过度速度 cubic-bezier),其中 steps 可以实现打字机效果
    • delay:过度效果的延迟

    三要素(缺一不可):
    1、元素属性改变(可以hover、active等)
    2、指定需要改变的属性
    3、改变时间

    注意:
    1、浏览器兼容
    2、属性触发结束,默认会动画回原来的样式
    3、无法为一些状态值添加过度效果,例如 display 等

    perspective

    perspective:mpx;(设置三维透视距离,近大远小)

    m大小取决多远看图,如果创建一个200px的立方体盒子,perspective < 100px 则相当于在盒子内部看结果,如果 perspective 非常大,那就是站在非常远的地方看盒子,以为 perspective 指定了观察者于 z = 0 平面的距离使三维位置变换元素产生透视的效果,对动画不应用此值

    perspective-origin:水平 垂直;(设置相机在水平面的位置,改变观察角度)

    transform(都可独立针对xyz一方向改变)

    二维:

    • transform-origin:水平 垂直;(自定义中心点的位置)
    • 旋转:transform:rotate(deg)(默认以中心点顺时针旋转)
    • 平移:transform:translate(水平,垂直)(默认参照元素的左上角)
    • 缩放:transform:scale(水平,垂直)传入数字代表放大缩小倍数,若只传一个数 则xy同步变化
    • 斜切:transform:skew(水平deg,垂直deg)若只传一个数 代表沿x轴斜切,若角度值为正,则往当前轴负方向斜切,反之角度值为负,则正向斜切
    • 综合:transform:translate(x,y) scale(num) skew(x,y) rotate(deg);

    (会改变坐标系,所以 rotate 不推荐放前面)

    三维(二维和三维推荐使用三维,渲染效果更好):

    • transform: translate3d(x方向的偏移,y方向的偏移,z方向的偏移);
    • transform: scale3d(x方向的缩放,y方向的缩放,z方向的缩放);
    • transform: rotate3d(x,y,z,angle)
      x,y,z:代表x,y,z方向上的一个向量值,围绕着向量旋转
      angle:代表角度
      例如:transform: rotate3d(1,0,0,30deg);

    transform-style:preserve-3d;(由于页面二维,所以上面三条设置看不出来,想要看效果,需要在父元素中设置此属性)

    再结合 translate+rotate 做立方体(先rotate(改变坐标系)再translate(固定数值))

    添加 perspective 增强透视效果,对动画不应用此值

    /* 立方体动画 */
            ul {
                width: 200px;
                height: 200px;
                margin: 100px auto;
                transform: rotate3d(1, 1, 0, 0deg);
                transform-style: preserve-3d;
                position: relative;
                animation: lunbo 5s infinite linear;
            }
    
            @keyframes lunbo {
                form {
                    transform: rotate3d(1, 1, 0, 0deg);
                }
                to {
                    transform: rotate3d(1, 1, 0, 360deg);
                }
            }
    
            ul li {
                width: 200px;
                height: 200px;
                list-style: none;
                text-align: center;
                opacity: .8;
                position: absolute;
                left: 0;
                top: 0;
            }
    
            ul li:nth-of-type(1) {
                background-color: #ffff00;
                transform: translateZ(100px);
            }
    
            ul li:nth-of-type(2) {
                background-color: #0ff3ff;
                transform: rotateX(90deg) translateZ(100px);
            }
    
            ul li:nth-of-type(3) {
                background-color: #334455;
                transform: rotateX(180deg) translateZ(100px);
            }
    
            ul li:nth-of-type(4) {
                background-color: #F07AFA;
                transform: rotateX(270deg) translateZ(100px);
            }
    
            ul li:nth-of-type(5) {
                background-color: #f98769;
                transform: rotateY(90deg) translateZ(100px);
            }
    
            ul li:nth-of-type(6) {
                background-color: #954210;
                transform: rotateY(270deg) translateZ(100px);
            }
    
    /* 六棱柱动画 */
            ul {
                width: 200px;
                height: 200px;
                transform-style: preserve-3d;
                position: absolute;
                left: 400px;
                top: 500px;
    
                animation: lunbo 10s infinite linear;
            }
    
            @keyframes lunbo {
                from {
                    transform: rotateX(-20deg) rotateY(0deg);
                }
                to {
                    transform: rotateX(-20deg) rotateY(360deg);
                }
            }
    
            ul:hover {
                animation-play-state: paused;
            }
    
            ul:hover li {
                opacity: 0.3;
            }
    
            ul li:hover {
                opacity: 1;
            }
    
            ul li {
                width: 200px;
                height: 200px;
                list-style: none;
                float: left;
                position: absolute;
                left: 0;
                top: 0;
            }
    
            ul li:nth-of-type(1) {
                background-color: #60be47;
                transform: rotateY(60deg) translateZ(200px);
            }
    
            ul li:nth-of-type(2) {
                background-color: #8c902e;
                transform: rotateY(120deg) translateZ(200px);
            }
    
            ul li:nth-of-type(3) {
                background-color: #a66853;
                transform: rotateY(180deg) translateZ(200px);
            }
    
            ul li:nth-of-type(4) {
                background-color: #604483;
                transform: rotateY(240deg) translateZ(200px);
            }
    
            ul li:nth-of-type(5) {
                background-color: #43b3bb;
                transform: rotateY(300deg) translateZ(200px);
            }
    
            ul li:nth-of-type(6) {
                background-color: #9a7d94;
                transform: rotateY(360deg) translateZ(200px);
            }
    

    animation(与过度区别:无需人为触发)

    animation: name duration timing-function delay iteration-count direction fill-mode;
    

    这三步必须有:

    (1)animation-name:指定动画名称
    (2)@kframes name{ from{ }to{ }} 或是{0%{ } 25%{ }等等}
    (3)animation-duration:指定动画时间

    • animation-timing-function:控制过度动画速度(linear-匀速 ease-减慢 ease-in-加速 ease-out-减速 ease-in-out-先加速后减速 steps(n)-可以让过度效果分为指定几次来完成,,更多自定义过度速度 cubic-bezier),其中 steps 可以实现打字机效果
    • animation-delay:延迟时间
    • animation-iteration-count:动画次数(infinite-无限次)
    • animation-direction:动画方向(alternate-往返)
    • animation-play-state:动画状态(默认running 设置paused为暂停)
    • animation-fill-mode:none;(forwards-最后一帧停止; backwards-如果动画有初始状态,如初始旋转,那么立刻进入初始状态,前提:添加了动画延迟; both-前面两个都有)

    简写:animation:name 时长 速度 delay 动画次数 往返与否;(name和时长必须有)

    实例:

            div {
                width: 200px;
                height: 200px;
                background-color: #f98769;
                animation: move 2s infinite ease-in;
            }
    
            /*创建动画*/
            @keyframes move {
                0% {
                    transform: translate(0, 0);
                }
                33% {
                    transform: translate(500px, 500px);
                }
                66% {
                    transform: translate(500px, 0);
                }
                100% {
                    transform: translate(0, 0);
                }
            }
    
            div:hover {
                animation-play-state: paused;
            }
    

    注:

    1. 如果有和默认样式中同名的样式,会覆盖默认样式
    2. 编写动画中,固定不变的值写在前面,需要变化的值写在后面

    box-shadow

    box-shadow:水平 垂直 模糊度 阴影扩展 阴影颜色 内外阴影(默认外阴影,inset传入内阴影);

    多层阴影:box-shadow:水平 垂直 模糊度 阴影扩展 阴影颜色 内外阴影(默认外阴影,inset传入内阴影),水平 垂直 模糊度 阴影扩展 阴影颜色 内外阴影(默认外阴影,inset传入内阴影),等等;

    text-shadow

    text-shadow:水平 垂直 模糊度 阴影颜色(默认跟从文字颜色);

    多层阴影:text-shadow:水平 垂直 模糊度 阴影颜色(默认跟从文字颜色),水平 垂直 模糊度 阴影颜色(默认跟从文字颜色),等等;

    box-sizing

    box-sizing: content-box|border-box|inherit;
    
    描述
    content-boxborder和padding不计算入width之内,width=内容(默认属性)
    border-boxwidth=内容+padding+border(怪异模式)
    inherit规定应从父元素继承 box-sizing 属性的值

    注:

    1. 表单的 input、select 默认的样式是不同的,所以就造成了 width 设置的一样,但就是对不齐,可以设置box-sizing:border-box;来解决不一致问题
    2. 通过设置box-sizing:border-box;防止因为设置padding或border而导致盒子宽高改变,稳固网页结构

    border-radius

    /*四个角都一样*/
    border-radius: 10px;
    /*左上/右下,右上/左下*/
    border-radius: 10px 20px;
    /*左上,右上/左下,右下*/
    border-radius: 10px 20px 30px;
    /*左上,右上,右下,左下*/
    border-radius: 10px 20px 30px 40px;
    /*添加/是用来设置当前不同方向的半径值,水平x方向/垂直y方向,下面这个可用来绘制椭圆*/
    border-radius: 100px/50px;
    /*设置某一圆角*/
    border-top-right-radius: 20px;
    /*设置某个角点的两个方向上的不同圆角值,类似添加/*/
    border-top-right-radius: 100px 50px;
    /*设置四个角点的不同方向上的不同角值,代表:(水平方向的 左上,右上,右下,左下)/(垂直方向的 左上,右上,右下,左下)*/
    border-radius: 90px 80px 60px 100px/50px 60px 70px 80px;
    
    展开全文
  • 前几课我们绘制的是平面的图形,下面我们要绘制一个立体的图形——六棱柱,这里我们使用了顶点索引,这是一个新的概念,它是一个指明了顶点绘制顺序的ByteBuffer,还有就是这里我们使用的是二维的顶点数组,其中第二...

    前几课我们绘制的是平面的图形,下面我们要绘制一个立体的图形——六棱柱,这里我们使用了顶点索引,这是一个新的概念,它是一个指明了顶点绘制顺序的ByteBuffer,还有就是这里我们使用的是二维的顶点数组,其中第二维中所有的顶点是同一个平面上的点,所以我们是一个面一个面的绘制,Polygon 类改动的代码较多,其他类基本不变,下面一一描述:

    public class Polygon {
    
    	// 保存每一个平面的顶点索引的ByteBuffer数组
    	private ByteBuffer[] indexBuffer;
    
    	// 保存每一个平面的顶点坐标的FloatBuffer数组
    	private FloatBuffer[] faceVertexBuffer;
    
    	// 保存每一个平面的顶点坐标的二维数组
    
    	private float[][] faceVertices = { new float[] { -0.5f, -0.816f, 1.0f,// bottom
    																			// left
    																			// 0
    			0.5f, -0.816f, 1.0f,// bottom right 1
    			-1.0f, 0.0f, 1.0f,// middle left 2
    			1.0f, 0.0f, 1.0f,// middle right 3
    			-0.5f, 0.816f, 1.0f, // top left 4
    			0.5f, 0.816f, 1.0f // top right 5
    			},// front face
    			new float[] { -0.5f, -0.816f, -1.0f,// bottom left 6
    					0.5f, -0.816f, -1.0f,// bottom right 7
    					-1.0f, 0.0f, -1.0f,// middle left 8
    					1.0f, 0.0f, -1.0f,// middle right 9
    					-0.5f, 0.816f, -1.0f, // top left 10
    					0.5f, 0.816f, -1.0f // top right 11
    			},// back face
    			new float[] { -0.5f, -0.816f, -1.0f,// bottom left 6
    					0.5f, -0.816f, -1.0f,// bottom right 7
    					-0.5f, -0.816f, 1.0f,// bottom left 0
    					0.5f, -0.816f, 1.0f // bottom right 1
    			},// bottom face
    			new float[] { -1.0f, 0.0f, -1.0f,// middle left 8
    					-0.5f, -0.816f, -1.0f,// bottom left 6
    					-1.0f, 0.0f, 1.0f,// middle left 2
    					-0.5f, -0.816f, 1.0f // bottom left 0
    			},// bottom left face
    			new float[] { 0.5f, -0.816f, -1.0f,// bottom right 7
    					1.0f, 0.0f, -1.0f,// middle right 9
    					0.5f, -0.816f, 1.0f,// bottom right 1
    					1.0f, 0.0f, 1.0f // middle right 3
    			},// bottom right face
    			new float[] { 0.5f, 0.816f, -1.0f, // top right 11
    					1.0f, 0.0f, -1.0f,// middle right 9
    					0.5f, 0.816f, 1.0f,// top right 5
    					1.0f, 0.0f, 1.0f // middle right 3
    			},// top right face
    			new float[] { -0.5f, 0.816f, -1.0f, // top left 10
    					0.5f, 0.816f, -1.0f, // top right 11
    					-0.5f, 0.816f, 1.0f,// top left 4
    					0.5f, 0.816f, 1.0f // top right 5
    			},// top face
    			new float[] { -0.5f, 0.816f, -1.0f, // top left 10
    					-1.0f, 0.0f, -1.0f,// middle left 8
    					-0.5f, 0.816f, 1.0f, // top left 4
    					-1.0f, 0.0f, 1.0f // middle left 2
    			} // top left face
    	};
    
    	// 定义每一个平面颜色的数组
    
    	private float[] colors = { 1.0f, 0.0f, 0.0f, 1.0f, // 0
    			0.0f, 1.0f, 0.0f, 1.0f,// 1
    			0.0f, 0.0f, 1.0f, 1.0f, // 2
    			1.0f, 1.0f, 1.0f, 1.0f, // 3
    			1.0f, 1.0f, 0.0f, 1.0f,// 4
    			1.0f, 0.0f, 1.0f, 1.0f,// 5
    			0.0f, 1.0f, 1.0f, 1.0f,// 6
    			0.5f, 0.5f, 0.5f, 1.0f, // 7
    	};
    
    	// 保存每一个平面的顶点索引的二维数组
    
    	private byte[][] indies = {
    			new byte[] { 0, 1, 2, 1, 3, 2, 2, 3, 4, 3, 5, 4 },// front face
    			new byte[] { 0, 1, 2, 1, 3, 2, 2, 3, 4, 3, 5, 4 },// back face
    			new byte[] { 0, 1, 2, 1, 3, 2 },// bottom face
    			new byte[] { 0, 1, 2, 1, 3, 2 },// bottom left face
    			new byte[] { 0, 1, 2, 1, 3, 2 },// bottom right face
    			new byte[] { 0, 1, 2, 1, 3, 2 },// top right face
    			new byte[] { 0, 1, 2, 1, 3, 2 },// top face
    			new byte[] { 0, 1, 2, 1, 3, 2 } // top left face
    	};
    
    	public Polygon() {
    
    		// 利用循环初始化顶点坐标faceVertexBuffer数组和顶点索引indexBuffer数组
    		ByteBuffer bb;
    		faceVertexBuffer = new FloatBuffer[8];
    		for (int i = 0; i < faceVertices.length; i++) {
    			bb = ByteBuffer.allocateDirect(faceVertices[i].length * 4);
    			bb.order(ByteOrder.nativeOrder());
    			faceVertexBuffer[i] = bb.asFloatBuffer();
    			faceVertexBuffer[i].put(faceVertices[i]);
    			faceVertexBuffer[i].position(0);
    
    		}
    
    		indexBuffer = new ByteBuffer[8];
    		for (int i = 0; i < indies.length; i++) {
    			indexBuffer[i] = ByteBuffer.allocateDirect(indies[i].length);
    			indexBuffer[i].put(indies[i]);
    			indexBuffer[i].position(0);
    
    		}
    
    	}
    
    	public void draw(GL10 gl) {
    
    		// 利用循环绘制六棱柱的每一个面,并给不同的面设置不同的颜色
    		gl.glFrontFace(GL10.GL_CW);
    
    		for (int i = 0; i < 8; i++) {
    			gl.glVertexPointer(3, GL10.GL_FLOAT, 0, faceVertexBuffer[i]);
    			gl.glColor4f(colors[4 * i + 0], colors[4 * i + 1],
    					colors[4 * i + 2], colors[4 * i + 3]);
    			gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    
    			gl.glDrawElements(GL10.GL_TRIANGLES, indies[i].length,
    					GL10.GL_UNSIGNED_BYTE, indexBuffer[i]);// 另一种绘制的方法glDrawElements
    			gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    		}
    
    	}
    
    }

    展开全文
  • 通过实例代码向大家演示了在Css3中如何绘制各种大家所需要的几何图形,对大家日常使用还是很有帮助,有需要的可以参考学习。
  • opengl 绘制 棱锥

    2010-06-15 10:26:30
    利用opengl 通过坐标系,通过点和面组合成棱锥
  • opengl生成空心圆柱,测试可用生成空心圆柱,每一步都有注释,可用。 #include <gl/glut.h> #include <gl/GLU.h> #include <gl/GL.h>...#pragma comment(lib, "opengl32.lib") #pragma comment(lib, ...
  • CSS(六) CSS链接

    2019-01-25 19:07:55
    不同的链接可以有不同的样式。 1.链接样式 链接的样式,可以用任何CSS属性(如颜色,字体,背景等)。 特别的链接,可以有不同的样式,这取决于他们是什么状态。 ...这四个链接的状态是: ...当设置为若干链路状态的...
  • VBS三画展出

    2017-02-27 20:35:16
    用VBS作画
  • OpenGL学习笔记(六)

    2017-05-08 13:54:19
    混合我们在很多场合都过这样的经历,在设置某些色块的颜色的时候,我们不光要设置它的RGB值,还可能需要设置它的Alpha值。一般理解上,我们都认为这个Alpha值代表了当前色块的透明度。这样只是最外在的理解,其实...
  • 一,类的继承: 1,类的继承是指在一个类的基础上再构建一个新的类。新的类为子类,子类自动拥有父类中所有可继承的属性和方法。类似C++和C#中的继承,但是格式稍有区别: class 父类名 extends 子类名{};...
  • <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>盒子模型</title> <style> /* 所有元素边距为0 */ * { margin: 0px;....
  • 大家好,我是房老师说数学,我将以文字和视频的方式讲解整个初中数学内容,有问题请关注并留言。1.1生活中的立体图形 ----房老师什么是立体图形...棱、棱锥也是常见的立体图形。例题:下列图形不是立体图形的是( ...
  • 作品名称: 《古堡危机》 小组团队名称: 拾荒三人组 日期:2018年12月 目录 第一章 简介 3 前言 3 项目的创意设想、游戏类型、实现的功能、项目意义 3 Opengl 4 ...角色位置及视角控制 1
  • Python第六章部分习题

    2018-03-22 00:11:06
    6-1 人输出:6-2喜欢的数字:输出:6-10 喜欢的数字#2输出:
  • css实现六边形

    千次阅读 2015-09-12 15:13:03
    最近在写一个蜂窝式布局,所以研究了一下六边形的实现原理 实现六边形的俩种方式: 方式一: 一个长方形+两个三角形 首先我们要先了解一下border 每个border之间是成45度,利用这点我们可以做出来三角形...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 174
精华内容 69
关键字:

六棱柱