计算几何——gitf-wrapping算法

news2024/11/25 10:35:59

几何中的"gift-wrapping"算法,又称为"Jarvis算法",是一种用于计算凸包(convex hull)的方法。下面我将为你解释一下该算法的步骤:

1. 找到具有最小x坐标的点P,我们将其作为凸包的起点。
2. 将P标记为当前点,并将其添加到凸包的顶点集合中。
3. 从当前点开始,选择一个未被访问过的点Q作为下一个顶点,并将其标记为当前点。
4. 遍历所有未被访问的点,计算当前点到每个未访问点的极角(相对于水平轴的夹角)。
5. 找到具有最小极角的点R,将其标记为下一个顶点,并将其添加到凸包的顶点集合中。
6. 将R作为新的当前点。
7. 重复步骤4-6,直到下一个顶点是起点P。

在执行完所有步骤后,你将获得一个具有按逆时针顺序排列的点序列的凸包。

请注意,该算法的时间复杂度是O(nh),其中n是点的数量,h是凸包的顶点数。此外,如果有多个点具有相同的最小极角,可以选择距离最远的点作为下一个顶点,以避免出现重复的顶点。

def gift_wrapping(points):
    n = len(points)
    if n < 3:
        return []

    hull = []
    leftmost = min(points, key=lambda p: p[0])
    hull.append(leftmost)

    while True:
        endpoint = points[0]
        for i in range(1, n):
            if points[i] == hull[-1] or endpoint == hull[-1]:
                endpoint = points[i]
                continue
            cross = orientation(hull[-1], endpoint, points[i])
            if cross < 0 or (cross == 0 and distance(hull[-1], points[i]) > distance(hull[-1], endpoint)):
                endpoint = points[i]

        if endpoint == leftmost:
            break

        hull.append(endpoint)

    return hull


def orientation(p, q, r):
    return (q[1]-p[1]) * (r[0]-q[0]) - (q[0]-p[0]) * (r[1]-q[1])


def distance(p, q):
    return (q[0]-p[0])**2 + (q[1]-p[1])**2

 

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

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

相关文章

doker安装RabbitMQ以及用java连接

目录 doker安装&#xff1a; RabitMq安装&#xff1a; java链接 doker安装&#xff1a; 参考链接&#xff08;非常详细&#xff09;&#xff1a; docker安装以及部署_docker bu shuminio_春风与麋鹿的博客-CSDN博客 安装好后开启doker //启动docker服务 systemctl start do…

PromQL讲解与实战操作

PromQL讲解与实战操作 一、PromQL 介绍 PromQL&#xff08;Prometheus Query Language&#xff09;是 Prometheus 内置的数据查询语言&#xff0c;它能实现对事件序列数据的查 询、聚合、逻辑运算等。它并且被广泛应用在 Prometheus 的日常应用当中&#xff0c;包括对数据查询…

在Linux服务器上简单部署一个Python项目

一、在对应的服务器上检查有无Python环境 大部分Linux系统都是自带了Python环境的&#xff0c;查看是否具备Python的运行环境&#xff0c;可以通过命令Python --version 或者 Python3 --version 查看。如果你的项目需要Python3的环境&#xff0c;而系统又没有&#xff0c;则需要…

Linux 开启 swap 分区详细教程

故事背景&#xff1a; 哥们云机器内存资源不足&#xff0c;搞个 kafka eagle 监控&#xff0c;刚跑起来就卡死了&#xff0c;就很无语&#xff0c;哥们忙活&#xff0c;算了直接开搞&#xff0c;内存不够&#xff0c;硬盘来凑&#xff0c;拿着硬盘去做swap分区&#xff0c;也能…

JavaEE-SpringMVC-云借阅图书管理系统(包含源码、数据库sql文件、报告)

文章目录 前言云借阅系统功能结构图云借阅系统结构层次云借阅系统项目文件组织结构开发环境具体操作1. Maven仓库修改2. MySQL数据库配置文件3. Tomcat运行截图 总结 前言 参考借鉴黑马程序员书籍&#xff1b;和老师上课讲解的代码和PPT。核心代码由自己编写完成&#xff0c;核…

【夜深人静学数据结构与算法】回溯算法

目录 前言&#xff1a; 回溯算法&#xff1a; 回溯法的常见应用: 回溯法的模板: 回溯法的图解&#xff1a;​ 案例&#xff1a; 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 回溯算法是一个比较抽象的算法&#xff0c;因此我们…

JavaScript中的面向对象

面向对象编程是一种编程范式。 面向对象。何为对象&#xff1f; 复习一下&#xff1a; JavaScript中的数据类型分为&#xff1a; 原始类型&#xff1a;数值型&#xff0c;字符串型&#xff0c;布尔型、ES6新增的symbol 特殊类型&#xff1a;undefined型&#xff0c;null型 组合…

chatgpt赋能python:隐藏输入:保护密码和敏感数据的有效方法

