如何实现随机生成坐标点,并且使每个坐标点之间的距离大于某个距离?(用于散点图的绘制,进行数据的处理)

news2024/11/18 21:27:08

背景:

最近需要开发一个新需求,需要绘制一个随机生成数字的散点图,要求点与点的距离要大于某个特定值。

解决思路:

通过循环获取每个坐标点,每获取一个新的坐标点,都要与之前生成的坐标点进行对比,如果大于指定距离,
则符合条件,退出循环,如果小于或等于该距离,则继续随机生成,进行比对。

实现代码:

        let dataArray  = [];

        for (let i = 1; i < 10; i++) {
            let obj = {};
            if (i == 0) {
                obj.x = Math.round(Math.random() * 100);
                obj.y = Math.round(Math.random() * 100);
            } else {
                let number = 0;
                while (number <= 10) {
                    obj.x = Math.round(Math.random() * 100);
                    obj.y = Math.round(Math.random() * 100);
                    let flag = dataArray.every((item) => {
                         //点与点之间的计算公式
                        number = Math.sqrt(Math.pow(Math.abs(obj.x - item.x), 2) + Math.pow(Math.abs(obj.y - item.y), 2));
                        return number >= 10
                    })
                    if (flag) {
                        break
                    }
                }
            }
            dataArray.push(obj);
        }

        console.log(dataArray)

配合echarts完整代码实现:

可直接复制到本地看效果!!!!

<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">

<head>
    <meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
    <div id="container" style="height: 100%"></div>
    <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.0/dist/echarts.min.js"></script>
    <script type="text/javascript">
        var dom = document.getElementById('container');
        var myChart = echarts.init(dom, null, {
            renderer: 'canvas',
            useDirtyRect: false
        });
        var app = {};
        var option;
        let dataArray  = [];

        for (let i = 1; i < 10; i++) {
            let obj = {};
            if (i == 0) {
                obj.x = Math.round(Math.random() * 100);
                obj.y = Math.round(Math.random() * 100);
            } else {
                let number = 0;
                while (number <= 10) {
                    obj.x = Math.round(Math.random() * 100);
                    obj.y = Math.round(Math.random() * 100);
                    let flag = dataArray.every((item) => {
                         //点与点之间的计算公式
                        number = Math.sqrt(Math.pow(Math.abs(obj.x - item.x), 2) + Math.pow(Math.abs(obj.y - item.y), 2));
                        return number >= 10
                    })
                    if (flag) {
                        break
                    }
                }
            }
            dataArray.push(obj);
        }

        console.log(dataArray)

        let newArray = []

        dataArray.map((ele) => {
            let array = []
            array.push(ele.x);
            array.push(ele.y);
            newArray.push(array);
        })

        option = {
            xAxis: {},
            yAxis: {},
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'cross'
                }
            },
            series: [
                {
                    symbolSize: 20,
                    data: newArray,
                    type: 'scatter'
                }
            ]
        };

        if (option && typeof option === 'object') {
            myChart.setOption(option);
        }

        window.addEventListener('resize', myChart.resize);
    </script>
</body>

</html>

效果图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为你揭秘保健品平台利用“消费全返”,半年净赚过百万背后的原因

​大家好&#xff0c;我是每天分享电商模式咨询的林工&#xff0c;最近林工了解到某一家保健品企业&#xff0c;利用做会员招商活动一招“消费全返”的商业模式&#xff0c;在短短半年内裂变近数十万会员&#xff0c;净挣过百万营业额&#xff0c;这个模式值得各行各业的企业家…

Python实战案例,tkinter+random模块,实现课堂随机抽选提问并语音播报学生姓名

前言 今天给大家介绍Python实现课堂随机抽选提问并语音播报学生姓名实战案例&#xff0c;废话不多说直接开整~ 开发工具 Python版本&#xff1a; 3.8 相关模块&#xff1a; tkinter模块 time模块 random模块 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需…

计算机毕业设计ssm+vue基本微信小程序的琴房管理系统 uniapp 小程序

项目介绍 随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,钢琴培训企业各种管理系统层出不穷,为钢琴培训企业琴房管理开发必要的系统,能够有效的提升管理效率。一直以来,钢琴培训企业琴房预约一直没有进行系统化的管理,学生无…

sharing-jdbc-1-5.x版本应用

1总结 2&#xff1a;详解 运行模式 :: ShardingSphere 用户手册&#xff0c;开发手册。这俩比较重要 spring.shardingsphere.mode.type 默认内存模式 3官网案例 不同的依赖坐标&#xff0c;配置方式不一样。按照官网的配置来一步一步配置。 4 整合springboot方式 行表达式 :…

【JS】postMessage 用法(可以给iframe传值)

文章目录基本概念代码案例基本概念 跨文档消息&#xff0c;有时候也简称为XDM(cross-document messaging) 是一种在不同执行上下文&#xff08;如不同源的页面&#xff09;间传递信息的能力。例如&#xff1a;www.wrox.com上的页面想要与包含在内嵌窗格中的p2p.wrox.com上面的页…

第一个Spring Boot程序

⭐️前言⭐️ 本文主要介绍Spring Boot项目的创建流程&#xff0c;及Spring Boot项目目录的一些注意事项。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】 &…

JAVA SCRIPT设计模式--行为型--设计模式之Command命令模式(14)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

