【问题标题】:Plotting a chessboard with no external libraries绘制没有外部库的棋盘
【发布时间】:2015-11-24 06:13:14
【问题描述】:

我希望有人可以帮助我解决这个我花了好几个小时试图解决的问题。 我必须绘制一个没有外部库的棋盘(仅使用 R 中的默认图形函数)。

我的尝试是使用黑色方块,直到我必须过滤和绘制白色方块:

plot(c(1:9),c(1:9),type="n")
for (i in 1:8){
rect(i,1:9,i+1,9,col="black",border="white")
}

我可以通过这种方式手动完成,但我知道有一种更简单的方法:

plot(c(1:9),c(1:9),type="n")
rect(1, 2, 2, 1,col="black",border="white")
rect(4, 1, 3, 2,col="black",border="white")
rect(6, 1, 5, 2,col="black",border="white")
rect(7, 1, 8, 2,col="black",border="white")
(...)

我尝试添加一个函数来过滤循环内的偶数,但似乎对我不起作用。 如有任何建议,我将不胜感激!

【问题讨论】:

    标签: r for-loop plot chess


    【解决方案1】:

    使用 image 并一遍又一遍地重复 0:1。然后,您可以稍微调整一下限制以使其合身。

    image(matrix(1:0, 9, 9), col=0:1, xlim=c(-.05,.93), ylim=c(-.05,.93))
    

    【讨论】:

      【解决方案2】:

      只需更改解决方案中的col= 参数,如图所示。另请注意,c(1:9) 可以写成 1:9

      plot(1:9, 1:9, type = "n")
      for (i in 1:8) {
        col <- if (i %% 2) c("white", "black") else c("black", "white")
        rect(i, 1:9, i+1, 9, col = col, border = "white")
      }
      

      【讨论】:

        【解决方案3】:

        记住 Jeremy Kun 的帖子 https://jeremykun.com/2018/03/25/a-parlor-trick-for-set/ 现场帮助 我认为这个问题的困难部分(对我来说)。我意识到 棋盘上的对角线(主教继续前进)具有恒定的颜色。 因此,它们的 Y 轴截距(它们撞击 Y 轴的位置)将是独一无二的 确定它们的颜色,相邻的 Y 值会有不同 颜色。对于 (x,y) 处的正方形,y 截距(因为斜率为 1) 将在 Y == (y-x)。因为奇偶校验与加法相同 减法,我永远不确定哪个 mod 函数(在哪个 语言) 可能会给出否定结果,我使用 "(x+y) %% 2"。

        b <- matrix(nrow=8,ncol=8)              # basic board
        
        colorindex <- (col(b)+row(b))%%2        # parity of the Y-intercept
                                                # for each square
        colors <- c("red", "white")[colorindex+1] # choose colors
        side <- 1/8                               # side of one square
        ux <- col(b)*side                         # upper x values
        lx <- ux-side                             # lower x values
        uy <- row(b)*side                         # upper y
        ly <- uy-side                             # upper y
        plot.new()                                # initialize R graphics
        rect(lx, ly, ux, uy, col=colors, asp=1)   # draw the board
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-26
          • 2019-10-10
          • 1970-01-01
          相关资源
          最近更新 更多