【多点构成的面积估算】凸包算法python 实现 + 经纬度坐标 python 实现

python中计算不规则图形面积的方法 对于更复杂的不规则图形,可能需要使用深度学习的方法。对于不规则图形的面积计算,你可以随机生成大量的点,然后计算这些点落在图形内部的概率,乘以图形的总面积,得到近似面积。对于一些复杂的不规则图形,可以通过网格划分将其划分为多个小矩形或三角形,然后分别计算每个小图形的面积并相加得到总面积。对于一些不规则的图形,可以使用数学函数进行拟合,然后通过求函数与坐标轴围成的面积来计算不规则图形的面积。对于更复杂的不规则图形,可以使用图像处理的方法,通过将图形转换为二值图像,然后计算白色区域的面积。 阅读详情

做用户聚类,有一个feature涉及到面积计算,温故一下之前了解到的凸包算法的流程,实际上,这篇文章基于的原文章,达到的精度,满足我的需求。具体实现上代码参考,因为坐标系不是笛卡尔坐标系

先上笔者参考已有的实现稍作修改后作为静态工具类使用的代码

# the class that seals the algorithm that uses convex hull to calculate the points-distributed-area
from math import *


class cal_area(object):
    @staticmethod
    def deg2rad(deg):
        return deg * (pi / 180)

    @staticmethod
    def cross(A, B):
        return A[0] * B[1] - A[1] * B[0]

    @staticmethod
    def vectorMinus(a, b):
        return ((a[0] - b[0]) * 1000, (a[1] - b[1]) * 1000)

    @staticmethod
    def getLTDis(A, B):
        lon1, lat1, lon2, lat2 = map(cal_area.deg2rad, [A[0], A[1], B[0], B[1]])
        dlon = lon2 - lon1
        dlat = lat2 - lat1
        a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
        c = 2 * asin(sqrt(a))
        r = 6371.393
        # print A,B
        return c * r * 1.0  # 1000.0

    @staticmethod
    def triangleAre(A, B, C):
        x, y, z = cal_area.getLTDis(A, B), cal_area.getLTDis(B, C), cal_area.getLTDis(C, A)
        c = (x + y + z) / 2
        return sqrt((c) * (c - y) * (c - z) * (c - x))

    @staticmethod
    def grahamScanArea(data):
        data.sort(key=lambda x: (x[0], x[1]), reverse=False)
        ans = [0] * (len(data) * 2)
        m = 0
        for item in data:
            top = len(item)
            while (m > 1 and cal_area.cross(cal_area.vectorMinus(ans[m - 1], ans[m - 2]),
                                            cal_area.vectorMinus(item, ans[m - 2])) <= 0): m = m - 1
            ans[m] = item
            m = m + 1
        k = m
        flag = True
        data.reverse()
        for item in data:
            if flag:
                flag = False
                continue
            while (m > k and cal_area.cross(cal_area.vectorMinus(ans[m - 1], ans[m - 2]),
                                            cal_area.vectorMinus(item, ans[m - 2])) <= 0): m = m - 1
            ans[m] = item
            m = m + 1
        m = m - 1
        b = [ans[i] for i in range(0, m)]
        if len(b) < 3: return 0
        # if DEBUG : print b
        return cal_area.AREA(b)

    @staticmethod
    def AREA(b):
        ans = 0.0
        for i in range(len(b)):
            if i == 0 or i + 1 >= len(b): continue
            x, y = b[i], b[i + 1]
            ans += cal_area.triangleAre(b[0], x, y)
        return ans


## 使用方式
# calculate coverage of the business that customer has been to
# form the user_points table
user_visited_area=[]
for user_id in user_business.keys():
    points=[]
    visited_business=user_business[user_id]
    for business_id in visited_business:
        business_
python实现随机n个点的最大闭包多边形以及求得此多边形的面积 这是产生的随机点以及闭包的结果截图: 直接上代码, 文件结构是这样的,functions放的所有需要使用的函数,main_test执行调用了一下。 直接运行main_test即可. function.py: import sys import math import time import random import matplotlib.pyplot as plt... 阅读详情

相关推荐

多边形面积计算公式, 根据GPS经纬度计算面积

多边形面积计算公式 GPS经纬度计算面积 原理:鞋带公式    定义:所述鞋带式或鞋带算法(也称为高斯的面积公式和测量员的式)是一种数学算法,以确定区域一个的简单多边形,其顶点由它们的描述笛卡尔坐标中的平面。用户交叉倍增相应的坐标,找到包含多边形的区域,并从周围的多边形中减去它,以找到其中的多边形区域。它被称为鞋带配方,因为构成多边形的坐标不断交叉倍增,就像绑鞋带一样。它有时也被称为鞋带方法。 举例 import math def computearea(data): arr = data.sp

weixin_45516065的博客 1958

再说不会用python计算地球表面多边形面积,可不能了!(记录五种可行方法)

由于地理投影导致导致每个像元实际地面面积不同,越靠近北极实际面积越小,越靠近赤道实际面积越大,如果不进行面积加权就简单平均,会导致温度较实际温度偏低。学习地球科学的小伙伴经常会因为无法计算网格的面积大小或者其他更加不规则的区域的面积而让头发惨死在手中,因此今天对计算地球表面多边形面积的方法进行了整理。.........

mijujun的博客 3666

Python求凸包及多边形面积教程

