unity生成随机表元素间隔距离相同的点

server/2024/11/14 6:51:29/

            #region   生成随机点
            float minX = -800f;
            float maxX = 800f;
            float minY = -400f;
            float maxY = 400f;
            // 计算相邻点之间的间距
            float distanceBetweenPoints = 500f;
            // 生成指定数量的点
            for (int i = 0; i < 12; i++)
            {
                // 随机生成点的位置
                float randomX = UnityEngine.Random.Range(minX, maxX);
                float randomY = UnityEngine.Random.Range(minY, maxY);

                Vector2 newPoint = new Vector2(randomX, randomY);

                if (i == 0)
                {
                    mPosTf3.localPosition = newPoint;
                    mPos.Add(newPoint);
                }
 
                // 移动生成的点,确保相邻点之间的间距
                if (i > 0)
                {
                    // 随机生成点的位置
                    Vector2 randomPosition = new Vector3(UnityEngine.Random.Range(minX, maxX), UnityEngine.Random.Range(minY, maxY));

                    检查点的位置是否超出范围,如果是则重新随机位置
                    //while (IsPositionOutOfRange(randomPosition, mPos))
                    //{
                    //    randomPosition = new Vector3(UnityEngine.Random.Range(minX, maxX), UnityEngine.Random.Range(minY, maxY), 0f);
                    //}


                    Vector2 previousPointPosition = mPos[i - 1];


                    Vector2 newPosition = previousPointPosition + (randomPosition - previousPointPosition).normalized * distanceBetweenPoints;
                    // 检查新位置是否超出范围,如果是则重新随机位置
                    while (IsPositionOutOfRange(newPosition))
                    {
                        randomPosition = new Vector2(UnityEngine.Random.Range(minX, maxX), UnityEngine.Random.Range(minY, maxY));
                        newPosition = previousPointPosition + (randomPosition - previousPointPosition).normalized * distanceBetweenPoints;
                    }

                    //Vector3 newPosition;
                    //do
                    //{
                    //    // 随机生成点的位置
                    //    newPosition = new Vector2(UnityEngine.Random.Range(minX, maxX), UnityEngine.Random.Range(minY, maxY));
                    //} while (Vector3.Distance(newPosition, mPos[i - 1]) < 500f&& Vector3.Distance(newPosition, mPos[i - 1])>300f); // 检查点与上一个点的距离是否小于500像素
                    mPos.Add(newPosition);
                }
            }
            for (int i = 0; i < mPos.Count; i++)
            {
                Debug.Log($"mPos==={mPos[i]}");
            }
            #endregion

        bool IsPositionOutOfRange(Vector2 position)
        {
            // 检查点的位置是否超出范围
            float minX = -800f;
            float maxX = 800f;
            float minY = -400f;
            float maxY = 400f;

            if (position.x < minX || position.x > maxX || position.y < minY || position.y > maxY)
            {
                return true;
            }

            return false;
        }
 


http://www.ppmy.cn/server/29885.html

相关文章

FIFO Generate IP核使用——Data Counts页详解

在Vivado IDE中&#xff0c;当看到一个用于设置数据计数选项的选项卡时&#xff0c;需要注意的是&#xff0c;尽管某些选项值可能因为当前的配置而显示为灰色&#xff08;即不可选或已禁用&#xff09;&#xff0c;但IDE中显示的有效范围值实际上是你可以选择的真实值。即使某些…

selenium 4.20.0 访问外网问题

保存信息&#xff1a;There was an error managing chromedriver (error sending request for url (https://storage.googleapis.com/chrome-for-testing-public/124.0.6367.91/win64/chromedriver-win64.zip)); using driver found in the cache 报错原因&#xff1a;因为sel…

【经典算法】Leetcode.83删除排序链表中的重复元素(Java/C/Python3/Go实现含注释说明,Easy)

标签&#xff1a;链表 题目描述 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 原题&#xff1a;LeetCode 83 思路及实现 方式一&#xff1a;双指针 思路 使用快慢双指针遍历链表&#xff0c;快指针用于遍历链表&#xff0c;慢指…

【笔记】Python3|2024年 PDF 转 XML 或 HTML 的第三方库的使用方式、测评过程以及对比结果(汇总)

文章目录 PDF2HTML_Samples1 测评过程2 评估方式3 结果说明4 测评列表 PDF2HTML_Samples 目的是对比一下常用的 PDF 转 HTML/XML 的工具。 整个对比过程放在了 Github 仓库中&#xff0c; 欢迎提交 PR/Issue 补充更多工具&#xff1a;https://github.com/shandianchengzi/PDF…

构建矿业企业数字化未来:核心架构与落地策略

随着数字化时代的到来&#xff0c;矿业企业正面临着前所未有的机遇与挑战。在这个充满变革的时代&#xff0c;构建一个稳固的数字化核心架构并将其有效落地成为了矿业企业持续发展的关键。本文将深入探讨矿业企业数字化核心架构的构建和落地策略&#xff0c;助您在数字化转型的…

PHP的数组练习实验

实 验 目 的 掌握索引和关联数组&#xff0c;以及下标和元素概念&#xff1b; 掌握数组创建、初始化&#xff0c;以及元素添加、删除、修改操作&#xff1b; 掌握foreach作用、语法、执行过程和使用&#xff1b; 能应用数组输出表格和数据。 任务1&#xff1a;使用一维索引数…

SQLite如何处理CSV 虚拟表(三十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的DBSTAT 虚拟表&#xff08;三十六&#xff09; 下一篇:SQLite的扩展函数Carray()表值函数(三十八) ​ RFC4180格式是一种文本文件格式&#xff0c;被用于表格数据间的交互&#xff0c;也可将表格数据转化…

Mybatis高级

1. Mybatis多表查询概念 ​ 在学习多表查询的之前&#xff0c;我们要先明确多表的关系都有哪些&#xff0c;如何划分。 1.1 多表关系的划分 一对一 一对一的关系是两张表之间 A表的一条数据只能对应B表的一条数据。比如 订单表和用户表 一个订单只能属于…