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

2023-11-19

背景:

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

解决思路:

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

实现代码:

        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>

效果图:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • linux安装ffmpeg

    1 下载解压 wget http www ffmpeg org releases ffmpeg 3 1 tar gz tar zxvf ffmpeg 3 1 tar gz 2 进入解压后目录 输入如下命令 usr local ffmpeg为
  • 微软七届MVP桂素伟:移动互联网与职业规划

    原文地址 http student csdn net mcd topic 163587 955481 2014年10月19日在哈尔滨工业大学举办了CSDN高校俱乐部全国巡讲 此次邀请到了微软七届MVP和山西 Net俱乐部创始人桂素伟 他擅长
  • lua调用不同lua文件中的函数

    a lua和b lua在同一个目录下 a lua调用b lua中的test方法 注意b中test的写法 M 和 a中调用方法 b lua local M function M test ngx say hello test end retu
  • 要面试了,写写小程序练练手,顺便记录一下

    1 大数相乘 int i 0 j 0 tmp 0 define MAX A 12 define MAX B 10 void main int i 0 j 0 tmp 0 int a MAX A 1 2 3 4 5 6 7 8 9 1 2 3
  • 【DockerCE】使用Docker安装运行性能测试工具-RunnerGo

    一 安装环境 CentOS 7 9 Docker CE 23 0 1 Docker compose 2 17 2 二 资源配置 4核8G 官方建议8核16GB 三 安装运行 从Github下载安装所需的文件包 版本1 0 3 这里选择的是t
  • 《MySQL实战45讲》读后感 06

    收获到的知识点 MySQL里面的锁大致可以分成全局锁 表级锁和行锁三类 全局锁 加全局锁的方法一 flush tables with read lock FTWRL 当你需要整个库处于只读状态的时候 可以使用这个命令 之后其它的线程会被阻塞
  • 智能检测与控制

    智能检测与控制在智能工厂各层次中的应用 智能工厂各层次定义的功能以及各种系统 设备在不同层次上的分配如下 1 计划层 实现面向企业的经营管理 如接收订单 建立基本生产计划 如原料使用 交货 运输 确定库存等级 保证原料及时到达正确的生产地点
  • MATLAB金融工具箱(二)--执行常见的金融任务

    二 执行常见的金融任务 1 简介 金融工具箱包含了可以执行许多常见的金融任务的函数 包括 l 处理和转换日期 2 4页 日历功能可以将日期在不同格式之间进行转换 包括Excel格式 并决定未来和过去的日期 分辨假期和工作日 计算日期之间的时
  • 【Qt开发】编译时报"undefined reference to"问题的解决方案

    1 出现原因分析 Undefined reference to 错误 这类错误是在连接过程中出现的 可能有两种原因 1 是使用者自己定义的函数或者全局变量所在源代码文件 没有被编译 连接 2 干脆还没有定义 这需要使用者根据实际情况修改源程
  • 基于矩阵求解多元线性回归

    多元线性回归法也是深度学习的内容之一 用java实现一下多元线性回归 一元线性回归的公式为 y a x b 多元线性回归的公式与一元线性回归的公式类似 不过是矩阵的形式 可以表示为Y AX b 其中 Y是样本输出的合集 X是样本输入的合集
  • 协议转换网关 通用服务器,数据采集、协议转换网关

    产品名称 数据采集 协议转换网关 产品链接 http cn trustexporter com cp luomicekong o4256770 htm 手机版链接 https m trustexporter com cz4256770 ht
  • 【Linux】安装Ubuntu18.04时常见的一些问题

    1 vim sudo apt get install vim 出现 Command vim not found 解决办法 输入sudo apt install vim即可 sudo apt install vim 如果安装失败最后一行显示
  • TCP对方关闭对应的进程,调用Send将会产生Broken pipe信号默认会关闭进程

    解决 Linux下send函数 Broken pipe错误的解决方法 http www xootus net cache shtml 52 content 491 htm
  • 郝斌老师C语言零基础自学专讲180集完整版

    从C语言基础到后面的指针之类的都有 讲得还不错 下载地址 http pan baidu com share link shareid 43714 uk 1711320320
  • 编写一套工具库并上传NPM

    你的 工具箱 开箱即可用的 directive utils 说明 vue3 directive tools 是一个方便在 Vue 3 Ts 项目中快速使用的 directive tool 的 npm 插件 它允许您轻松地在项目中添加多种功能
  • 【网站】浏览器页面文本如何禁止和解除

    2023年 第37周 给自己一个目标 然后坚持总会有收货 不信你试试 有时候 看法的网站 网页文本内容希望不能被复制 那么就需要对浏览器网页进行一些限制 是一种网站开发中的保护措施 有时候 又希望能够复制网页的一些文本 发现被禁止 这就有了
  • 1015-O专题三

    1 题号 1015 O 2 题意 十进制转换二进制 十进制数在0 1000之间 3 解题思路 十进制数1000的二进制数为1111101000 共10位 所以定义数组内存11就可以 除2 取余数分别标记 输出时要将数组从后往前输出 4 感想
  • python对MP4文件的音轨读取和整合

    工作中 使用opencv对视频的人脸做处理 但是发现处理完成后得到的视频文件并没有声音 为此 作者采用以下办法解决 1 安装moviepy库 pip install moviepy 2 导入moviepy库 from moviepy edi
  • 1.3 安卓应用目录结构

    一 安卓应用视图 打开之前我们创建的安卓应用 HelloWorld 1 Project视图 安卓项目默认是Android视图 需要切换到Project视图 2 Package视图 切换到Package视图 3 Android视图 切换到An
  • 如何实现随机生成坐标点,并且使每个坐标点之间的距离大于某个距离?(用于散点图的绘制,进行数据的处理)

    背景 最近需要开发一个新需求 需要绘制一个随机生成数字的散点图 要求点与点的距离要大于某个特定值 解决思路 通过循环获取每个坐标点 每获取一个新的坐标点 都要与之前生成的坐标点进行对比 如果大于指定距离 则符合条件 退出循环 如果小于或等于