一般有两种算法来计算平面上给定n个点的凸包:Graham扫描法(Graham’s scan),时间复杂度为O(nlgn);Jarvis步进法(Jarvis march),时间复杂度为O(nh),其中h为凸包顶点的个数。这两种算法都按逆时针方向输出凸包顶点。 Graham扫描法 用一个栈来解决凸包问题,点集Q中每个点都会进栈一次,不符合条件的点会被弹出,算法终止时,栈中的点就是凸包的顶点(逆时针顺序在边界上)。 算法步骤如下图: import sys import math import time import random #获取基准点的下标,基准点是p[k] def get_l

c++通过自然语言处理技术分析语音信号音高

其中,缓冲区大小为2048,最小基频为80Hz,最大基频为1000Hz。通常情况下,音高在85Hz到255Hz之间,因此可以根据实际情况修改最小和最大基频值。C++中可以使用数字信号处理库或语音处理库,比如MATLAB、Praat、YIN算法等等来进行音高分析。对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。通常情况下,人的声音基频范围是85Hz到255Hz。这段代码使用了YIN算法来计算语音信号的基频,得出的结果即为音高。

SYC20110120的博客 1727

AOSP14 Launcher3——手势上滑关键类AbsSwipeHandler解析

通过精密的事件监听、状态管理和对系统动画 API 及 Launcher 内部组件的协调,实现了复杂而流畅的手势导航体验。它的抽象设计允许子类(如。是 Quickstep (Launcher3 的手势导航实现) 中处理。的核心逻辑抽象基类。这个非常核心且复杂的类。)定制特定的回家动画逻辑。好的,我们来深入分析。

Micheal_Yang's Blog 1519

PIDNet实战:如何在Cityscapes数据集上实现93.2 FPS的实时语义分割(附完整训练代码)

本文提供了在Cityscapes数据集上实现实时语义分割模型PIDNet的完整工程实践指南。PIDNet凭借其独特的比例-积分-微分三分支架构,在CVPR 2023上取得了速度与精度的出色平衡。文章详细介绍了从环境配置、数据预处理、模型训练到性能优化与部署的全流程,并分享了实现93.2 FPS高推理速度的关键技巧与代码。

weixin_29047919的博客 373

从DCI-P3到sRGB:跨媒体色彩转换的矩阵奥秘与实践

本文深入解析从DCI-P3到sRGB的色彩空间转换技术,揭示矩阵运算的核心原理与实践技巧。通过实战案例展示如何正确处理白点差异、伽马曲线转换等关键环节,帮助影视从业者解决跨媒体色彩匹配问题,确保作品在不同设备上呈现一致的视觉效果。

weixin_28709649的博客 328

Obsidian + AI 自动知识管理:手把手教程

装完后,在命令面板(Ctrl+P)搜 "Generate Summary",AI 会在当前笔记末尾追加一段摘要。你一个月前写的、现在想快速回顾的笔记长篇笔记(三千字以上)开会记录这类信息密集的内容过度自动化。有人装上插件后,所有笔记都让 AI 打标签、写摘要、找关联。最后笔记库看起来整整齐齐,但全都是 AI 的链接,你自己完全没参与。这样做的后果是什么?你写过的笔记跟你没有"真实连接"。你还是记不住。你还是不知道自己的知识库里有什么。AI 推荐,你决策。

weixin_43571227的博客 747

跨平台商品模型大解析:亚马逊 vs 阿里 vs 拼多多

本文深入探讨了亚马逊、阿里巴巴和拼多多三大电商平台的商品模型设计,分析了它们在变体关系、商品抽象层级和SKU定义等方面的异同。亚马逊模型以物流和变体为中心,强调全球仓配体系下的标准化管理;阿里模型采用多视角的弹性结构,适用于多类目、多品牌、多卖家环境;拼多多模型则结合平台标准化与商家个性化,适合短期促销和快速上新场景。文章还提供了实践建议,帮助自研电商平台或商品中台的开发者选择合适的商品结构,并强调了商品模型在电商系统中的核心作用。通过对比分析,本文旨在为读者提供商品建模的启发和参考。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 13万+

在 Fiori Elements Object Page 的表格中用 UI.Hidden 隐藏列:语义、边界与落地实践全解析

摘要: Fiori Elements的Object Page表格中,UI.Hidden注解支持静态和动态隐藏列。动态隐藏分为两种:基于父实体属性隐藏整列,或基于子实体属性按行隐藏单元格。关键约束包括:支持服务端操作的列禁止使用动态隐藏,否则会导致UX不一致。ABAP CDS不支持路径式UI.Hidden,需改用XML注解。该功能需与UI.Importance、个性化等机制明确区分,避免混淆。对于可能参与排序/过滤的列,建议仅使用静态隐藏。实际应用中需注意注解位置(整列或单元格级)和业务场景的匹配。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 204

手把手教你学Simulink--基于Simulink的移相全桥DC-DC变换器仿真建模

特点高效性:通过实现零电压开关(ZVS)减少开关损耗。电气隔离:使用变压器提供输入输出间的电气隔离。适用于中高功率应用:如服务器电源、工业电源等。挑战控制复杂度:精确控制相位差以实现软开关。元件选择:合适的电感、电容值对于性能至关重要。动态响应:快速响应负载变化,保持稳定的输出电压。首先明确要模拟的任务内容。设计一个能够支持特定输入输出电压比的PSFB变换器。根据工作频率和谐振元件值确定合适的电路参数。实现有效的控制策略来维持输出电压稳定,并实现软开关。

MHD0815的博客 518

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 【聚类一】基于密度峰查找的聚类
下一篇: 【并发】volatile 为什么不能保证线程安全
vectorX
博客等级 码龄11年 37粉丝 21原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值