2016-08-16 6 views
0

`난 개의 다각형의 교차의 차이 보여주는 플롯 선형 링하려고 : DIF 플롯하고자 I`d파이썬 : 선형 링의 X, Y, Z 값을 검색

import mpl_toolkits.mplot3d as a3 
import matplotlib.pyplot as plt 
from shapely.geometry import Polygon 
fig = plt.figure() 
ax = Axes3D(fig) 

poly1 = Polygon([(220.0, 780, 500), (840, 780, 500), (840, 180, 500), (220.0, 180, 500)]) 
poly2 = Polygon ([(320.0, 380, 500), (740, 380, 500), (740, 180, 500), (320.0, 180, 500)]) 

dif = poly1.difference(poly2) 

을 그러나 사용하는 경우 : 나는 그러므로 X, Y, DIF의 Z 좌표를 얻으려고하고 음모

을 " '다각형'객체가 반복 가능한하지 않는 형식 오류"

top1 = a3.art3d.Poly3DCollection([dif],alpha=0.6) 

나는하는 오류가 말을 얻을 ,하지만 난 단지 x, y를 얻을 수 있었다. 사람.

z= [500,500,500,500,500,500,500,500] 
x,y = a.exterior.xy 

zipped = list(zip (x,y,z)) 
top1 = a3.art3d.Poly3DCollection([zipped],alpha=0.6) 
top1.set_color('wheat') 
top1.set_edgecolor('k')   
ax.add_collection3d(top1) 

ax.set_xlim(0, 1000) 
ax.set_ylim(0, 1000) 
ax.set_zlim(0, 1000) 
plt.show()  

그때 난 후 오전 음모를 얻을 수 있지만, 더 쉬운 방법을 찾고 난`는 DIF 플롯 : 테스트를 위해, 저는 현재 Z 값 수동으로 실시에-공급. 어떤이있는 경우,이 코드와 함께,

top1 = a3.art3d.Poly3DCollection([dif.exterior.coords],alpha=0.6) 

는 조심하고 또한 당신의 솔루션과 함께, 당신은 다각형의 내부 링을 잃어버린 같습니다 exterior

답변

1

당신이 좌표를 얻을 수 있습니다, 당신이 사용하는 속성 .

coords은 반복 가능을 반환하며, 목록을 만들려면 다시 작성해야합니다 (list(dif.exterior.coords)). 매끈한 만 2D 폴리곤을 처리하기 때문에, 3D 폴리곤과 매끈한는 오해의 소지가 사용

poly = Point(0,0).buffer(500) 
poly = Polygon([ (x, y, 500) for x, y in poly.exterior.coords ]) 
spoly = Point(0,0).buffer(200) 
spoly = Polygon([ (x, y, 500) for x, y in spoly.exterior.coords ]) 
poly = poly.difference(spoly) 

all_coords = [p.coords for p in poly.interiors] 
all_coords.append(poly.exterior.coords) 
top1 = a3.art3d.Poly3DCollection(all_coords,alpha=0.6) 

IMHO, 그리고 경우에 당신에게 문제를 가져올 것 : 내부 링을 가진 다각형

,이 예에서와 같이 그것을 처리 할 수 당신은 Shapely를 사용하는 코드 전체에 3D 부품을 분산시킵니다. 게다가, 코드를 읽는 누군가가 당신이 실제로는 3D 수학을하고 있다고 생각할 수 있습니다. 아마도 당신은 매끈하게 모든 2D 계산을 격리 할 수 ​​있으며, 그 후에 3D 파트를 추가 할 수 있습니다.