日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算polygon面积和判断顺逆时针方向的方法

發布時間:2024/7/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算polygon面积和判断顺逆时针方向的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.利用shapely求polygon面積

  import shapelyfrom shapely.geometry import Polygon, MultiPoint # 多邊形# box1 = [2, 0, 4, 2, 2, 4, 0, 2, 0, 0]box1 = [2, 0, 4, 2, 2, 4, 0, 2, 2, 2]poly_box1 = Polygon(np.array(box1).reshape(-1,2))print(poly_box1)print(poly_box1.area)

二.逆時針調整為順時針

1.四個點?

def polygon_area1():'''compute area of a polygon:param poly::return:'''# # #順時針# poly = np.array([[2, 0],# [4, 2],# [2, 4],# [0, 2]])# 逆時針poly = np.array([[2, 0],[0, 2],[2, 4],[4, 2]])poly_h = poly.shape[0]edge = []for i in range(poly_h - 1):edge.append((poly[i][0] - poly[i+1][0])*(poly[i][1] + poly[i + 1][1]))edge.append((poly[poly_h-1][0] - poly[0][0])*(poly[poly_h-1][1]+poly[0][1]))# edge = [# (poly[1][0] - poly[0][0]) * (poly[1][1] + poly[0][1]),# (poly[2][0] - poly[1][0]) * (poly[2][1] + poly[1][1]),# (poly[3][0] - poly[2][0]) * (poly[3][1] + poly[2][1]),# (poly[0][0] - poly[3][0]) * (poly[0][1] + poly[3][1])# ]area = np.sum(edge) / 2.print('=====The first way======')print('area:', area)if area <0:index = [0] + [i for i in range(poly_h - 1, 0, -1)]fix_poly = poly[index, :]print('fix_poly:', fix_poly) def polygon_area2():'''compute area of a polygon:param poly::return:'''# # #順時針# poly = np.array([[2, 0],# [4, 2],# [2, 4],# [0, 2]])# 逆時針poly = np.array([[2, 0],[0, 2],[2, 4],[4, 2]])edge = []poly_h = poly.shape[0]for i in range(poly_h-1):edge.append(poly[i][0] * poly[i+1][1] - poly[i+1][0] * poly[i][1])edge.append(poly[poly_h-1][0] * poly[0][1] - poly[0][0] * poly[poly_h-1][1])print('=====The second way======')# print('edge:', edge)area = np.sum(edge)/2.print('area:', area)#如果是逆時針 調整為順時針if area < 0:index = [0] + [i for i in range(poly_h-1, 0, -1)]# print(index)fix_poly = poly[index, :]print('fix_poly:', fix_poly) if __name__ == '__main__':# show_image()# compute_IOU_()polygon_area1()polygon_area2()

2.多個點

def polygon_area1():'''compute area of a polygon:param poly::return:'''# # #順時針# poly = np.array([[2, 0],# [4, 2],# [2, 4],# [0, 2]])# 逆時針 凹多邊形print('凹多邊形')poly = np.array([[2, 0],[2, 2],[0, 2],[2, 4],[4, 2]])# 逆時針 凸多邊形# print('凸多邊形')# poly = np.array([[2, 0],# [0, 0],# [0, 2],# [2, 4],# [4, 2]])poly_h = poly.shape[0]edge = []for i in range(poly_h - 1):edge.append((poly[i][0] - poly[i+1][0])*(poly[i][1] + poly[i + 1][1]))edge.append((poly[poly_h-1][0] - poly[0][0])*(poly[poly_h-1][1]+poly[0][1]))# edge = [# (poly[1][0] - poly[0][0]) * (poly[1][1] + poly[0][1]),# (poly[2][0] - poly[1][0]) * (poly[2][1] + poly[1][1]),# (poly[3][0] - poly[2][0]) * (poly[3][1] + poly[2][1]),# (poly[0][0] - poly[3][0]) * (poly[0][1] + poly[3][1])# ]area = np.sum(edge) / 2.print('=====The first way======')print('area:', area)if area <0:print('此為逆時針,調整為順時針')index = [0] + [i for i in range(poly_h - 1, 0, -1)]fix_poly = poly[index, :]print('fix_poly:', fix_poly) def polygon_area2():'''compute area of a polygon:param poly::return:'''# # #順時針# poly = np.array([[2, 0],# [4, 2],# [2, 4],# [0, 2]])# 逆時針 凹多邊形print('凹多邊形')poly = np.array([[2, 0],[2, 2],[0, 2],[2, 4],[4, 2]])# 逆時針 凸多邊形# print('凸多邊形')# poly = np.array([[2, 0],# [0, 0],# [0, 2],# [2, 4],# [4, 2]])edge = []poly_h = poly.shape[0]for i in range(poly_h-1):edge.append(poly[i][0] * poly[i+1][1] - poly[i+1][0] * poly[i][1])edge.append(poly[poly_h-1][0] * poly[0][1] - poly[0][0] * poly[poly_h-1][1])print('=====The second way======')# print('edge:', edge)area = np.sum(edge)/2.print('area:', area)#如果是逆時針 調整為順時針if area < 0:print('此為逆時針,調整為順時針')index = [0] + [i for i in range(poly_h-1, 0, -1)]# print(index)fix_poly = poly[index, :]print('fix_poly:', fix_poly) if __name__ == '__main__':# show_image()# compute_IOU_()polygon_area1()polygon_area2()

           

