方程驱动的平滑阴影同心形状
背景
希望创建有趣的video过渡(灰度)。
问题
给定表示闭合对称形状的方程 ,绘制轮廓并同心地将形状朝向其中心着色。
例
考虑以下等式:
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 RGBhex),然后在填充到中心时变亮。 中心将是白色(例如,#FFFFFFF)点。
问题
- 制作高分辨率,同心阴影灰度图像的最有效方法是什么,例如上面的阴影心脏?
- 什么是正式称为封闭,对称的形状?
谢谢!
思路
- 使用http://code.google.com/p/jmathplot/等库
- 使用GNUPlot
- 使用R.
- 使用Wolfram Alpha绘图,使用ImageMagick创建更小的同心版本
在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))
结果如下:
这通过重复绘制尺寸逐渐减小且彼此顶部具有不同颜色的填充多边形来工作。 回答你的问题:
(1)这是我的机器(一台适度的Core 2 duo笔记本电脑)在0.09秒内完成的。 它们可能是更快的其他语言/实现,但这对我来说似乎很快。
(2)由不与其他线交叉的线组成的平面形状通常称为简单多边形。
使用2D Graphics ,此示例使用drawOval()
来改变同心圆的透明度以实现类似的效果,但该方法可以扩展为draw()
实现Shape
接口的任何类。 AffineTransform
的createTransformedShape()
方法可用于同心地平移和缩放轮廓。