Генерация вафельной карты с использованием не радиального полинома Зерника в R

Я смоделировал вафельную карту, используя радиальный зерник, используя код ниже.

library(data.table)
library(dplyr)


.odd <- function(n,m) {
  if (((n-m)%%2) == 0) return(FALSE)
  else return(TRUE)
}

rzernike <- function(rho, theta, n, m){
  if ((n<0) || (m<0) || (n<m) || (.odd(n,m))) stop("Bad argument to rzernike")
  #if ((n==0) && (m==0))return(0*rho)
  #if (n==m) return(n*rho^(n-1))
  #if (m==0) dr <- 0*rho else dr <- m*rho^(m-1)

  rmn <- 0
  for(l in seq(0, (n-m)/2, by=1)){
    num <- ((-1)^l * factorial(n-l))* rho^(n-(2*l))
    den <- factorial(l)*factorial((0.5*(n+m))-l)*factorial((0.5*(n-m))-l)
    r <- num/den
    rmn <- rmn + r
    #print(rmn)
  }
  z <- rmn * cos(m*theta)
  return(z)
}

### creating a grid of (x,y,z)
refx <- -0.0046
refy <- 0.5042  
pitchx <- 11.021679 
pitchy <- 15.291358
rho_vec <- c()
theta_vec <- c()
xvec <- c()
yvec <- c()


for(i in seq(-20,20,by=1)){
  for(j in seq(-20,20, by=1)){
    x <- refx + (pitchx * i)
    y <- refy + (pitchy * j)
    rad <- (x^2 + y^2)^0.5
    if(rad < 150){
      rho <- rad/1000
      theta <- atan(y/x)
      rho_vec <- c(rho_vec, rho)
      theta_vec <- c(theta_vec, theta)
      xvec <- c(xvec,x)
      yvec <- c(yvec,y)
    }
  }
}
z1 <- rzernike(rho_vec, theta_vec, 2, 0)
z <- z1 
df <- as.data.frame(cbind(xvec,yvec,z))

ggplot(df , aes(x = xvec, y = yvec)) +
  geom_raster(aes(fill = z), interpolate=TRUE) +
  #geom_text(aes(label = round(Coord/100, 0))) +
  scale_fill_gradientn(colors=rainbow(10))+
  guides(fill=guide_legend(title='Legend'))+
  theme(
    panel.background = element_rect(fill= 'white', color = 'white'),
    panel.grid.major = element_line(color='#E0E0E0'),
    panel.grid.minor = element_line(color='#E0E0E0')
    #,aspect.ratio=6/4
  )

Я получаю идеальную первичную сферическую вафельную карту из приведенного выше кода. Теперь я хочу создать вафельную карту не радиального шаблона, как шаблоны, показанные на рисунке ниже. Я пробовал использовать комбинации разных зерников, но они не дают мне ничего ближе к приведенным ниже схемам. Буду признателен за любую помощь здесь. Спасибо

0 ответов

Другие вопросы по тегам