三.計算不規則多邊形面積

分解成梯形,面積依次相加

import numpy as np points = np.array([[0.72, 2.28],[2.66, 4.71],[5, 3.5],[3.63, 2.52],[4, 1.6],[1.9, 1]]) print(points.shape) h, w = points.shape areas = [] for i in range(0, points.shape[0]):area = (points[(i+1) % h][-1] + points[i][-1])*(points[(i+1) % h][0] - points[i][0])/2areas.append(area)print(points[i])print(points[(i+1) % h]) print('==areas:', areas) print(sum(areas))

?

參考:https://www.cnblogs.com/TenosDoIt/p/4047211.html

?

總結

以上是生活随笔為你收集整理的计算polygon面积和判断顺逆时针方向的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品无码久久久久 | 一本色道久久hezyo加勒比 | 国语一区| 黑人一区二区三区 | 欧美大片91 | 欧美中文字幕在线 | 国产主播一区二区 | 91 久久| 看污网站 | 国产乱码精品一区二区三区精东 | 久热免费视频 | 天天操狠狠操 | 久久久久久久久久久国产 | 国产精品腿扒开做爽爽爽挤奶网站 | 欧美xxxxx高潮喷水麻豆 | 操女人逼逼视频 | 成人h视频 | 蜜臀视频在线观看 | 国产女主播喷水高潮网红在线 | 91黄色免费视频 | 顶级嫩模啪啪呻吟不断好爽 | 99热这里都是精品 | av资源网站| 午夜在线影院 | 99热免费在线观看 | 草啪啪| 美女免费网站 | 国产香蕉视频 | 日韩孕交 | 国产高清在线免费 | 久久婷婷五月国产色综合激情 | 国模在线 | 西西午夜 | 美女免费黄视频 | 天天干天天操天天干 | 99久久精品国产一区色 | 高h调教冰块play男男双性文 | 2019日韩中文字幕mv | 久久亚洲精品无码va白人极品 | 男人的天堂在线视频 | 高h奶汁双性受1v1 | 日韩免费av一区 | 日本二三区 | 久久久久久国产精品免费播放 | av免费在线播放 | 18禁肉肉无遮挡无码网站 | 在线视频a| 欧美午夜精品久久久久免费视 | 在线观看va | 日韩精品成人免费观看视频 | 成人另类小说 | 国产一级二级毛片 | 人妖被c到高潮欧美gay | 国产精选久久 | 天堂欧美 | 免费日皮视频 | 性色网站 | 欧美a√| 爱情岛论语亚洲入口 | 成人在线视频免费 | 精品在线免费播放 | 国产精品久久久久久69 | 亚洲一级特黄 | 中文字幕 人妻熟女 | 日韩精品中文字幕一区二区 | 国产91免费看| 又黄又湿的网站 | 亚洲五月六月 | 久久理论电影 | 亚洲成人精品久久久 | 久久午夜神器 | 久久午夜视频 | 色老头一区二区三区 | 中文字幕日韩欧美一区二区三区 | 97伊人久久 | 国产a不卡 | 欧美大片免费在线观看 | 国产小视频免费在线观看 | 黑鬼大战白妞高潮喷白浆 | 欧美性猛交aaaa片黑人 | 欧美区视频| 视频二区三区 | 人人草网站| 国外亚洲成av人片在线观看 | 黄色片网站免费看 | 双性人妖互交localhost | 中文字幕日本在线 | 免费成人在线观看 | 伊人ab| 向日葵视频在线 | 午夜爽爽爽 | 一区二区三区偷拍 | ass精品国模裸体欣赏pics | 午夜免费网址 | 欧洲做受高潮免费看 | 亚洲国产日韩欧美在线观看 | 国产va在线观看 | 91麻豆精品国产午夜天堂 | 在线国产网站 |