方程驱动的平滑阴影同心形状

Dav*_*vis 20 java math r 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]
Run Code Online (Sandbox Code Playgroud)

绘制时:

当阴影时,它会像(没有显示完全阴影,但足以表明这个想法):

请注意,阴影在外部是最暗的(例如,#000000 RGB十六进制),然后在填充到中心时变亮.中心将是白色(例如,#FFFFFFF)点.

问题

  1. 生成高分辨率,同心阴影灰度图像的最有效方法是什么,例如上面的阴影心脏?
  2. 什么是这种封闭的,对称的形状正式称为?

谢谢!

思路

Jam*_*mes 31

在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))
Run Code Online (Sandbox Code Playgroud)

结果如下:

填充心脏情节

这通过重复绘制尺寸逐渐减小且颜色彼此不同的填充多边形来工作.回答你的问题:

(1)这是我的机器(一台适度的Core 2 duo笔记本电脑)在0.09秒内完成的.它们可能是更快的其他语言/实现,但这对我来说似乎很快.

(2)由不与其他线交叉的线组成的平面形状通常称为简单多边形.

  • @Dave Jarvis我已经添加了更多内容来更直接地回答您的问题.这种方法很通用 - 你只需要提供一个不同的函数来绘制形状并确保它有一个scale参数(我的函数中的`r`).您为心脏图提供的公式称为参数方程. (2认同)