python画平行四边形_Python中最小的封闭平行四边形

本文介绍了一种纯Python实现的O(n)算法,用于找到一组凸多边形点的最小包围平行四边形。算法遵循特定论文中的描述,首先找到凸多边形的对偶点,然后通过计算平行向量和线段交点来确定平行四边形。
摘要由CSDN通过智能技术生成

这是我使用的纯Python O(n)实现:

import math

"""

Minimal Enclosing Parallelogram

area, v1, v2, v3, v4 = mep(convex_polygon)

convex_polygon - array of points. Each point is a array [x, y] (1d array of 2 elements)

points should be presented in clockwise order.

the algorithm used is described in the following paper:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.53.9659&rep=rep1&type=pdf

"""

def distance(p1, p2, p):

return abs(((p2[1]-p1[1])*p[0] - (p2[0]-p1[0])*p[1] + p2[0]*p1[1] - p2[1]*p1[0]) /

math.sqrt((p2[1]-p1[1])**2 + (p2[0]-p1[0])**2))

def antipodal_pairs(convex_polygon):

l = []

n = len(convex_polygon)

p1, p2 = convex_polygon[0], convex_polygon[1]

t, d_max = None, 0

for p in range(1, n):

d = dista

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值