如何在R中画一个小圆圈

如何在R中画一个小圆圈,r,geometry-surface,R,Geometry Surface,这是一个圆形正方形的代码,我想知道它是否能得到一个类似于方拱的图形。 缔约国指出: 尽管构造一个圆形的正方形可能在概念上和物理上都很复杂 更简单的是,squircle具有更简单的方程,并且可以推广 更容易 { x这里是一个基本的Rsquircle函数。 我相信这些论点是自我描述的 x0,y0-中心坐标 半径-斜交半径 n-要计算的点数,默认值1000应使波形平滑 …-要传递到行的更多参数。请参阅帮助('par') 现在是函数和简单测试 squircle <- function(x0 = 0

这是一个圆形正方形的代码,我想知道它是否能得到一个类似于方拱的图形。

缔约国指出:

尽管构造一个圆形的正方形可能在概念上和物理上都很复杂 更简单的是,squircle具有更简单的方程,并且可以推广 更容易

{

x这里是一个基本的R
squircle
函数。
我相信这些论点是自我描述的

  • x0
    y0
    -中心坐标
  • 半径
    -斜交半径
  • n
    -要计算的点数,默认值
    1000
    应使波形平滑
  • -要传递到
    行的更多参数
    。请参阅
    帮助('par')
  • 现在是函数和简单测试

    squircle <- function(x0 = 0, y0 = 0, radius, n = 1000, ...){
      r <- function(radius, theta){
        radius/(1 - sin(2*theta)^2/2)^(1/4)
      }
      angle <- seq(0, 2*pi, length.out = n)
      rvec <- r(radius, angle)
      x <- rvec*cos(angle) + x0
      y <- rvec*sin(angle) + y0
      lines(x, y, ...)
    }
    
    plot(-5:5, -5:5, type = "n")
    squircle(0, 0, 2, col = "red")
    squircle(1, 1, 2, col = "blue", lty = "dashed")
    

    是您自己做这件事的原因,看看您的代码是否可以简化

    如果不是这样,一种可能是使用
    grid
    包中的函数
    grid.roundrect

    他们的帮助页面
    ?grid::grid.roundrect
    中采用的一个示例是

    grid.roundrect(width=.5, height=.5, name="rr", gp = gpar(fill = "red"))
    

    很好,我不知道。我发现写r(圆角半径)不太好units@Ferroao如果修改指数,它将不再是一个倒圆,而是一个超椭圆。
    # squircleFG: Manuel Fernandez-Guasti  (1992)
    squircleFG <- function(x0 = 0, y0 = 0, radius, s, n = 1000, ...){
      angle <- seq(0, 2*pi, length.out = n)
      cosa <- cos(angle)
      sina <- sin(angle)
      sin2a <- sin(2*angle)
      k <- sqrt(1 - sqrt(1 - s^2*sin2a^2))
      x <- k*radius*sign(cosa)/(sqrt(2)*s*abs(sina)) + x0
      y <- k*radius*sign(sina)/(sqrt(2)*s*abs(cosa)) + y0
      lines(x[-n], y[-n], ...)
    }
    
    
    plot(-5:5, -5:5, type = "n")
    squircleFG(0, 0, 2, s = 0.75, col = "red")
    squircleFG(1, 1, 2, s = 0.75, col = "blue", lty = "dashed")
    
    grid.roundrect(width=.5, height=.5, name="rr", gp = gpar(fill = "red"))