zoukankan      html  css  js  c++  java
  • 钻石恒久远,一颗永流传

    钻石恒久远,一颗永流传

    var sp:Sprite =addChild(new Sprite()) as Sprite;
    sp.x 
    = stage.stageWidth / 2;
    sp.y 
    = stage.stageHeight / 2;
    sp.z 
    = 0;
    var iNum:
    int = 4;//八边形的层数
    var jNum:
    int = 12;//八边形的边数
    var R:Number 
    = 40;//八边形最大的半径
    var r:Number 
    = 0;//上下顶端的半径
    var temp_Rr:Number;
    //
    var temp_x:Number;
    var temp_y:Number;
    var temp_z:Number;
    var ang:Number;
    var total_Point:
    Array = [];
    var container_triangle:
    Array = [];
    var mtxworld:Matrix3D
    =new Matrix3D();//改变点坐标的矩阵
    var _oldMousePoint:Point 
    = new Point  ;
    var color:uint
    =0xA4B3D2;//初始颜色值0xc8b9ec/0xcbe0f4
    function init(R:Number=40,r:Number=0) {

        
    for (var i:int=0; i<=iNum; i++) {
            total_Point[i] 
    = [];
            
    if (i == 0) {
                temp_Rr 
    = r;
                temp_y 
    = 0;
            }
            
    if (i == iNum) {
                temp_Rr 
    = r;
                temp_y 
    = 120;
            }
            
    if (i < iNum && i > 0) {
                
    //temp_Rr=R+(i-1)*20 ;
                i 
    == 1 ? temp_Rr = 40:0;
                i 
    == 2 ? temp_Rr = 70:0;
                i 
    == 3 ? temp_Rr = 80:0;
                temp_y
    =20*(i-1);
            }
            
    if (i % iNum == 0) {
                total_Point[i].push(
    new Vector3D(0,temp_y,0));
            } 
    else {
                
    for (var j:int=0; j<=jNum; j++) {
                    ang 
    = i == 2 ? 1 * Math.PI / 12:0;
                    
    //ang = 0;
                    temp_x
    =-temp_Rr*Math.cos(j*(2*Math.PI/jNum)+ang);
                    temp_z
    =temp_Rr*Math.sin(j*(2*Math.PI/jNum)+ang);
                    total_Point[i].push(
    new Vector3D(temp_x,temp_y,temp_z));
                }
            }
        }
        
    for (j=0; j<jNum; j++) {
            var triangle_A:
    Object = {pt1:total_Point[3][j],pt2:total_Point[2][j],pt3:total_Point[3][j + 1]};
            var triangle_B:
    Object = {pt1:total_Point[2][j],pt2:total_Point[1][j],pt3:total_Point[1][j + 1]};
            var triangle_C:
    Object = {pt1:total_Point[3][j + 1],pt2:total_Point[2][j],pt3:total_Point[2][j + 1]};
            var triangle_D:
    Object = {pt1:total_Point[2][j + 1],pt2:total_Point[2][j],pt3:total_Point[1][j + 1]};
            var triangle_E:
    Object = {pt1:total_Point[1][j],pt2:total_Point[0][0],pt3:total_Point[1][j + 1]};
            var triangle_F:
    Object = {pt1:total_Point[4][0],pt2:total_Point[3][j],pt3:total_Point[3][j + 1]};
            container_triangle.push(triangle_A,triangle_B,triangle_C,triangle_D,triangle_E,triangle_F);
        }
        trace(container_triangle.length);
        render();
    }
    function render(degreX:Number=20,degreY:Number=0,degreZ:Number=0) {
        var point3D:Vector.
    <Number>=new Vector.<Number>();
        var point2D:Vector.
    <Number>=new Vector.<Number>();
        var new_3D:Vector.
    <Number>=new Vector.<Number>();
        var uvt:Vector.
    <Number>=new Vector.<Number>();
        var temp3D_triangle:
    Object;
        var temp_triangles:
    Array=new Array();
        
    //var mouseVector:Vector3D=new Vector3D(sp.mouseX,sp.mouseY,600);
        var mouseVector:Vector3D 
    = new Vector3D(10 * Math.random(),30 * Math.random(),600);
        var array_length:
    int = container_triangle.length;
        
    for (var i:int=0; i<array_length; i++) {
            point3D.push(container_triangle[i].pt1.x,container_triangle[i].pt1.y,container_triangle[i].pt1.z,container_triangle[i].pt2.x,container_triangle[i].pt2.y,container_triangle[i].pt2.z,container_triangle[i].pt3.x,container_triangle[i].pt3.y,container_triangle[i].pt3.z);
        }
        mtxworld.appendRotation(degreX
    /1,Vector3D.X_AXIS);//后置增量旋转
        mtxworld.appendRotation(degreY
    /1,Vector3D.Y_AXIS);
        mtxworld.appendRotation(degreZ
    /1,Vector3D.Z_AXIS);
        mtxworld.transformVectors(point3D,new_3D);
    //new_3D获取旋转后的坐标以便得到Z值设置层深
        
    //Utils3D.projectVectors(pm, new_3D, point2D,uvt);
        array_length 
    = new_3D.length;
        
    for (i=0; i<array_length; i+=9) {
            temp3D_triangle
    ={pt1:new Vector3D(new_3D[i],new_3D[i+1],new_3D[i+2]),pt2:new Vector3D(new_3D[i+3],new_3D[i+4],new_3D[i+5]),pt3:new Vector3D(new_3D[i+6],new_3D[i+7],new_3D[i+8]),d:new_3D[i+2]+new_3D[i+5]+new_3D[i+8]};
            temp_triangles.push(temp3D_triangle);
        }
        temp_triangles.sortOn(
    "d",Array.NUMERIC |Array.DESCENDING );//按数值降序排列,大的先绘制在里,小的后绘制在外
        sp.graphics.clear();
        
    //sp.graphics.lineStyle(1,0xffffff);
        
    //sp.graphics.beginFill(0xE2DFC8);
        array_length
    =temp_triangles.length;

        
    for (i=0; i<array_length; i++) {
            var v_1:Vector3D
    =temp_triangles[i].pt1.subtract(temp_triangles[i].pt2);
            var v_2:Vector3D
    =temp_triangles[i].pt3.subtract(temp_triangles[i].pt1);
            var v_light:Vector3D
    =mouseVector//.subtract(temp_triangles[i].pt2);
            v_light.normalize();
            
    //mouseVector.normalize()
            
    //var v_light:Vector3D=mouseVector
            var n:Vector3D
    =v_1.crossProduct(v_2);
            n.normalize();
            var w:Number
    =v_light.dotProduct(n);
            var r0:
    int=(color>>16)*w,g0:int=(color>>8&0xff)*w,b0:int=(color&0xff)*w;
            r0
    =(r0>255)?255:(r0<0)?0:r0;
            g0
    =(r0>255)?255:(g0<0)?0:g0;
            b0
    =(r0>255)?255:(b0<0)?0:b0;
            sp.graphics.beginFill(r0
    <<16|g0<<8|b0);
            var v1:Vector3D
    =temp_triangles[i].pt1,v2:Vector3D=temp_triangles[i].pt2,v3:Vector3D=temp_triangles[i].pt3;
            sp.graphics.drawTriangles(Vector.
    <Number>([v1.x,v1.y,v2.x,v2.y,v3.x,v3.y]),null,null,TriangleCulling.POSITIVE);
        }

    }
    init();
    stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
    stage.addEventListener(Event.ENTER_FRAME, loopHandlerA);
    function downHandler(e:Event ):void {
        Mouse.cursor
    =MouseCursor.HAND;
        _oldMousePoint.x
    =mouseX;
        _oldMousePoint.y
    =mouseY;
        stage.removeEventListener(Event.ENTER_FRAME, loopHandlerA);
        stage.addEventListener(Event.ENTER_FRAME, loopHandler);
        stage.addEventListener(MouseEvent.MOUSE_UP, upHandler);
    }
    function loopHandler(e:Event ):void {

        render(mouseY
    -_oldMousePoint.y,-(mouseX-_oldMousePoint.x));


        _oldMousePoint.x
    =mouseX;
        _oldMousePoint.y
    =mouseY;
    }

    function upHandler(e:Event ):void {
        Mouse.cursor
    =MouseCursor.AUTO;
        stage.removeEventListener(Event.ENTER_FRAME, loopHandler);
        stage.addEventListener(Event.ENTER_FRAME, loopHandlerA);

    }
    function loopHandlerA(e:Event ):void {
        render(
    0,1,0);
    }
  • 相关阅读:
    Pyinstaller(python打包为exe文件)
    matplotlib 填充颜色
    Visual Studio 2015 Enterprise
    latex中pdflatex与xelatex的区别
    latex插图续
    dva+umi+antd项目从搭建到使用(没有剖验证,不知道在说i什么)
    umi+dva+antd新建项目(亲测可用)
    HTTP缓存机制
    企业网站常见需求整理
    立足于运维与监控的前端框架 NoahV
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1579319.html
Copyright © 2011-2022 走看看