希望创建有趣的视频过渡(灰度)。
鉴于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十六进制),然后在填充到中心时变亮。中心是白色(例如#FFFFFF)点。
谢谢!
答案 0 :(得分: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))
结果是:
这通过重复绘制尺寸逐渐减小且颜色彼此不同的填充多边形来工作。回答你的问题:
(1)这是我的机器(一台适度的Core 2 duo笔记本电脑)在0.09秒内完成的。它们可能是更快的其他语言/实现,但这对我来说似乎很快。
(2)由不与其他线交叉的线组成的平面形状通常称为简单多边形。
答案 1 :(得分:1)
使用2D Graphics,此example使用drawOval()
改变同心圆的透明度以达到类似的效果,但该方法可以扩展到draw()
任何实现Shape
界面。 AffineTransform
的createTransformedShape()
方法可用于同心地翻译和缩放大纲。