Java 方程驱动的平滑着色同心形状 背景

Java 方程驱动的平滑着色同心形状 背景,java,r,math,parametric-equations,Java,R,Math,Parametric Equations,希望创建有趣的视频转换(灰度) 问题 假设它代表一个封闭、对称的形状,绘制轮廓并向中心对形状进行同心着色 例子 考虑以下等式: x = 16 * sin(t)^3 y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t) t = [0:2 * pi] 绘制时: 着色时,它将类似于(未显示完全着色,但足以显示想法): 请注意,着色在外部最暗(例如#000000 RGB十六进制),然后在填充到中心时变亮。中心将是一个白色(例如

希望创建有趣的视频转换(灰度)

问题 假设它代表一个封闭、对称的形状,绘制轮廓并向中心对形状进行同心着色

例子 考虑以下等式:

x = 16 * sin(t)^3
y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)
t = [0:2 * pi]
绘制时:

着色时,它将类似于(未显示完全着色,但足以显示想法):

请注意,着色在外部最暗(例如#000000 RGB十六进制),然后在填充到中心时变亮。中心将是一个白色(例如#FFFFFF)点

问题
  • 生成高分辨率、同心着色灰度图像(如上面的着色心脏)的最方便方法是什么
  • 这种封闭、对称的形状在形式上叫什么
  • 谢谢大家!

    思想
    • 使用诸如
    • 使用GNUPlot
    • 使用R
    • 使用Wolfram Alpha绘图,使用ImageMagick创建较小的同心版本
    使用,这将使用
    drawOval()
    改变同心圆的透明度,以实现类似效果,但该方法可以扩展到
    draw()
    实现该接口的任何类。的
    createTransformedShape()
    方法可用于同心平移和缩放轮廓。

    在R中尝试此方法:

    # create palette
    greyScale <- colorRampPalette(c("black","white"))
    
    # function to draw shape
    plotHeart <- function(r, col){
      t <- seq(0,2*pi,length.out=100)
      x <- r*sin(t)^3
      y <- (13*r/16)*cos(t) - (5*r/16)*cos(2*t) - (2*r/16)*cos(3*t) - (r/16)*cos(4*t)
      polygon(x,y,col=col,border=NA)
    }
    
    
    
    # create new plot canvas
    plot.new()
    # limits are approximate here
    plot.window(xlim=c(-16,16),ylim=c(-16,13))
    
    # use mapply to loop
    mapply(plotHeart,seq(16,0,length.out=100),greyScale(100))
    
    #创建调色板
    
    greyScale@Dave Jarvis我添加了更多内容以更直接地回答您的问题。这种方法非常通用-您只需提供一个不同的函数来绘制形状,并确保它具有缩放参数(我的函数中的
    r
    )。您为心脏图提供的方程称为参数方程。这是关于“如何绘制心脏”的两个常见问题中的第一个。我怀疑第二个问题的受访者在回答时不知道这一点(至少我不知道)。因此,如果您想要其他方法,您可能还想看看: