日韩性视频-久久久蜜桃-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面积和判断顺逆时针方向的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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