2016-10-12 2 views
2

다각형 위에 겹쳐 놓은 격자가 있습니다. 토론 콘크리트를 만들려면, 다음 그림과 가정 다른 색상의 다각형 꼭대기에 격자의 셀을 겹쳐서 표시

enter image description here

내가 노란색 다각형을 가지고와 나는 그림과 같이 그리드를 오버레이합니다. 특정 규칙에 따라 그리드 셀의 색을 지정하고 싶습니다. 그들은 교차하는 세포를 붉게하고 녹색을 유지하는 것처럼 간단하지 않습니다. 각 격자 셀에 대해 조건부 검사를 수행 한 다음 결과에 따라 색상을 지정하려고합니다. 나는 그리드 셀을 어떻게 표현할 것인가를 생각해 보지 못하고 그 다음에 조건부 체크를 진행한다. 이것은 첫 번째 문제입니다. 이것은 데이터 구조 문제에 가깝습니다.

다음으로 오렌지색을 지정할 특정 셀을 알고 있다면 어떻게해야합니까? 이것은 그래픽 질문입니다.

figure 
hold on 

roi=[264.418629550321 234.728971962617;207.673447537473 220.710280373832;206.60278372591 78.1869158878505;75.9817987152034 66.5046728971964;58.8511777301927 447.345794392523;201.249464668094 454.355140186916;294.39721627409 380.757009345795;447.502141327623 430.990654205608;476.410064239829 262.766355140187;464.632762312634 213.700934579439;428.230192719486 145.943925233645;365.061027837259 134.261682242991;307.245182012848 152.953271028038;285.831905781585 193.841121495327]; 

axis([0 500 0 500]) 
axis equal 
view([0 -90]) 

X=roi(:,1); 
Y=roi(:,2); 

[a b] = meshgrid(1:500); 
inPoly1 = inpolygon(a,b,X,Y); 
imagesc(inPoly1); 
line(X, Y,'Color','r'); 

for k = 1:25:500 
    x = [1 500]; 
    y = [k k]; 
    plot(x,y,'Color','w','LineStyle','-'); 
    plot(x,y,'Color','k','LineStyle',':'); 
end 

for k = 1:25:500 
    x = [k k]; 
    y = [1 500]; 
    plot(x,y,'Color','w','LineStyle','-'); 
    plot(x,y,'Color','k','LineStyle',':'); 
end 

이 코드는 이미지 위에 생성하는 데 사용할 수 있습니다 기본적으로 1x1 그리드 셀이 같은 점에 대한 방법을

알아낼 수 있습니다. 그러나 이것은 도움이되지 않습니다. 나는 같은 방식으로 일반 nxn 그리드 셀과 함께 작업 할 수 있기를 원합니다.

격자 셀인 모든 사변형의 Matlab 셀을 형성 한 다음 조건부 검사를 수행하고 채우기 명령을 사용하여 다각형으로 색칠한다는 순진한 생각이 들었습니다. 더 나은, 쉬운 방법으로 바퀴를 가능한 한 작게 재창조해야합니까? 당신의 충고가 내가이 아이디어에 착수해야한다는 것이라면,이 모든 사변형의 Matlab 셀을 현명한 방법으로 형성 할 수있는 방법을 제안 할 수 있습니까?

나는 here을 보았지만이 도구는 내가 갖고 있지 않은 매핑 도구 상자를 사용합니다. 그래서 누군가가 기본 matlab 도구 상자의 영역 내에서 제안 할 수 있다면, 그것은 매우 감사하겠습니다. 다른 파이썬 솔루션을 제안하십시오. 코드 스 니펫을 제공하는 것이 어렵다면 알고리즘 조언도 도움이 될 것입니다.

답변

0

fill 명령 사용을 고려해 볼 수는 있지만 가능하면 patch을 사용하십시오. fill의 문제점은 격자 점의 수가 증가 할 때 심각한 성능 문제에 직면하게된다는 것입니다. 조건부 채색과 함께 사용하는 방법을 보려면 this question에서 제공 한 두 가지 답변을 살펴보십시오.

나의 제안imagescinpolygon을 계속 사용하고, 수치는 경계 격자 점에 적용 할 조건을 분류하는 것입니다.

다각형 내부에있는 격자 셀당 모서리 수를 계산하여 w이라고합시다.내 색칠 조건은 다음과 같습니다

  • w == 0 : 블랙

  • w == 1 : 블루

  • w == 2 : 빨간색

  • w == 3 : 녹색

  • w == 4 : 노란색

그래서 myColors = [0 0 0; 0 0 1; 1 0 0; 0 1 0; 1 1 0];을 내 색상 맵으로 정의합니다. 이것은 내가 w을 계산하는 방법입니다

X = [264; 208; 207; 76; 59; 201; 294; 448; 476; 465; 428; 365; 307; 286]; 
Y = [235; 221; 78; 67; 447; 454; 381; 431; 263; 214; 146; 134; 153; 194]; 
xl = 10; % xl is your lattice length 
yl = 25; % yl is your lattice height 
xv = 0:xl:500; 
yv = 0:yl:500; 
[a, b] = meshgrid(xv, yv); 
v = inpolygon(a, b, X, Y); 

% summing up 4 adjacent lattice points and decreasing lattice dimensions by 1: 
w = v(1:end-1,1:end-1) + v(2:end,1:end-1) + v(1:end-1,2:end) + v(2:end,2:end); 

% shifting the new lattice to the center of previous lattice: 
xw = xl/2:xl:500 - xl/2; 
yw = yl/2:yl:500 - yl/2; 

% plotting 
myColors = [0 0 0; 0 0 1; 1 0 0; 0 1 0; 1 1 0]; 
colormap(myColors) 
imagesc(xw, yw, w) 
axis equal tight off 

을 그리고 이것은 결과입니다 : 내가 격자를 이동

enter image description here

참고. 격자 셀 중심의 좌표를 imagesc으로 전달해야합니다. 따라서 경계에서 중심으로 이동하기 위해 반 격자 이동을 수행해야합니다 (크기를 한 행과 한 행으로 줄이기 위해 계산할 때 했었습니다). w).

경계 셀에만 관심이있는 경우 w > 0 & w < 4도 구분됩니다.

+1

'패치'팁의 경우 +1! –

관련 문제