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
)。您为心脏图提供的方程称为参数方程。这是关于“如何绘制心脏”的两个常见问题中的第一个。我怀疑第二个问题的受访者在回答时不知道这一点(至少我不知道)。因此,如果您想要其他方法,您可能还想看看: