2016-12-21 4 views
1

삼각형이있는 사각형의 색상이 있습니다. 이제 크리스마스에 "쿠키 커터 (cutie cutter)"처럼이 노이즈를 자르고 싶습니다. 폴리곤 경로로 둘러싸인 삼각형의 노이즈가 발생합니다.다각형 바깥 쪽 모두 다듬거나 바깥 쪽을 채우십시오.

어떻게 다각형 테두리와 겹치는 모든 픽셀을 잘라내어 pdf로 저장할 수 있습니까?

나는이 개 아이디어를 내놓았다 : 1 픽셀 (컬러 노이즈) 모양의 여부 들어 있는지를 테스트하는 기능을 사용

  • 방법. 그것을 할 수 있습니다!
    문제 : 테두리 픽셀의 가장자리가 선 밖으로 나옵니다. 이 예제에서는 매우 작습니다. 당신은 폴리곤 라인을 조금 더 크게 만들 수 있다고 주장 할 수 있습니다.
  • 방법 2 다각형 모양을 반전 한 다음 (다각형 외부에 채우기) 흰색으로 채 웁니다.
    문제 : 플롯 미리보기 창에서 원하는 결과가 나타납니다. PDF로 저장하면 모든 결과가 검은 색 다각형 모양의 흰색이됩니다.

재현 예를는 :

library(magrittr) 
library(ggplot2) 
library(SDMTools) 
polyGony <- c(0,0,100,50,50,100) %>% matrix(ncol=2,byrow = T) %>% as.data.frame() 
deltaN <- 200 #grid width 
sp1<-seq(1,100,length=deltaN) 
sp2<-seq(1,100,length=deltaN) 
sp<-expand.grid(x=sp1,y=sp2) 

set.seed(1337) 
sp$z <- sample(1:30,nrow(sp),replace = T) 

# Method 1 
outin = SDMTools::pnt.in.poly(sp[,1:2],polyGony) 
outin$z <- sp$z 
pointsInsideTri <- outin[outin$pip==1,-3] 

p <- ggplot(pointsInsideTri, aes(x, y)) + 
    geom_raster(aes(fill = z)) + 
    scale_fill_gradientn(colours=c("#FFCd94", "#FF69B4", "#FF0000","#4C0000","#000000")) 

p + geom_polygon(data = polyGony, aes(V1,V2),color="black", fill=NA) + theme(aspect.ratio = 1) 

# Method 2 
outSQ <-c(0,0,100,0,100,100,0,100) 
invPolyGony <- c(outSQ,0,0,100,50,50,100) %>% matrix(ncol=2,byrow = T) %>% as.data.frame() 


    p <- ggplot(sp, aes(x, y)) + 
     geom_raster(aes(fill = z)) + 
     scale_fill_gradientn(colours=c("#FFCd94", "#FF69B4", "#FF0000","#4C0000","#000000")) 

    p + geom_polygon(data = invPolyGony, aes(V1,V2) ,colour="black", fill="white") + theme(aspect.ratio = 1) 
+0

PDF가 유일한 문제입니까? 나에게 당신이 무엇을 찾고 있는지 분명하지 않다. – Christoph

+0

나는 다각형 경로로 픽셀 기반 이미지를 둘러싸고 싶다. 픽셀이 다각형 테두리 밖으로 "겹쳐"없어야합니다. 그럼 난 PDF 파일에 저장하고 싶습니다. –

+0

내가 이해하는 한, 당신의 이야기는 오해의 소지가있다. 당신이하고 싶은 것과 사용하고 싶은 방법을 알고 있습니다. 귀하의 문제는 단지 PDF로 결과를 저장하는 방법입니다. – Christoph

답변

0

내가 지금 문제가 무엇인지 알고있다. 다각형 외부의 모든 것을 채우기 위해서는 경로 (중간의 구멍)를 시계 방향으로 "실행"해야하며, 아웃터 경계는 반 시계 방향으로 실행해야합니다.

간단한 예를 만들었습니다. 우리는 별의 다각형을 가지고 있습니다. 나는 별 외부의 모든 것이 빨갛게되기를 바란다.

star <- c(25.000,1.000,31.000,18.000,49.000,18.000,35.000,29.000,40.000,46.000, 
      25.000,36.000,10.000,46.000,15.000,29.000,1.000,18.000,19.000,18.000) %>% matrix(ncol=2, byrow=T) 
star <- rbind(star,star[1,]) 
rim <- c(0,0, 50,0, 50,50,0,50,0,0) %>% matrix(ncol=2, byrow=T) 

datapolyM <- rbind(rim,star) %>% as.data.frame() 
names(datapolyM) <- c("x","y") 

ggplot(datapolyM, aes(x=x, y=y)) + 
    geom_polygon(fill="red", colour="black") 

pdf로 내보내기! 전체 이미지가 빨간색으로 채워지는 것을 볼 수 있습니다! 존중하십시오 적용하고 두 번째 줄에 명령을 역 :

지금 시계 방향으로 실행하기 위해 별의 경로를 설정 할 수 있습니다

star <- c(25.000,1.000,31.000,18.000,49.000,18.000,35.000,29.000,40.000,46.000, 
      25.000,36.000,10.000,46.000,15.000,29.000,1.000,18.000,19.000,18.000) %>% matrix(ncol=2, byrow=T) %>% apply(2, rev) 
star <- rbind(star,star[1,]) 
rim <- c(0,0, 50,0, 50,50,0,50,0,0) %>% matrix(ncol=2, byrow=T) 

datapolyM <- rbind(rim,star) %>% as.data.frame() 
names(datapolyM) <- c("x","y") 
datapolyM$id <- "a" 

ggplot(datapolyM, aes(x=x, y=y)) + 
    geom_polygon(fill="red") 

지금 다시 PDF로 내보낼 수 있습니다. 이번에는 효과가있는 것을 볼 수 있습니다! 주어진 다각형 모양 이외의 모든 것을 채웠습니다!