首页 > 其他分享 >将一组混乱的线形状的点排序为顺序排列的线|turf|js

将一组混乱的线形状的点排序为顺序排列的线|turf|js

时间:2024-07-18 16:07:39浏览次数:12  
标签:顺序排列 const js item points let currentPoint turf remainingPoints

思路是

1/找到一组点中距离最远的两个点,将其中一个作为线的起点

2/为起点找到距离其最近的点,作为线段的第二个点;

3/以第二个点为基准,找距离其最近的点作为第三个点,

4/以此类推,将一组点调整为一条没有重复方向的线

参数为一个二维数组,进入函数为sortLine

// 传入一对数组,传出一个距离值
function distance(pointArr1, pointArr2) {
    const point1 = turf.point(pointArr1)
    const point2 = turf.point(pointArr2)
    return turf.distance(point1, point2)
}
// 找到离某点最近的点
// 传入一个点和一个数组
// 传出一个点
function findNearestPoint(currentPoint, remainingPoints) {
    let neareatPoint = null
    let nearestDistance = Infinity
    remainingPoints.forEach(point => {
        const distanceValue = distance(point, currentPoint)
        if (distanceValue < nearestDistance) {
            nearestDistance = distanceValue
            neareatPoint = point
        }
    })
    return neareatPoint
}
// 找到一组点当中最远的一组点,用来做有向线的起点
// 传入一组数组,传出一对数组
function findFurthestPoints(points) {
    let maxDistance = 0
    let furthestPair = []
    for (let i = 0; i < points.length - 1; i++)
        for (let j = i + 1; j < points.length; j++) {
            const distanceValue = distance(points[i], points[j])
            if (distanceValue > maxDistance) {
                maxDistance = distanceValue
                furthestPair = [points[i], points[j]]
            }
        }
    return furthestPair
}
export function sortLine(points) {
    const sortedPoints = []
    let currentPoint = findFurthestPoints(points)[0]
    sortedPoints.push([...currentPoint])
    let remainingPoints = [...points].filter(item => (item[0] !== currentPoint[0] || item[1] !== currentPoint[1]))
    while (remainingPoints.length > 0) {
        const nearestPoint = findNearestPoint(currentPoint, remainingPoints)
        sortedPoints.push([...nearestPoint])
        currentPoint = nearestPoint
        remainingPoints = remainingPoints.filter(item => (item[0] !== nearestPoint[0] || item[1] !== nearestPoint[1]))
    }
    return sortedPoints
}

 

标签:顺序排列,const,js,item,points,let,currentPoint,turf,remainingPoints
From: https://www.cnblogs.com/guoguocode/p/18309773

相关文章

  • videojs hls视频流播放器
     需要用到的包"video.js":"^8.6.1","videojs-contrib-hls":"^5.15.0", 给两个测试流地址 <el-select v-model="hlsUrl" placeholder="请选择下拉选择下拉选择" clearable :style="{width:'100%&......
  • 探索Nuxt.js的useFetch:高效数据获取与处理指南
    title:探索Nuxt.js的useFetch:高效数据获取与处理指南date:2024/7/15updated:2024/7/15author:cmdragonexcerpt:摘要:“探索Nuxt.js的useFetch:高效数据获取与处理指南”详述了Nuxt.js中useFetch函数的使用,包括基本用法、动态参数获取、拦截器使用,及参数详解。文章......
  • Nuxt.js 中使用 useHydration 实现数据水合与同步
    title:Nuxt.js中使用useHydration实现数据水合与同步date:2024/7/18updated:2024/7/18author:cmdragonexcerpt:摘要:介绍Nuxt.js中useHydration函数,用于控制客户端与服务器数据同步,实现数据水合。参数包括key、get和set函数,适用于多种场景,示例展示数据获取与显示流......
  • Nuxt.js 中使用 useHydration 实现数据水合与同步
    title:Nuxt.js中使用useHydration实现数据水合与同步date:2024/7/18updated:2024/7/18author:cmdragonexcerpt:摘要:介绍Nuxt.js中useHydration函数,用于控制客户端与服务器数据同步,实现数据水合。参数包括key、get和set函数,适用于多种场景,示例展示数据获取与......
  • 修复hangfire dashboard js css 404
    原本服务的地址模式是www.namespace-servicename.envname.complayname.io,按公司新的ingress标准更新了服务之后,变成www.clustername.complayname.io/namespace/servicename,可以看到原本服务名是在host部分里,现在host所有服务都是一样的,服务名放到后面的path里了,然而更新之后有......
  • Delphi原生JSON框架(二)TJsonArray
    前面写了如何快速读取一个JSON串,但只是针对简单的类型,如果JSON串中有数组该怎么办呢?一、例子代码先看下面的代码,读取一个学生的各科成绩。procedureTForm6.Button1Click(Sender:TObject);varjsonstr:string;jv:TJSONValue;js:TJSONString;ja:TJSONArray;jo......
  • Delphi原生JSON框架(一) TJsonValue
    Delphi自带了json支持,引用System.json,你就可以处理json,读写json格式的内容都是被支持的。发展了几个版本,无论性能及稳定性都已经成熟,我不喜欢引用更多的三方到项目中,所以,对于Delphi处理json来说,自带的是我的首选。目前,DelphiJson的实现,支持json所有的类型:TJSONObjectTJSONArra......
  • 快速上手FFUF:一款高效的网络模糊测试js文件爆破工具
    在网络安全领域,FFUF不仅是一款功能强大的工具,适用于目录发现、子域名发现、以及HTTP方法模糊测试,还是一款js爆破工具。本文将引导你快速掌握FFUF的使用方法,不需要复杂的背景知识,适合基础小白学习。什么是FFUF?FFUF,即FuzzFasterUFool,是一款用Golang编写的快速网络......
  • 可视化—gojs 超多超实用经验分享(四)
    目录41.监听连线拖拽结束后的事件42.监听画布的修改事件43.监听节点被del删除后回调事件(用于实现调用接口做一些真实的删除操作)44.监听节点鼠标移入移出事件,hover后显示特定元素45.监听树图实现鼠标点击节点本身展开或收起子节点的功能,而不是点击另外的按钮46.监听文本块编......
  • 第十三篇 Json模块
    JSON函数使用JSON函数需要导入json库:importjson。函数描述json.dumps将Python对象编码成JSON字符串json.loads将已编码的JSON字符串解码为Python对象json.dumpsjson.dumps用于将Python对象编码成JSON字符串。语法json.dumps(obj,skipkeys=False,en......