美文网首页图形图像中的数学
图形图像中的数学-跳动的红心

图形图像中的数学-跳动的红心

作者: 杜凌霄 | 来源:发表于2023-01-24 21:13 被阅读0次

跳动的红心

最新一步电视剧里面有程序员写的跳动的红心,不少人私下问我是如何实现的。红心图像如下

heart.jpg

红心中的数学

红心的顶部其实比较简单,左边和右边的心瓣都可以用半圆来构成。

半径为r的标准圆的方程为:
x^2 + y^2 = r^2
分别把这个圆的圆心向平移(-r, 0), (r, 0)并抛弃y<0的部分我们就可以得到红心的上半部分:
y = \begin{cases} \sqrt{r^2 - (x+r)^2}, & x \in [-2r, 0] \\ \sqrt{r^2 - (x-r)^2}, & x \in [0, 2r] \end{cases}

halfcircle.png

现在就剩下下半部分。

我们可以看一下y = acos(x)的图形

acos.png

看起来非常的像半个心尖了。我们把这个图在x方向向左平移1,向下平移\pi就可以得到左半部分的心尖。
y = acos(x + 1) - \pi

acos_left.png

右边部分只需要对称一下就好了,最后的公式为
y = acos(1-|x|) - \pi, x \in [-2, 2]
这样全部的数学公式就已经完成。

使用上面的公式,文章开头的图其实就已经可以绘制出来了。现在需要解决的问题是,我们怎么心动?

其实稍微分析一下也很简单,无非就是一个缩放。上面的两个半圆半径需要缩放,下面的反正弦函数也缩放一下就好了。半圆公式已经支持不同的半径,我们先把反正弦函数改造如下
y = \alpha(acos(1-|x/r|) - \pi), x \in [-2, 2]
其中r的半圆的半径,这个半径会跟随时间变化。
r = r_0 \alpha
\alpha是一个随着时间变化的参数。它来控制整体形状的大小,为了变化平滑,我们可以让它为帧号的函数
\alpha = 1 - 0.2*\cos(t*2)
这里t是当前的时间戳,2, 0.2都是根据自己喜好可以调整的,0.2控制大小变化的幅度,2控制变化的速度。

到这里,其实我们的心就已经可以随着时间变化了。

最终结果

编写程序就可以绘制出最终我们想要的红心。这里我使用python分别绘制了边框的红心和填充的红心。使用的函数都是比较简单的,简单实用。

animation.gif heart_fill.gif

更多文章在公众号“探知轩”发布,欢迎关注。

相关文章

  • 跳动的红心

    你是否感觉累了 感觉生活越来越乏味 每天如机器般循环往复的旋转 你是否感觉老了 渐渐没有了青春激情 对这世界失去了...

  • Python绘制跳动的红心♥

    前言 最近有一个电视剧,讲程序员的故事,巴拉巴拉......,被我关注的一个up主,吐槽了。总之电视剧中有一个跳动...

  • 十七 图形图像开发中的3D数学

    坐标系 左手坐标系和右手坐标系 世界坐标系:经纬坐标原点在本初子午线与赤道的交点 物体坐标系和物体的位置的所处的方...

  • Android学习笔记18 图形图像完全解析

    本文主要对Android开发中图形图像部分的相关内容作个简单的学习总结。 一、图形图像概述 在我们的应用开发中,图...

  • 迷失

    我的一握红心 日夜跳动着 在寻求天地的脉搏 于共振中崩碎了身体的枷锁 周边的空气 弥漫着地气儿的引力 狂傲与不羁 ...

  • Chapter 10. 图形图像处理&动画

    阅读原文 图形图像处理&动画 10.1 图形图像处理 在Android中,绘制图形时最常用就是Bitmap类、Bi...

  • [🎃南瓜日更|009]过年期间开始活在简书上了,除了睡就是刷简书

    简书消息让我小喜每个跳动的红心背后 也是一颗红心 这感觉让我着迷这感觉让我沉陷 我牵挂着牵挂着 简书钻每日发放公告...

  • 推荐一个好玩有用的APP---英语趣配音

    想分享数学术语与公式的英语读法(如果你想看例如图形图像相关外国视频的话),努力加强英语发音。 在此期间(2018-...

  • 第05节 OSG相关书籍

    以下是图形图像和OSG相关的图书汇总,包含图形图像相关的书籍比如GPU pro, GPU GEMS, OPENG相...

  • 图形图像处理

    iOS中图形图像处理 http://www.cocoachina.com/ios/20140925/9756.ht...

网友评论

    本文标题:图形图像中的数学-跳动的红心

    本文链接:https://www.haomeiwen.com/subject/etkdhdtx.html