3D--魔方

本文介绍了使用CSS3实现魔方动画的简单实例。涉及transform-style、animation等CSS属性,还说明了X、Y、Z轴方向确定、rotate时坐标轴变化、transform属性执行顺序等注意点,并给出了完整的HTML和CSS代码示例。

  css3简单动画实例,实现魔方的动画

1、涉及的css属性:

  (1)父元素样式中:

       transform-style: preserve-3d;/*规定子元素以3D显示*/

       animation:mofang 10s linear infinite;/*定义的动画名、动画完成的总时间、曲线样式、永久执行(infinite)*/

   (2)@keyframes 动画名{}:定义动画操作

      可以使用from{}和to{}定义

    也可以使用百分比定义,0%{}50%{}100%{}

2、注意点

  (1)X、Y、Z轴的方向确定:先想一个平面,即是X轴和Y轴,再想你的视线距离这个平面的距离指向,即Z轴(远小近大);可以伸出左手,大拇指是Y轴,食指是X轴,中指是Z轴(即中指是面向自己的)。

  css3中的3D坐标系:

      

  (2)rotate(旋转)时,坐标轴也会随着旋转,要区分是先移动再旋转,还是先旋转再移动,因为两者执行之后的结果显示是不一样的。

  (3)transform多个属性值,执行顺序,是按照从左向右执行。

  (4)在魔方中确定坐标轴:可以想象将一个木板垂直插入一个魔方的正中间,魔方的六个面分别是这个木板通过旋转、平移形成了不同的面。

3、实例

  <style>
        ul{
            list-style-type: none;
            margin: 0;
            padding: 0;
        }
        .box{
            width:300px;
            height:300px;
            margin: 150px auto;
            position: relative;
            font-size: 50px;
            /*所有元素保留3D转换*/
            transform-style: preserve-3d;
            /*动画效果*/
            animation: mofang 10s linear infinite;
        }
        .box > div{
            width:300px;
            height:300px;
            position: absolute;
        }
        li{
            float: left;/*让li浮动*/
            width:90px;
            height:90px;
            margin: 5px;
            line-height: 90px;
            text-align: center;
            border-radius: 20px;
        }
        /*每个div下的li背景*/
        .before li{
            background-color:red;
        }
        .back li{
            background-color: #ba9304;
        }
        .top li{
            background-color: deeppink;
        }
        .bottom li{
            background-color: blueviolet;
        }
        .left li{
            background-color: greenyellow;
        }
        .right li{
            background-color: blue;
        }
        /*转换之后的效果,下面容易晕*/
        .before{
            background-color: transparent;
            transform: translateZ(150px);
        }
        .back{
            background-color: transparent;
            transform:translateZ(-150px) rotateY(180deg);
        }
        .top{
            background-color: transparent;
            transform:rotateX(90deg) translateZ(150px) rotateZ(180deg);
        }
        .bottom{
            background-color: transparent;
            transform:rotateX(-90deg) translateZ(150px);
        }
        .left{
            background-color: transparent;
            transform:rotateY(-90deg)  translateZ(150px);
        }
        .right{
            background-color: transparent;
            transform:rotateY(90deg) translateZ(150px);
        }
        @keyframes mofang {
            from{
                transform:rotateY(0deg) rotateX(0deg);
            }
            to{
                transform:rotateY(135deg) rotateX(45deg);
            }
        }
    </style>

  <div class="box">
    <div class="before">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
    <div class="back">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
    <div class="top">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
    <div class="bottom">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
    <div class="left">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
    <div class="right">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
</div>

注意:li要设置浮动显示,不然不会在一个面。

仅是一个简单实例,记录总结一下。复杂的动画自己再慢慢尝试。

  

转载于:https://www.cnblogs.com/lfjblog/p/9566325.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值