【发布时间】:2019-01-21 07:10:20
【问题描述】:
我正在尝试使用 shapely 来识别扇区和矩形之间交互的区域。 所以,我的问题分为两个部分:
如何定义(创建、表示)扇形为匀称的对象(三角形也足够),我的输入是坐标 x,y 、起始角、结束角、半径。
如何计算扇区列表和多边形(矩形)之间的交互面积
谢谢
【问题讨论】:
我正在尝试使用 shapely 来识别扇区和矩形之间交互的区域。 所以,我的问题分为两个部分:
如何定义(创建、表示)扇形为匀称的对象(三角形也足够),我的输入是坐标 x,y 、起始角、结束角、半径。
如何计算扇区列表和多边形(矩形)之间的交互面积
谢谢
【问题讨论】:
您可以使用以下功能将扇区创建为形状对象:
from shapely.geometry import Point, Polygon
import math
def sector(center, start_angle, end_angle, radius, steps=200):
def polar_point(origin_point, angle, distance):
return [origin_point.x + math.sin(math.radians(angle)) * distance, origin_point.y + math.cos(math.radians(angle)) * distance]
if start_angle > end_angle:
start_angle = start_angle - 360
else:
pass
step_angle_width = (end_angle-start_angle) / steps
sector_width = (end_angle-start_angle)
segment_vertices = []
segment_vertices.append(polar_point(center, 0,0))
segment_vertices.append(polar_point(center, start_angle,radius))
for z in range(1, steps):
segment_vertices.append((polar_point(center, start_angle + z * step_angle_width,radius)))
segment_vertices.append(polar_point(center, start_angle+sector_width,radius))
segment_vertices.append(polar_point(center, 0,0))
return Polygon(segment_vertices)
中心是一个形状匀称的点对象,步长定义了曲线的分辨率。
所以你可以这样创建一个扇区:
center = Point(0,0)
sect = sector(center, 10, 60, 20)
要计算交叉点的面积,首先要计算交叉点的形状:
square = Polygon([(0,0), (0,10),(10,10), (10,0)])
intersection = sect.intersection(square)
此时你以这种方式获得该区域:
calculated_area = intersection.area
【讨论】: