IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> python计算闵科夫斯基和 -> 正文阅读

[数据结构与算法]python计算闵科夫斯基和

找了半天网上只有两种版本的计算闵科夫斯基和

夏天大佬的c++闵科夫斯基和这个大佬的闵科夫斯基和更好理解

饕餮传奇大佬的c++闵科夫斯基和这个大佬讲的更加细致,同时他的博客里还有很多其他的数学计算的讲解,挺好的(比如极角排序)

import math
import time


def Minkowski_sum(rec1, rec2):
    vectors=[]
    ans=[]

    #
    tmp_rec=rec1
    init_point1=rec1[0]
    for i in range(len(tmp_rec)):
        point=tmp_rec[i]
        if init_point1[1]==point[1] and init_point1[0]>point[0]:
            init_point1=point
        if point[1]>init_point1[1]:
            init_point1=point
        if i>0:
            vectors.append([tmp_rec[i][0] - tmp_rec[i - 1][0], tmp_rec[i][1] - tmp_rec[i - 1][1]])
        if i==len(tmp_rec)-1:
            vectors.append([tmp_rec[0][0] - tmp_rec[i][0], tmp_rec[0][1] - tmp_rec[i][1]])

    tmp_rec=rec2
    init_point2=rec2[0]
    for i in range(len(tmp_rec)):
        point=tmp_rec[i]
        if init_point2[1]==point[1] and init_point2[0]>point[0]:
            init_point2=point
        if point[1]>init_point2[1]:
            init_point2=point
        if i>0:
            vectors.append([tmp_rec[i][0] - tmp_rec[i - 1][0], tmp_rec[i][1] - tmp_rec[i - 1][1]])
        if i==len(tmp_rec)-1:
            vectors.append([tmp_rec[0][0] - tmp_rec[i][0], tmp_rec[0][1] - tmp_rec[i][1]])

    tmp_point=[init_point1[0]+init_point2[0],init_point1[1]+init_point2[1]]
    ans.append([tmp_point[0],tmp_point[1]])


    tmp_cmp=[]
    for i in range(len(vectors)):
        tmp_cmp.append([math.atan2(vectors[i][1],vectors[i][0]),vectors[i]])
    tmp_cmp=sorted(tmp_cmp,key= lambda tmp:tmp[0])
    # for i in tmp_cmp:
    #     print(i[0],i[1].x,i[1].y)
    vectors=[]
    for i in range(1,len(tmp_cmp)):
        if tmp_cmp[i][0]==tmp_cmp[i-1][0]:
            tmp_cmp[i][1][0]+=tmp_cmp[i-1][1][0]
            tmp_cmp[i][1][1]+=tmp_cmp[i-1][1][1]
        else:
            vectors.append(tmp_cmp[i-1][1])
    vectors.append(tmp_cmp[len(tmp_cmp)-1][1])


    for i in range(len(vectors)-1):
        tmp_point[0]+=vectors[i][0]
        tmp_point[1]+=vectors[i][1]
        ans.append([tmp_point[0],tmp_point[1]])

    return ans

def main():
    a=[]
    a.append([0,0])
    a.append([2,3])
    a.append([-3,1])

    b=[]
    b.append([0,0])
    b.append([1,1])
    b.append([0,4])
    b.append([-2,3])

    c=Minkowski_sum(a,b)
	print(c)

if __name__ == '__main__':
    start_time=time.time()*1000
    main()
    end_time=time.time()*1000
    print('time ',(end_time-start_time),' ms ')

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:04:09  更:2021-09-11 19:04:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:23:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码