心形函数的R语言实现
静态图片
x^2+y^2+a*x=a*sqrt(x^2+y^2)
x^2+y^2-a*x=a*sqrt(x^2+y^2)
R语言可视化实现代码为:
install.packages('RColorBrewer')
library(RColorBrewer)
col <- brewer.pal(3,'Set1')[1]
t <- seq(0,60,len=100)
x <- -.01*(-t^2+40*t+1200)*sin(pi*t/180)
y <- .01*(-t^2+40*t+1200)*cos(pi*t/180)
plot(c(-12,14),c(0,20),type='n',axes=T,xlab=' ' ,ylab='')
arrows(-11,8,14,8, lwd =10,col='gold')
arrows(14,8,-11,8,lwd =10,col='gold',angle = 120)
arrows(14,8,-10,8,lwd =10,col='gold', angle = 120)
arrows(14,8,-9,8,lwd=10,col='gold',angle = 120)
polygon(x+3,y,col =col , border=NA)
polygon(-x+3,y,col = col,border = NA)
lines(x+3,y,lwd=2)
lines(-x+3,y,lwd=2)
arrows(5,8,14,8,lwd =10,col='gold')
text(1,18,"I Love U", col='red' ,cex=2)
动图
# 安装并加载所需的R包
install.packages('RColorBrewer')
install.packages('animation')
library(RColorBrewer)
library(animation)
# 设置颜色
col <- brewer.pal(3,'Set1')[1]
t <- seq(0,60,len=100)
x <- -.01*(-t^2+40*t+1200)*sin(pi*t/180)
y <- .01*(-t^2+40*t+1200)*cos(pi*t/180)
# 动画绘制函数
draw_heart_with_moving_arrow <- function(frame) {
plot(c(-12,14),c(0,20),type='n',axes=TRUE,xlab=' ',ylab='')
# 绘制静态的右半侧爱心
polygon(x + 3, y, col = col, border = NA)
lines(x + 3, y, lwd = 2)
# 动态移动的箭头(调整长度)
arrows(-8 + frame, 8, 8 + frame, 8, lwd = 10, col = 'gold')
arrows(8 + frame, 8, -8 + frame, 8, lwd = 10, col = 'gold', angle = 120)
arrows(8 + frame, 8, -7 + frame, 8, lwd = 10, col = 'gold', angle = 120)
arrows(8 + frame, 8, -6 + frame, 8, lwd = 10, col = 'gold', angle = 120)
# 绘制覆盖在箭头上的左半侧爱心
polygon(-x + 3, y, col = col, border = NA)
lines(-x + 3, y, lwd = 2)
# 文本部分
text(1, 18, "I Love U", col = 'red', cex = 2)
}
# 生成动画并保存为GIF文件
saveGIF({
for (frame in seq(0, 14, by = 0.5)) {
draw_heart_with_moving_arrow(frame)
}
}, movie.name = "heart_with_moving_arrow.gif", interval = 0.1, ani.width = 500, ani.height = 500)
如何联系我们