隐藏输入&#xff1a;保护密码和敏感数据的有效方法 在今天的数字时代&#xff0c;网络安全成为了无所不在的话题。密码和敏感数据的泄漏是任何人都不想看到的结果。因此&#xff0c;在这种情况下&#xff0c;隐藏输入成为了保护我们的密码和敏感数据的有效方法。 Python是数…

el-date-picker设置右侧显示图标

<template><div><el-form ref"form" label-width"100px"><el-form-item label"日期&#xff1a;" class"date_box"><el-date-picker v-model"time" type"date" :clearable"true&…

【GaussDB分布式特性】

GaussDB分布式特性 实验环境一、分布式架构二、分片和分区 实验环境 华为云GaussDB云数据库&#xff0c;规则如下&#xff1a; 集群拓扑结构&#xff0c;如下&#xff1a; 一、分布式架构 逻辑架构 常用部署方式 部署说明&#xff1a; 1.双AZ采用带第三方仲裁方式部署&am…

利用低代码平台实现协同办公,助力企业提升效益

概要&#xff1a;本文介绍了协同办公的作用&#xff0c;以及利用低代码平台实现协同办公的优势。同时也分享了天翎为华晨汽车打造的低代码协同工具&#xff0c;帮助企业提高管理效率&#xff0c;改善运营模式&#xff0c;提升产品质量及生产精益化。展示了咨询库、原料质量录入…

无锁队列ringbuff实现以及性能

文章目录 一、使用场景二、对比有锁优势三、无锁队列实现方式四、循环队列实现1&#xff09;数据结构设计3&#xff09;代码实现4&#xff09;性能测试5&#xff09;总结 一、使用场景 无锁队列主要适用于高并发场景或者对性能要求较高的场景&#xff0c;主要使用场景有如下几…

pytorch的permute(dims) 函数的功能详解

有三块 二维矩阵 如下 把二维矩阵堆叠起来&#xff0c;就是三维 矩阵 这样的矩阵 从x方向看&#xff08;0维&#xff09; 有三块 记为3&#xff0c;每块从y方向看&#xff08;1维&#xff09;的行是3&#xff0c;从z方向看&#xff08;2维&#xff09;列也是3&#xff0c;故三…

计算机中丢失mfc140.dll怎么解决?mfc140.dll是什么文件?

在计算机运行软件或者游戏的时候&#xff0c;提示mfc140.dll丢失&#xff0c;无法正常启动运行。 mfc140.dll是Windows操作系统中用于支持C编程语言的一个动态链接库&#xff0c;它包含了C运行时库的一些基本功能。用于支持Microsoft Visual Studio的MFC&#xff08;Microsoft …

论文解读:FastSAM | Fast Segment Anything | 基于yolov8-seg实现 比SAM快50倍

发表时间&#xff1a;2023.06.21 论文地址&#xff1a;http://export.arxiv.org/pdf/2306.12156 项目地址&#xff1a;https://github.com/CASIA-IVA-Lab/FastSAM 最近提出的任意分割模型&#xff08;SAM&#xff09;在许多计算机视觉任务中产生了重大影响。它正在成为许多高级…

NIO总结

简要介绍 NIO&#xff08;Non-blocking IO&#xff09;是Java 1.4版本开始引入的一个新的IO API&#xff0c;旨在代替传统IO&#xff0c;它引入了缓冲区和通道的概念&#xff0c;通过选择器实现多路复用。 传统IO会区分字节流InputStream和OutputStream以及字符流Reader和Wri…

GD32 时钟和晶振修改

芯片型号&#xff1a;gd32f470zi 库版本&#xff1a;GD32F4xx_Firmware_Library_V3.0.4 当需要修改外部晶振和主频时需要修改到以下几个地方 1.gd32f4xx.h //此宏定义为我们实际使用的外部晶振频率&#xff0c;此处改为实际使用的25M #define HXTAL_VALUE ((uint32_t)2…

单片机学习 13-I2C_EEPROM

I2C-EEPROM 实验 ​ 这一章我们来学习如何使用 51 单片机的 IO 口模拟 I2C 时序&#xff0c;并实现与AT24C02&#xff08;EEPROM&#xff09;之间的双向通信。开发板板载了 1 个 EEPROM 模块&#xff0c;可实现IIC 通信。本章要实现的功能是&#xff1a;系统运行时&#xff0c…

如何排查 Electron V8 引发的内存 OOM 问题

经过长达大半年时间的崩溃治理后&#xff0c;基于 Electron 框架开发的新版 PC 淘宝直播推流客户端的稳定性终于赶超基于QT 框架开发的旧版本了。剩下的崩溃问题中有 40% 是跟内存 OOM 有关&#xff0c;其中 V8FatalErrorCallback js heap OOM 问题整整困扰了我一个多月。历经千…

Pytorch--模型微调finetune--迁移学习 (待继续学习)

https://www.bilibili.com/video/BV1Z84y1T7Zh/?spm_id_from333.788&vd_source3fd64243313f29b58861eb492f248b34 主要方法 torchvision 微调timm 微调半精度训练 背景&#xff08;问题来源&#xff09; 解决方案 大模型无法避免过拟合&#xff0c;