코딩 및 기타

maps

정지홍 2025. 7. 16. 10:12

        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