
self.obstacles = [ (20, 80, 30, 40) , ( 70,80 , 80,40) , (30,80 , 70,70) , (20,40, 40,30) , (50,40 , 80,30)]
=======================================================================================
이거는 원형 장애물 추가 버전
import random
import math
import matplotlib.pyplot as plt
import time
class Map2D:
def __init__( self , width=100 , height=100 ):
self.width = width
self.height = height
self.rect_obstacles = [ (20, 100, 30, 20) , (60,0,70,80) , (40,40,50,50) , (80,80,90,90)]
self.circle_obstacles = [ (25, 75, 5), (50, 50, 8),(75, 25, 6)]
#self.obstacles = [ (20, 80, 30, 40) , ( 70,80 , 80,40) , (30,80 , 70,70) , (20,40, 40,30) , (50,40 , 80,30)]
def is_in_obstacle( self , x , y ):
for ( x_min , y_min , x_max , y_max ) in self.rect_obstacles:
# print(x)
if x < 0 or y < 0 or x > self.width or y > self.height:
return True
if( x_min <= x_max) and ( y_min <= y_max ):
if ( x_min <= x <= x_max ) and ( y_min <= y <= y_max ):
return True
elif ( x_max <= x_min ) and ( y_min <= y_max ):
if ( x_max <= x <= x_min ) and ( y_min <= y <= y_max ):
return True
elif ( x_max <= x_min ) and ( y_max <= y_min ):
if ( x_max <= x <= x_min ) and ( y_max <= y <= y_min ):
return True
elif ( x_min <= x_max ) and ( y_max <= y_min ):
if ( x_min <= x <= x_max ) and ( y_max <= y <= y_min ):
return True
elif ( 0 > x ) or ( 0> y ) or ( x>self.width ) or ( y>self.height ):
return True
# 원형 장애물 검사
for (cx, cy, r) in self.circle_obstacles:
if (x - cx)**2 + (y - cy)**2 <= r**2:
return True
return False
def plot_map(self):
fig, ax = plt.subplots()
ax.set_xlim(0, self.width)
ax.set_ylim(0, self.height)
ax.set_aspect("equal", adjustable="box")
ax.set_title("2D Map with Rectangles & Circles")
# 사각형 장애물 그리기
for (x_min, y_min, x_max, y_max) in self.rect_obstacles:
real_x_min, real_x_max = min(x_min, x_max), max(x_min, x_max)
real_y_min, real_y_max = min(y_min, y_max), max(y_min, y_max)
w = real_x_max - real_x_min
h = real_y_max - real_y_min
rect = plt.Rectangle((real_x_min, real_y_min), w, h,
facecolor='gray', alpha=0.4)
ax.add_patch(rect)
# 원형 장애물 그리기
for (cx, cy, r) in self.circle_obstacles:
circle = plt.Circle((cx, cy), r,
facecolor='gray', alpha=0.4)
ax.add_patch(circle)
return fig, ax'코딩 및 기타' 카테고리의 다른 글
| q250 접속 (0) | 2025.08.13 |
|---|---|
| 중간 (1) | 2025.08.01 |
| Quadratic Program (2) | 2025.07.06 |
| 확률 제약 모델 예측 제어 ( chance - constrained MPC , CC-MPC ) (1) | 2025.07.03 |
| 다항식 기반 최소 경로 최적화 (2) | 2025.07.01 |