MAK*_*MAK 2 python polygon shapely
我正在尝试使用 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)
Run Code Online (Sandbox Code Playgroud)
中心是一个形状良好的点对象,步长定义了曲线的分辨率。
所以你可以这样创建一个扇区:
center = Point(0,0)
sect = sector(center, 10, 60, 20)
Run Code Online (Sandbox Code Playgroud)
要计算交叉点的面积,首先要按以下方式计算交叉点的形状:
square = Polygon([(0,0), (0,10),(10,10), (10,0)])
Run Code Online (Sandbox Code Playgroud)
intersection = sect.intersection(square)
Run Code Online (Sandbox Code Playgroud)
此时您可以通过以下方式获得面积:
calculated_area = intersection.area
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1321 次 |
| 最近记录: |