轮转图3D

 

下面流程生成的是Cube预制体,生成不同模型,需要在代码里做细小的改动。 

创建一个空物体,挂载轮转图3D脚本 

为预制体挂载脚本

代码如下: 

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using DG.Tweening;
using UnityEngine.UIElements;

public class Cyclogram3D : MonoBehaviour
{
    //预制体
    public GameObject m_Prefab;
    //预制体数量
    public int m_Num;
    //每两个预制体间的弧度
    float m_Rad;
    //剩余移动弧度
    float m_MoveRad;
    //预制体围成圆的半径
    public float m_Radius;
    //存储生成的预制体
    List<GameObject> m_List = new List<GameObject>();
    //用于排序
    List<Transform> m_Trans = new List<Transform>();
    internal void OnDragPrefab(float v)
    {
        m_MoveRad -= v / m_Radius;
        OnMove();
    }
    /// <summary>
    /// 惯性
    /// </summary>
    /// <param name="v">剩余横向偏移量</param>
    internal void OnInertia(float v)
    {
        DOTween.To((a) =>
        {
            OnDragPrefab(a);
        }, v, 0, 2).OnComplete(() =>
        {
            m_Trans.Sort((a, b) =>
            {
                return (int)(a.position.z - b.position.z);
            });
            OnAlign(m_List.IndexOf(m_Trans[0].gameObject));
        });
    }
    /// <summary>
    /// 对齐
    /// </summary>
    /// <param name="v">最前面的游戏对象在原m_List集合中的索引</param>
    public void OnAlign(int v)
    {
        #region 指定查找,最短路径轮转
        m_Trans.Sort((a, b) =>
        {
            return (int)(a.position.z - b.position.z);
        });
        int index = m_List.IndexOf(m_Trans[0].gameObject);
        int zheng = index - v;
        int fan = m_Num - Mathf.Abs(zheng);
        fan = zheng < 0 ? fan : -fan;
        int offset = Mathf.Abs(zheng) < Mathf.Abs(fan) ? zheng : fan;
        float offsetAngle = offset * m_Rad;
        #endregion
        //只有指定查找,才加offsetAngle;不是指定查找,不用加
        float totalRad = Mathf.Asin(m_Trans[0].position.x / m_Radius) + offsetAngle;
        DOTween.To((a) =>
        {
            m_MoveRad = a;
            OnMove();
        }, m_MoveRad, m_MoveRad + totalRad, 2);
    }
    void Start()
    {
        m_Rad = 2 * Mathf.PI / m_Num;
        OnMove();
    }

    private void OnMove()
    {
        for (int i = 0; i < m_Num; i++)
        {
            float x = Mathf.Sin(i * m_Rad + m_MoveRad) * m_Radius;
            float z = Mathf.Cos(i * m_Rad + m_MoveRad) * m_Radius;
            if (m_List.Count <= i)
            {
                GameObject go = Instantiate(m_Prefab, transform);
                go.name = i.ToString();
                m_List.Add(go);
                m_Trans.Add(go.transform);
            }
            m_List[i].transform.position = new Vector3(x, 0, z);
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Cyclogram3D_Item : MonoBehaviour
{
    private void OnMouseDrag()
    {
        Vector3 pos=Camera.main.WorldToScreenPoint(transform.position);
        Vector3 mouse=Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,pos.z));
        transform.parent.GetComponent<Cyclogram3D>().OnDragPrefab(mouse.x - transform.position.x);
    }
    private void OnMouseUp()
    {
        Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
        Vector3 mouse = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, pos.z));
        transform.parent.GetComponent<Cyclogram3D>().OnInertia(mouse.x - transform.position.x);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物像数据,这些数据包括健康植物的像以及受不同病虫害影响的植物像。 2. **像预处理**:对收集到的像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,像识别在病虫害检测中的应用将越来越广泛。
HTML和CSS可以通过使用CSS3的transform属性来实现3D轮转。下面是一个简单的实现步骤: 1. 首先,在HTML文件中创建一个容器元素,用于包裹轮转的所有元素。例如: ```html <div class="container"> <!-- 定义每个像的元素 --> <div class="image"></div> <div class="image"></div> <div class="image"></div> <!-- 可添加更多像元素 --> </div> ``` 2. 接下来,在CSS文件中设置容器元素和像元素的样式。首先,设置容器元素的样式,使其能够显示出3D效果: ```css .container { width: 300px; /* 设置容器宽度 */ height: 300px; /* 设置容器高度 */ perspective: 1000px; /* 设置透视效果,值越大离观察者越远 */ } ``` 3. 然后,设置像元素的样式,并应用3D效果: ```css .image { width: 100%; /* 设置像元素宽度 */ height: 100%; /* 设置像元素高度 */ background-image: url("路径/到/像"); /* 设置像背景 */ background-size: cover; /* 设置像背景大小,以覆盖整个像元素 */ transform-style: preserve-3d; /* 保持3D效果 */ animation: rotation 10s infinite linear; /* 设置像旋转动画,时间、循环方式可根据需求自行调整 */ } @keyframes rotation { from { transform: rotateY(0deg); /* 开始时的旋转角度 */ } to { transform: rotateY(360deg); /* 结束时的旋转角度 */ } } ``` 通过以上步骤,我们就可以实现一个简单的3D轮转。你可以根据需要调整容器元素和像元素的样式,添加更多的像元素来实现更复杂的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值