服务器硬件规格常用查看命令——CPU相关命令

使用lscpu 命令可以从sysfs和/proc/cpuinfo中收集CPU体系结构信息&#xff0c;并解析优化为易阅读的格式。该信息包括&#xff1a;CPU的线程、核心、套接字数量和非一致内存访问&#xff08;NUMA&#xff09;节点的数量&#xff0c;以及CPU缓存、共享缓存、系列、型号等信息。 …

英文写作—Grammarly安装及下载

Grammarly是一款在线语法纠正和校对工具&#xff0c;支持Windows、Mac、iOS和Android等多个平台。 主要功能包括检查单词拼写、纠正标点符号、修正语法错误、调整语气以及给出风格建议等&#xff1b;对学术写作来说&#xff0c;Grammarly还可以帮助查重。 登陆界面&#xff1a…

每日一题:折半查找法,二分查找法

每日一题&#xff1a;折半查找法&#xff0c;二分查找法每日一题&#xff1a;折半查找法&#xff0c;二分查找法二分查找法定义&#xff1a;代码1&#xff1a;代码2&#xff1a;每日一题&#xff1a;折半查找法&#xff0c;二分查找法 ​ &#x1f496;&#x1f496;个人博客:比…

SpringBoot之自定义注解

目录 1.java注解简介 1.1.java注解分类 1.1.1.JDK基本注解 1.1.2.JDK元注解 1.1.3.自定义注解 1.1.4 在这里如何自定义注解&#xff1f; 2、自定义注解 3.Aop应用自定义注解 1.java注解简介 Java注解是附加在代码中的一些元信息&#xff0c;用于一些工具在编译、运行时进行解…

可靠性udp传输大文件

高级计算机网络大作业-可靠性udp传输大文件实验数据zstd压缩1G文件&#xff08;延迟100ms、丢包1%&#xff09;0.1G文件&#xff08;延迟100ms、丢包1%&#xff09;0.01G文件&#xff08;延迟100ms、丢包1%&#xff09;多线程lzma压缩1G文件&#xff08;延迟100ms、丢包1%&…

N子棋(外加双人对战)详解!推荐!!!

文章目录准备工作创建菜单进入游戏初始化棋盘、打印棋盘玩家下棋、电脑下棋、生成随机数判断输赢大家好&#xff01;时隔多天&#xff0c;我终于写博客了&#xff0c;真的是开心&#xff01;这一次带来的是N子棋有双人对战和单人下棋&#xff0c;请认真看下去&#xff0c;我会竭…

虚拟人纷纷「出道」,社交泛娱乐场景如何迎接新顶流?

⬆️“政企数智办公行业研究报告及融云新品发布会”明天直播&#xff01; 本月 12 日&#xff0c;花房集团即将于香港上市。关注【融云全球互联网通信云】回复【融云】抽取高颜值大容量高端可乐保温杯哦~ 中国政企数智办公平台 在带货直播平台的赫赫之名下&#xff0c;娱乐直播…

Git —— 那些在工作中日常使用的操作

Git —— 那些在工作中日常使用的操作 《工欲善其事&#xff0c;必先利其器》—— 既然点进来了&#xff0c;麻烦你看下去&#xff0c;希望你有不一样的收获~ 一、同一项目关联不同平台的远程仓库 格式&#xff1a;git remote add 命名 仓库链接 git remote add github ssh:/…

六、排序算法介绍2

1、冒泡排序 1.1 基本介绍 冒泡排序&#xff08;Bubble Sorting&#xff09; 的基本思想是&#xff1a; 通过对待排序序列从前向后&#xff08;从下标较小的元素开始&#xff09;&#xff0c;依次比较相邻元素的值&#xff0c; 若发现逆序则交换&#xff0c; 使值较大的元素逐…

netcore接入钉钉扫码登录

netcore接入钉钉扫码登录一、首先官方文档预览二、登录钉钉开发者后台三、创建第三方登录授权应用1.新版打开方式2.旧版打开方式&#xff08;1&#xff09;先返回旧版页面&#xff08;2&#xff09;选择应用开发&#xff08;3&#xff09;编辑登录应用信息&#xff08;4&#x…

npm包是什么?如何发布npm包?

Node的组成 内置模块 自定义模块 第三方模块&#xff08;什么是包&#xff1f;&#xff09; npm包包括那些东西&#xff1f; package.json README.md 。。。.js 注册npm账号 细节 发布包 package.json README.md index.js date htmlEscape 层级结构 发布指令 N…

STC15 - C51 - Memory Models

文章目录STC15 - C51 - Memory Models概述笔记内存用量的优化思路ENDSTC15 - C51 - Memory Models 概述 在STC上测试呢, 想看看变量(不同类型的定义)被编译器分配在哪个内存范围(idata, pdata, xdata)? 同时, 总结一下降低内存用量的思路(如果像上位机那样内存管够, 就不用考…

Linux系统编程第五节——进程创建、终止、等待(通俗易懂快速上手版本)

目录 进程的创建 写时拷贝 进程的终止 进程的等待 状态参数status wait函数和waitpid函数 我们本节内容&#xff0c;主要来讲述进程控制有关的内容。 同样&#xff0c;我们会用通俗易懂、不同于教科书的讲授思路&#xff0c;来为大家讲解。 同时&#xff0c;本节内容板块…